Merge "msm: ipa: add support for WDS"

This commit is contained in:
qctecmdr 2022-06-26 20:53:48 -07:00 • committed by Gerrit - the friendly Code Review server
commit 75fa0e4d8d
2 changed files with 73 additions and 5 deletions

View file

@ -34,12 +34,45 @@ enum ipa_wdi_version {
#define IPA_WDI3_RX_DIR 3
#define IPA_WDI_INST_MAX (2)
/*
* <28 bytes of rx_msdu_end_tlv> + <16 bytes of attn_tlv> +
* <52 bytes of rx_msdu_start tlv>.
*/
#define IPA_WDI_RX_TLV_SIZE 96
/** struct ipa_ast_info_type - structure used for updating the AST table.
* @mac_addr_ad4_valid: bool to indicate whethere peer supports 4 address
* scheme or not.
* @sa_valid: bool to indicate whether SA has a valid entry in AST table.
* @first_msdu_in_mpdu_flag: bool to indicate whether current packet is first
* frame in mpdu aggregation or not.
* @sa_idx: Index to AST table.
* @sa_peer_id: TA peer id associated with SA.
* @ta_peer_id: TA peer id for the current frame.
* @skb: Packet pointer.
*/
struct ipa_ast_info_type {
bool mac_addr_ad4_valid;
bool sa_valid;
bool first_msdu_in_mpdu_flag;
u16 sa_idx;
u16 sa_peer_id;
u16 ta_peer_id;
struct sk_buff *skb;
};
typedef void (*ipa_wdi_mesh_ast_notifier_cb)(void *priv, unsigned long data);
/**
* struct ipa_wdi_init_in_params - wdi init input parameters
*
* @wdi_version: wdi version
* @notify: uc ready callback
* @priv: uc ready callback cookie
* @wdi_notify: bw notification cb
* inst_id: Instance ID
* @ast_update: AST update needed or not.
*/
struct ipa_wdi_init_in_params {
enum ipa_wdi_version wdi_version;
@ -49,6 +82,7 @@ struct ipa_wdi_init_in_params {
ipa_wdi_meter_notifier_cb wdi_notify;
#endif
int inst_id;
bool ast_update;
};
/**
@ -91,6 +125,8 @@ struct ipa_wdi_hdr_info {
* @meta_data: meta data if any
* @meta_data_mask: meta data mask
* @is_tx1_used: to indicate whether 2.4g or 5g iface
* @is_rx1_used: to indicate whether additional RX pipe for
* tagged traffic is needed
*/
struct ipa_wdi_reg_intf_in_params {
const char *netdev_name;
@ -101,6 +137,7 @@ struct ipa_wdi_reg_intf_in_params {
u32 meta_data_mask;
u8 is_tx1_used;
ipa_wdi_hdl_t hdl;
u8 is_rx1_used;
};
/**
@ -185,6 +222,7 @@ struct ipa_wdi_pipe_setup_info_smmu {
* struct ipa_wdi_conn_in_params - information provided by
* uC offload client
* @notify: client callback function
* @ast_notify: ast notification cb
* @priv: client cookie
* @is_smmu_enabled: if smmu is enabled
* @num_sys_pipe_needed: number of sys pipe needed
@ -196,9 +234,14 @@ struct ipa_wdi_pipe_setup_info_smmu {
* @is_tx1_used: to notify extra pipe required/not
* @tx1: parameters to connect TX1 pipe(from IPA to WLAN second pipe)
* @tx1_smmu: smmu parameters to connect TX1 pipe(from IPA to WLAN second pipe)
* @hdl: handle associated with this instance.
* @is_rx1_used: bool to indicate if additional rx pipe required or not
* @rx1: parameters to connect RX1 pipe(from WLAN to IPA second pipe)
* @rx1_smmu: smmu parameters to connect RX1 pipe(WLAN to IPA second pipe)
*/
struct ipa_wdi_conn_in_params {
ipa_notify_cb notify;
ipa_wdi_mesh_ast_notifier_cb ast_notify;
void *priv;
bool is_smmu_enabled;
u8 num_sys_pipe_needed;
@ -217,6 +260,11 @@ struct ipa_wdi_conn_in_params {
struct ipa_wdi_pipe_setup_info_smmu tx_smmu;
} u_tx1;
ipa_wdi_hdl_t hdl;
bool is_rx1_used;
union {
struct ipa_wdi_pipe_setup_info rx;
struct ipa_wdi_pipe_setup_info_smmu rx_smmu;
} u_rx1;
};
/**
@ -226,12 +274,14 @@ struct ipa_wdi_conn_in_params {
* @rx_uc_db_pa: physical address of IPA uC doorbell for RX
* @tx1_uc_db_pa: physical address of IPA uC doorbell for TX1
* @is_ddr_mapped: flag set to true if address is from DDR
* @rx1_uc_db_pa: physical address of IPA uC doorbell for RX1
*/
struct ipa_wdi_conn_out_params {
phys_addr_t tx_uc_db_pa;
phys_addr_t rx_uc_db_pa;
phys_addr_t tx1_uc_db_pa;
bool is_ddr_mapped;
phys_addr_t rx1_uc_db_pa;
};
/**

View file

@ -347,7 +347,7 @@ enum ipa_client_type {
IPA_CLIENT_WLAN3_PROD = 14,
IPA_CLIENT_WLAN3_CONS = 15,
/* RESERVED PROD = 16, */
IPA_CLIENT_WLAN2_PROD1 = 16,
IPA_CLIENT_WLAN4_CONS = 17,
IPA_CLIENT_USB_PROD = 18,
@ -384,7 +384,7 @@ enum ipa_client_type {
IPA_CLIENT_ODU_PROD = 38,
IPA_CLIENT_ODU_EMB_CONS = 39,
/* RESERVED PROD = 40, */
IPA_CLIENT_WLAN3_PROD1 = 40,
IPA_CLIENT_ODU_TETH_CONS = 41,
IPA_CLIENT_MHI_PROD = 42,
@ -507,7 +507,7 @@ enum ipa_client_type {
IPA_CLIENT_APPS_WAN_LOW_LAT_DATA_PROD = 120,
IPA_CLIENT_APPS_WAN_LOW_LAT_DATA_CONS = 121,
IPA_CLIENT_Q6_DL_NLO_LL_DATA_PROD = 122,
IPA_CLIENT_Q6_DL_NLO_LL_DATA_PROD = 122,
/* RESERVED CONS = 123, */
/* RESERVED PROD = 124, */
@ -542,6 +542,8 @@ enum ipa_client_type {
#define IPA_CLIENT_APPS_WAN_LOW_LAT_DATA_PROD IPA_CLIENT_APPS_WAN_LOW_LAT_DATA_PROD
#define IPA_CLIENT_APPS_WAN_LOW_LAT_DATA_CONS IPA_CLIENT_APPS_WAN_LOW_LAT_DATA_CONS
#define IPA_CLIENT_Q6_DL_NLO_LL_DATA_PROD IPA_CLIENT_Q6_DL_NLO_LL_DATA_PROD
#define IPA_CLIENT_WLAN2_PROD1 IPA_CLIENT_WLAN2_PROD1
#define IPA_CLIENT_WLAN3_PROD1 IPA_CLIENT_WLAN3_PROD1
#define IPA_CLIENT_IS_APPS_CONS(client) \
((client) == IPA_CLIENT_APPS_LAN_CONS || \
@ -1348,17 +1350,25 @@ struct ipa_flt_rule_v2 {
* IPA_HDR_L2_ETHERNET_II: L2 header of type Ethernet II
* IPA_HDR_L2_802_3: L2 header of type 802_3
* IPA_HDR_L2_802_1Q: L2 header of type 802_1Q
* IPA_HDR_L2_ETHERNET_II_AST: L2 header of type ETHERNET with AST update
* IPA_HDR_L2_802_1Q_AST: L2 header of type 802_1Q with AST update
*/
enum ipa_hdr_l2_type {
IPA_HDR_L2_NONE,
IPA_HDR_L2_ETHERNET_II,
IPA_HDR_L2_802_3,
IPA_HDR_L2_802_1Q,
IPA_HDR_L2_ETHERNET_II_AST,
IPA_HDR_L2_802_1Q_AST,
};
#define IPA_HDR_L2_MAX (IPA_HDR_L2_802_1Q + 1)
#define IPA_HDR_L2_MAX (IPA_HDR_L2_802_1Q_AST + 1)
#define IPA_HDR_L2_802_1Q IPA_HDR_L2_802_1Q
#define IPA_HDR_L2_ETHERNET_II_AST IPA_HDR_L2_ETHERNET_II_AST
#define IPA_HDR_L2_802_1Q_AST IPA_HDR_L2_802_1Q_AST
/**
* enum ipa_hdr_l2_type - Processing context type
*
@ -2749,6 +2759,7 @@ struct ipa_msg_meta {
* @name: name of the wlan interface
* @mac_addr: mac address of wlan client
* @if_index: netdev interface index
* @ast_update: Boolean to indicate whether AST update is required or not
*
* wlan drivers need to pass name of wlan iface and mac address of
* wlan client along with ipa_wlan_event, whenever a wlan client is
@ -2758,6 +2769,8 @@ struct ipa_wlan_msg {
char name[IPA_RESOURCE_NAME_MAX];
uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
int16_t if_index;
#define IPA_WDI_AST_UPDATE
uint8_t ast_update;
};
/**
@ -2766,11 +2779,14 @@ struct ipa_wlan_msg {
*
* WLAN_HDR_ATTRIB_MAC_ADDR: attrib type mac address
* WLAN_HDR_ATTRIB_STA_ID: attrib type station id
* WLAN_HDR_ATTRIB_TA_PEER_ID: ta peer id associated with mac
*/
enum ipa_wlan_hdr_attrib_type {
WLAN_HDR_ATTRIB_MAC_ADDR,
WLAN_HDR_ATTRIB_STA_ID
WLAN_HDR_ATTRIB_STA_ID,
WLAN_HDR_ATTRIB_TA_PEER_ID
};
#define WLAN_HDR_ATTRIB_TA_PEER_ID WLAN_HDR_ATTRIB_TA_PEER_ID
/**
* struct ipa_wlan_hdr_attrib_val - header attribute value
@ -2778,6 +2794,7 @@ enum ipa_wlan_hdr_attrib_type {
* @offset: offset of attribute within header
* @u.mac_addr: mac address
* @u.sta_id: station id
* @u.ta_peer_id: ta peer id
*/
struct ipa_wlan_hdr_attrib_val {
enum ipa_wlan_hdr_attrib_type attrib_type;
@ -2785,6 +2802,7 @@ struct ipa_wlan_hdr_attrib_val {
union {
uint8_t mac_addr[IPA_MAC_ADDR_SIZE];
uint8_t sta_id;
uint16_t ta_peer_id;
} u;
};