qcacmn: Define T2LM structure in wlan_mlo_peer_context structure

T2LM negotiation happens per MLD level. Hence, define the T2LM related
structure in wlan_mlo_peer_context.

Add API to get the protected EHT action frame subtype.

Change-Id: Ia3870fbb38b8d673f96954af18078c96d20365f3
CRs-Fixed: 3167178
Tento commit je obsažen v:
Shashikala Prabhu
2022-04-19 10:54:58 +05:30
odevzdal Madan Koyyalamudi
rodič bf5043dc92
revize 6f0d0248f0
4 změnil soubory, kde provedl 265 přidání a 0 odebrání

Zobrazit soubor

@@ -596,6 +596,7 @@ enum element_ie {
* @WLAN_EXTN_ELEMID_EHTOP: EHT Operation IE
* @WLAN_EXTN_ELEMID_MULTI_LINK: Multi-Link IE
* @WLAN_EXTN_ELEMID_EHTCAP: EHT Capabilities IE
* @WLAN_EXTN_ELEMID_T2LM: TID-to-link mapping IE
*/
enum extn_element_ie {
WLAN_EXTN_ELEMID_HECAP = 35,
@@ -615,6 +616,7 @@ enum extn_element_ie {
#ifdef WLAN_FEATURE_11BE
WLAN_EXTN_ELEMID_EHTCAP = 108,
#endif
WLAN_EXTN_ELEMID_T2LM = 109,
};
/**
@@ -2201,6 +2203,42 @@ struct wlan_ml_bv_linfo_perstaprof_stainfo_dtiminfo {
#endif /* WLAN_FEATURE_11BE_MLO */
#endif /* WLAN_FEATURE_11BE */
#ifdef WLAN_FEATURE_T2LM
/**
* struct wlan_ie_tid_to_link_mapping - TID-to-link mapping IE
* @elem_id: T2LM IE
* @elem_len: T2LM IE len
* @elem_id_extn: T2LM extension id
* @data: Variable length data described below
*/
struct wlan_ie_tid_to_link_mapping {
uint8_t elem_id;
uint8_t elem_len;
uint8_t elem_id_extn;
uint8_t data[];
} qdf_packed;
/* The variable length data in wlan_ie_tid_to_link_mapping structure has the
* following fields.
* - TID-to-link mapping control ( 1 octet)
* - Link mapping presence indicator (0 or 1 octet)
* - Link mapping of TID 0(optional) to TID 7(optional). Each field has 0 or 2
* octets.
*/
/* Definitions related TID-to-link mapping control*/
/* Direction */
#define WLAN_T2LM_CONTROL_DIRECTION_IDX 0
#define WLAN_T2LM_CONTROL_DIRECTION_BITS 2
/* Default link mapping */
#define WLAN_T2LM_CONTROL_DEFAULT_LINK_MAPPING_IDX 2
#define WLAN_T2LM_CONTROL_DEFAULT_LINK_MAPPING_BITS 1
/* Bit3 to Bit7 are reserved*/
/* Link mapping presence indicator */
#define WLAN_T2LM_CONTROL_LINK_MAPPING_PRESENCE_INDICATOR_IDX 8
#define WLAN_T2LM_CONTROL_LINK_MAPPING_PRESENCE_INDICATOR_BITS 8
#endif /* WLAN_FEATURE_T2LM */
/**
* struct he_oper_6g_param: 6 Ghz params for HE
* @primary_channel: HE 6GHz Primary channel number

Zobrazit soubor

@@ -125,6 +125,7 @@ enum mgmt_subtype {
* @ACTION_CATEGORY_CDMG: CDMG Action frame
* @ACTION_CATEGORY_CMMG: CMMG Action frame
* @ACTION_CATEGORY_GLK: GLK Action frame
* @ACTION_CATEGORY_PROTECTED_EHT: Protected EHT Action frame
* @ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED: vendor specific protected
* action category
* @ACTION_CATEGORY_VENDOR_SPECIFIC: vendor specific action category
@@ -160,6 +161,7 @@ enum mgmt_action_category {
ACTION_CATEGORY_CDMG = 27,
ACTION_CATEGORY_CMMG = 28,
ACTION_CATEGORY_GLK = 29,
ACTION_CATEGORY_PROTECTED_EHT = 37,
ACTION_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
ACTION_CATEGORY_VENDOR_SPECIFIC = 127,
};
@@ -500,6 +502,18 @@ enum twt_actioncode {
TWT_INFORMATION = 11,
};
/**
* enum eht_actioncode - Protected EHT action frames
* @EHT_T2LM_REQUEST: T2LM request action frame
* @EHT_T2LM_RESPONSE: T2LM response action frame
* @EHT_T2LM_TEARDOWN: T2LM teardown action frame
*/
enum eht_actioncode {
EHT_T2LM_REQUEST = 0,
EHT_T2LM_RESPONSE = 1,
EHT_T2LM_TEARDOWN = 2,
};
/**
* struct action_frm_hdr - action frame header
* @action_category: action category
@@ -635,6 +649,9 @@ struct action_frm_hdr {
* @MGMT_ACTION_TWT_SETUP: TWT setup frame
* @MGMT_ACTION_TWT_TEARDOWN: TWT teardown frame
* @MGMT_ACTION_TWT_INFORMATION: TWT information frame
* @MGMT_ACTION_EHT_T2LM_REQUEST: T2LM request frame
* @MGMT_ACTION_EHT_T2LM_RESPONSE: T2LM response frame
* @MGMT_ACTION_EHT_T2LM_TEARDOWN: T2LM teardown frame
* @MGMT_MAX_FRAME_TYPE: max. mgmt frame types
*/
enum mgmt_frame_type {
@@ -764,6 +781,9 @@ enum mgmt_frame_type {
MGMT_ACTION_TWT_SETUP,
MGMT_ACTION_TWT_TEARDOWN,
MGMT_ACTION_TWT_INFORMATION,
MGMT_ACTION_EHT_T2LM_REQUEST,
MGMT_ACTION_EHT_T2LM_RESPONSE,
MGMT_ACTION_EHT_T2LM_TEARDOWN,
MGMT_MAX_FRAME_TYPE,
};

Zobrazit soubor

@@ -791,6 +791,45 @@ mgmt_get_twt_action_subtype(uint8_t action_code)
return frm_type;
}
#ifdef WLAN_FEATURE_11BE
/**
* mgmt_get_protected_eht_action_subtype() - gets protected EHT action subtype
* @action_code: action code
*
* This function returns the subtype for protected EHT action category.
*
* Return: mgmt frame type
*/
static enum mgmt_frame_type
mgmt_get_protected_eht_action_subtype(uint8_t action_code)
{
enum mgmt_frame_type frm_type;
switch (action_code) {
case EHT_T2LM_REQUEST:
frm_type = MGMT_ACTION_EHT_T2LM_REQUEST;
break;
case EHT_T2LM_RESPONSE:
frm_type = MGMT_ACTION_EHT_T2LM_RESPONSE;
break;
case EHT_T2LM_TEARDOWN:
frm_type = MGMT_ACTION_EHT_T2LM_TEARDOWN;
break;
default:
frm_type = MGMT_FRM_UNSPECIFIED;
break;
}
return frm_type;
}
#else
static enum mgmt_frame_type
mgmt_get_protected_eht_action_subtype(uint8_t action_code)
{
return MGMT_FRM_UNSPECIFIED;
}
#endif /* WLAN_FEATURE_11BE */
/**
* mgmt_txrx_get_action_frm_subtype() - gets action frm subtype
* @mpdu_data_ptr: pointer to mpdu data
@@ -881,6 +920,10 @@ mgmt_txrx_get_action_frm_subtype(uint8_t *mpdu_data_ptr)
frm_type =
mgmt_get_twt_action_subtype(action_hdr->action_code);
break;
case ACTION_CATEGORY_PROTECTED_EHT:
frm_type = mgmt_get_protected_eht_action_subtype(
action_hdr->action_code);
break;
default:
frm_type = MGMT_FRM_UNSPECIFIED;
break;

Zobrazit soubor

@@ -383,6 +383,166 @@ struct mlpeer_auth_params {
void *rs;
};
#ifdef WLAN_FEATURE_T2LM
/**
* enum wlan_t2lm_direction - Indicates the direction for which TID-to-link
* mapping is available.
* @WLAN_T2LM_DL_DIRECTION: Downlink
* @WLAN_T2LM_UL_DIRECTION: Uplink
* @WLAN_T2LM_BIDI_DIRECTION: Both downlink and uplink
* @WLAN_T2LM_MAX_DIRECTION: Max direction, this is used only internally
* @WLAN_T2LM_INVALID_DIRECTION: Invalid, this is used only internally to check
* if the mapping present in wlan_t2lm_of_tids structure is valid or not.
*/
enum wlan_t2lm_direction {
WLAN_T2LM_DL_DIRECTION,
WLAN_T2LM_UL_DIRECTION,
WLAN_T2LM_BIDI_DIRECTION,
WLAN_T2LM_MAX_DIRECTION,
WLAN_T2LM_INVALID_DIRECTION,
};
/* Total 8 TIDs are supported, TID 0 to TID 7 */
#define T2LM_MAX_NUM_TIDS 8
/**
* enum wlan_t2lm_category - T2LM category
*
* @WLAN_T2LM_CATEGORY_NONE: none
* @WLAN_T2LM_CATEGORY_REQUEST: T2LM request
* @WLAN_T2LM_CATEGORY_RESPONSE: T2LM response
* @WLAN_T2LM_CATEGORY_TEARDOWN: T2LM teardown
* @WLAN_T2LM_CATEGORY_INVALID: Invalid
*/
enum wlan_t2lm_category {
WLAN_T2LM_CATEGORY_NONE = 0,
WLAN_T2LM_CATEGORY_REQUEST = 1,
WLAN_T2LM_CATEGORY_RESPONSE = 2,
WLAN_T2LM_CATEGORY_TEARDOWN = 3,
WLAN_T2LM_CATEGORY_INVALID,
};
/**
* enum wlan_t2lm_tx_status - Status code applicable for the T2LM frames
* transmitted by the current peer.
*
* @WLAN_T2LM_TX_STATUS_NONE: Status code is not applicable
* @WLAN_T2LM_TX_STATUS_SUCCESS: AP/STA successfully transmitted the T2LM frame
* @WLAN_T2LM_TX_STATUS_FAILURE: Tx failure received from the FW.
* @WLAN_T2LM_TX_STATUS_RX_TIMEOUT: T2LM response frame not received from the
* peer for the transmitted T2LM request frame.
* @WLAN_T2LM_TX_STATUS_INVALID: Invalid status code
*/
enum wlan_t2lm_tx_status {
WLAN_T2LM_TX_STATUS_NONE = 0,
WLAN_T2LM_TX_STATUS_SUCCESS = 1,
WLAN_T2LM_TX_STATUS_FAILURE = 2,
WLAN_T2LM_TX_STATUS_RX_TIMEOUT = 3,
WLAN_T2LM_TX_STATUS_INVALID,
};
/**
* enum wlan_t2lm_resp_frm_type - T2LM status corresponds to T2LM response frame
*
* @WLAN_T2LM_RESP_TYPE_SUCCESS: T2LM mapping provided in the T2LM request is
* accepted either by the AP or STA
* @WLAN_T2LM_RESP_TYPE_DENIED_TID_TO_LINK_MAPPING: T2LM Request denied because
* the requested TID-to-link mapping is unacceptable.
* @WLAN_T2LM_RESP_TYPE_PREFERRED_TID_TO_LINK_MAPPING: T2LM Request rejected and
* preferred TID-to-link mapping is suggested.
* @WLAN_T2LM_RESP_TYPE_INVALID: Status code is not applicable.
*/
enum wlan_t2lm_resp_frm_type {
WLAN_T2LM_RESP_TYPE_SUCCESS = 0,
WLAN_T2LM_RESP_TYPE_DENIED_TID_TO_LINK_MAPPING = 133,
WLAN_T2LM_RESP_TYPE_PREFERRED_TID_TO_LINK_MAPPING = 134,
WLAN_T2LM_RESP_TYPE_INVALID,
};
/**
* enum wlan_t2lm_enable - TID-to-link negotiation supported by the mlo peer
*
* @WLAN_T2LM_NOT_SUPPORTED: T2LM is not supported by the MLD
* @WLAN_MAP_EACH_TID_TO_SAME_OR_DIFFERENET_LINK_SET: MLD supports the mapping
* of each TID to the same or different link set (Disjoint mapping).
* @WLAN_MAP_ALL_TIDS_TO_SAME_LINK_SET: MLD only supports the mapping of all
* TIDs to the same link set.
* @WLAN_T2LM_ENABLE_INVALID: invalid
*/
enum wlan_t2lm_enable {
WLAN_T2LM_NOT_SUPPORTED = 0,
WLAN_MAP_EACH_TID_TO_SAME_OR_DIFFERENET_LINK_SET = 1,
WLAN_MAP_ALL_TIDS_TO_SAME_LINK_SET = 2,
WLAN_T2LM_ENABLE_INVALID,
};
/**
* struct wlan_t2lm_of_tids - TID-to-Link mapping information for the frames
* transmitted on the uplink, downlink and bidirectional.
*
* @is_homogeneous_mapping: The t2lm_provisioned_links is homogeneous mapping
* @direction: 0 - Downlink, 1 - uplink 2 - Both uplink and downlink
* @default_link_mapping: value 1 indicates the default T2LM, where all the TIDs
* are mapped to all the links.
* value 0 indicates the preferred T2LM mapping
* @t2lm_provisioned_links: Indicates TID to link mapping of all the TIDS.
*/
struct wlan_t2lm_of_tids {
bool is_homogeneous_mapping;
enum wlan_t2lm_direction direction;
bool default_link_mapping;
uint16_t t2lm_provisioned_links[T2LM_MAX_NUM_TIDS];
};
/**
* struct wlan_prev_t2lm_negotiated_info - Previous successful T2LM negotiation
* is saved here.
*
* @dialog_token: Save the dialog token used in T2LM request and response frame.
* @t2lm_info: Provides the TID to LINK mapping information
*/
struct wlan_prev_t2lm_negotiated_info {
uint16_t dialog_token;
struct wlan_t2lm_of_tids t2lm_info[WLAN_T2LM_MAX_DIRECTION];
};
/**
* struct wlan_t2lm_onging_negotiation_info - Current ongoing T2LM negotiation
* (information about transmitted T2LM request/response frame)
*
* @category: T2LM category as T2LM request frame
* @dialog_token: Save the dialog token used in T2LM request and response frame.
* @t2lm_info: Provides the TID-to-link mapping info for UL/DL/BiDi
* @t2lm_tx_status: Status code corresponds to the transmitted T2LM frames
* @t2lm_resp_type: T2LM status corresponds to T2LM response frame.
*/
struct wlan_t2lm_onging_negotiation_info {
enum wlan_t2lm_category category;
uint8_t dialog_token;
struct wlan_t2lm_of_tids t2lm_info[WLAN_T2LM_MAX_DIRECTION];
enum wlan_t2lm_tx_status t2lm_tx_status;
enum wlan_t2lm_resp_frm_type t2lm_resp_type;
};
/**
* struct wlan_mlo_peer_t2lm_policy - TID-to-link mapping information
*
* @self_gen_dialog_token: self generated dialog token used to send T2LM request
* frame;
* @t2lm_enable_val: TID-to-link enable value supported by this peer.
* @t2lm_negotiated_info: Previous successful T2LM negotiation is saved here.
* @ongoing_tid_to_link_mapping: This has the ongoing TID-to-link mapping info
* transmitted by this peer to the connected peer.
*/
struct wlan_mlo_peer_t2lm_policy {
uint8_t self_gen_dialog_token;
enum wlan_t2lm_enable t2lm_enable_val;
struct wlan_prev_t2lm_negotiated_info t2lm_negotiated_info;
struct wlan_t2lm_onging_negotiation_info ongoing_tid_to_link_mapping;
};
#endif /* WLAN_FEATURE_T2LM */
/*
* struct wlan_mlo_peer_context - MLO peer context
*
@@ -402,6 +562,7 @@ struct mlpeer_auth_params {
* @is_nawds_ml_peer: flag to indicate if ml_peer is NAWDS configured
* @nawds_config: eack link peer's NAWDS configuration
* @pending_auth: Holds pending auth request
* @t2lm_policy: TID-to-link mapping information
*/
struct wlan_mlo_peer_context {
qdf_list_node_t peer_node;
@@ -429,6 +590,9 @@ struct wlan_mlo_peer_context {
#ifdef UMAC_MLO_AUTH_DEFER
struct mlpeer_auth_params *pending_auth[MAX_MLO_LINK_PEERS];
#endif
#ifdef WLAN_FEATURE_T2LM
struct wlan_mlo_peer_t2lm_policy t2lm_policy;
#endif
};
/*