qcacmn: Add nstrinfo in ml_partner_info and parse
Add nstrinfo in ml_partner_info and parse sta info. Add nstr_info in ml_peer_ctx and peer_assoc_params and send to FW CRs-Fixed: 3483776 Change-Id: I255fc671b84a2048c6057a61a6de8d81db36c681
Bu işleme şunda yer alıyor:

işlemeyi yapan:
Rahul Choudhary

ebeveyn
134088aadd
işleme
df9658cc1d
@@ -411,9 +411,12 @@ util_get_bvmlie_mldcap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|||||||
* profile is found, or if none of the per-STA profiles includes a MAC address
|
* profile is found, or if none of the per-STA profiles includes a MAC address
|
||||||
* in the STA Info field (assuming no errors are encountered).
|
* in the STA Info field (assuming no errors are encountered).
|
||||||
*
|
*
|
||||||
* Get partner link information in the per-STA profiles present in a Basic
|
* Get partner link information and NSTR capability information in the
|
||||||
* variant Multi-Link element. The partner link information is returned only for
|
* per-STA profiles present in a Basic variant Multi-Link element.
|
||||||
* those per-STA profiles which have a MAC address in the STA Info field.
|
* The partner link information is returned only for those per-STA profiles
|
||||||
|
* which have a MAC address in the STA Info field.
|
||||||
|
* The NSTR capability information is returned only for those per-STA profiles
|
||||||
|
* which are Complete per-STA profiles.
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
||||||
* the reason for error in the case of failure
|
* the reason for error in the case of failure
|
||||||
|
@@ -618,6 +618,20 @@ struct wlan_mlo_mld_cap {
|
|||||||
reserved:3;
|
reserved:3;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mlo_nstr_info - MLO NSTR capability info
|
||||||
|
* @link_id: Lind Id
|
||||||
|
* @nstr_lp_present: Flag for NSTR link pair presence
|
||||||
|
* @nstr_bmp_size: NSTR Bitmap Size
|
||||||
|
* @nstr_lp_bitmap: NSTR link pair bitmap of link_id
|
||||||
|
*/
|
||||||
|
struct mlo_nstr_info {
|
||||||
|
uint8_t link_id;
|
||||||
|
bool nstr_lp_present;
|
||||||
|
uint8_t nstr_bmp_size;
|
||||||
|
uint16_t nstr_lp_bitmap;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wlan_mlo_peer_context - MLO peer context
|
* struct wlan_mlo_peer_context - MLO peer context
|
||||||
*
|
*
|
||||||
@@ -647,6 +661,7 @@ struct wlan_mlo_mld_cap {
|
|||||||
* @is_mesh_ml_peer: flag to indicate if ml_peer is MESH configured
|
* @is_mesh_ml_peer: flag to indicate if ml_peer is MESH configured
|
||||||
* @mesh_config: eack link peer's MESH configuration
|
* @mesh_config: eack link peer's MESH configuration
|
||||||
* @mlpeer_mldcap: MLD Capability information for ML peer
|
* @mlpeer_mldcap: MLD Capability information for ML peer
|
||||||
|
* @mlpeer_nstrinfo: NSTR Capability info
|
||||||
*/
|
*/
|
||||||
struct wlan_mlo_peer_context {
|
struct wlan_mlo_peer_context {
|
||||||
qdf_list_node_t peer_node;
|
qdf_list_node_t peer_node;
|
||||||
@@ -687,6 +702,7 @@ struct wlan_mlo_peer_context {
|
|||||||
struct mlnawds_config mesh_config[MAX_MLO_LINK_PEERS];
|
struct mlnawds_config mesh_config[MAX_MLO_LINK_PEERS];
|
||||||
#endif
|
#endif
|
||||||
struct wlan_mlo_mld_cap mlpeer_mldcap;
|
struct wlan_mlo_mld_cap mlpeer_mldcap;
|
||||||
|
struct mlo_nstr_info mlpeer_nstrinfo[WLAN_UMAC_MLO_MAX_VDEVS];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -718,12 +734,16 @@ struct mlo_link_info {
|
|||||||
* @num_partner_links: no. of partner links
|
* @num_partner_links: no. of partner links
|
||||||
* @partner_link_info: per partner link info
|
* @partner_link_info: per partner link info
|
||||||
* @t2lm_enable_val: enum wlan_t2lm_enable
|
* @t2lm_enable_val: enum wlan_t2lm_enable
|
||||||
|
* @nstr_info: NSTR Capability info
|
||||||
|
* @num_nstr_info_links: No. of links for which NSTR info is present
|
||||||
*/
|
*/
|
||||||
struct mlo_partner_info {
|
struct mlo_partner_info {
|
||||||
uint8_t num_partner_links;
|
uint8_t num_partner_links;
|
||||||
struct mlo_link_info partner_link_info[WLAN_UMAC_MLO_MAX_VDEVS];
|
struct mlo_link_info partner_link_info[WLAN_UMAC_MLO_MAX_VDEVS];
|
||||||
#ifdef WLAN_FEATURE_11BE
|
#ifdef WLAN_FEATURE_11BE
|
||||||
enum wlan_t2lm_enable t2lm_enable_val;
|
enum wlan_t2lm_enable t2lm_enable_val;
|
||||||
|
struct mlo_nstr_info nstr_info[WLAN_UMAC_MLO_MAX_VDEVS];
|
||||||
|
uint8_t num_nstr_info_links;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -370,13 +370,17 @@ util_parse_bvmlie_perstaprofile_stactrl(uint8_t *subelempayload,
|
|||||||
struct qdf_mac_addr *macaddr,
|
struct qdf_mac_addr *macaddr,
|
||||||
bool is_staprof_reqd,
|
bool is_staprof_reqd,
|
||||||
uint8_t **staprof,
|
uint8_t **staprof,
|
||||||
qdf_size_t *staprof_len)
|
qdf_size_t *staprof_len,
|
||||||
|
struct mlo_nstr_info *nstr_info,
|
||||||
|
bool *is_nstrlp_present)
|
||||||
{
|
{
|
||||||
qdf_size_t parsed_payload_len = 0;
|
qdf_size_t parsed_payload_len = 0;
|
||||||
uint16_t stacontrol;
|
uint16_t stacontrol;
|
||||||
uint8_t completeprofile;
|
uint8_t completeprofile;
|
||||||
uint8_t nstrlppresent;
|
uint8_t nstrlppresent;
|
||||||
enum wlan_ml_bv_linfo_perstaprof_stactrl_nstrbmsz nstrbmsz;
|
enum wlan_ml_bv_linfo_perstaprof_stactrl_nstrbmsz nstrbmsz;
|
||||||
|
qdf_size_t nstrlpoffset = 0;
|
||||||
|
uint8_t link_id;
|
||||||
|
|
||||||
/* This helper returns the location(s) and where required, the length(s)
|
/* This helper returns the location(s) and where required, the length(s)
|
||||||
* of (sub)field(s) inferable after parsing the STA Control field in the
|
* of (sub)field(s) inferable after parsing the STA Control field in the
|
||||||
@@ -416,11 +420,11 @@ util_parse_bvmlie_perstaprofile_stactrl(uint8_t *subelempayload,
|
|||||||
stacontrol = le16toh(stacontrol);
|
stacontrol = le16toh(stacontrol);
|
||||||
parsed_payload_len += WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_SIZE;
|
parsed_payload_len += WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_SIZE;
|
||||||
|
|
||||||
if (linkid) {
|
link_id = QDF_GET_BITS(stacontrol,
|
||||||
*linkid = QDF_GET_BITS(stacontrol,
|
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_LINKID_IDX,
|
||||||
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_LINKID_IDX,
|
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_LINKID_BITS);
|
||||||
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_LINKID_BITS);
|
if (linkid)
|
||||||
}
|
*linkid = link_id;
|
||||||
|
|
||||||
/* Check if this a complete profile */
|
/* Check if this a complete profile */
|
||||||
completeprofile = QDF_GET_BITS(stacontrol,
|
completeprofile = QDF_GET_BITS(stacontrol,
|
||||||
@@ -556,6 +560,7 @@ util_parse_bvmlie_perstaprofile_stactrl(uint8_t *subelempayload,
|
|||||||
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRLINKPRP_BITS);
|
WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRLINKPRP_BITS);
|
||||||
|
|
||||||
if (completeprofile && nstrlppresent) {
|
if (completeprofile && nstrlppresent) {
|
||||||
|
nstrlpoffset = parsed_payload_len;
|
||||||
/* Check NTSR Bitmap Size bit */
|
/* Check NTSR Bitmap Size bit */
|
||||||
nstrbmsz =
|
nstrbmsz =
|
||||||
QDF_GET_BITS(stacontrol,
|
QDF_GET_BITS(stacontrol,
|
||||||
@@ -590,6 +595,20 @@ util_parse_bvmlie_perstaprofile_stactrl(uint8_t *subelempayload,
|
|||||||
mlo_err_rl("Invalid NSTR Bitmap size %u", nstrbmsz);
|
mlo_err_rl("Invalid NSTR Bitmap size %u", nstrbmsz);
|
||||||
return QDF_STATUS_E_PROTO;
|
return QDF_STATUS_E_PROTO;
|
||||||
}
|
}
|
||||||
|
if (nstr_info) {
|
||||||
|
nstr_info->nstr_lp_present = nstrlppresent;
|
||||||
|
nstr_info->nstr_bmp_size = nstrbmsz;
|
||||||
|
*is_nstrlp_present = true;
|
||||||
|
nstr_info->link_id = link_id;
|
||||||
|
|
||||||
|
if (nstrbmsz == WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRBMSZ_1_OCTET) {
|
||||||
|
nstr_info->nstr_lp_bitmap =
|
||||||
|
*(uint8_t *)(subelempayload + nstrlpoffset);
|
||||||
|
} else if (nstrbmsz == WLAN_ML_BV_LINFO_PERSTAPROF_STACTRL_NSTRBMSZ_2_OCTETS) {
|
||||||
|
nstr_info->nstr_lp_bitmap =
|
||||||
|
qdf_le16_to_cpu(*(uint16_t *)(subelempayload + nstrlpoffset));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check BSS Parameters Change Count Present bit */
|
/* Check BSS Parameters Change Count Present bit */
|
||||||
@@ -757,6 +776,7 @@ QDF_STATUS util_parse_partner_info_from_linkinfo(uint8_t *linkinfo,
|
|||||||
{
|
{
|
||||||
uint8_t linkid;
|
uint8_t linkid;
|
||||||
struct qdf_mac_addr macaddr;
|
struct qdf_mac_addr macaddr;
|
||||||
|
struct mlo_nstr_info nstr_info = {0};
|
||||||
bool is_macaddr_valid;
|
bool is_macaddr_valid;
|
||||||
uint8_t *linkinfo_currpos;
|
uint8_t *linkinfo_currpos;
|
||||||
qdf_size_t linkinfo_remlen;
|
qdf_size_t linkinfo_remlen;
|
||||||
@@ -766,6 +786,7 @@ QDF_STATUS util_parse_partner_info_from_linkinfo(uint8_t *linkinfo,
|
|||||||
qdf_size_t subelemseqpayloadlen;
|
qdf_size_t subelemseqpayloadlen;
|
||||||
qdf_size_t defragpayload_len;
|
qdf_size_t defragpayload_len;
|
||||||
QDF_STATUS ret;
|
QDF_STATUS ret;
|
||||||
|
bool is_nstrlp_present = false;
|
||||||
|
|
||||||
/* This helper function parses partner info from the per-STA profiles
|
/* This helper function parses partner info from the per-STA profiles
|
||||||
* present (if any) in the Link Info field in the payload of a Multi
|
* present (if any) in the Link Info field in the payload of a Multi
|
||||||
@@ -883,11 +904,26 @@ QDF_STATUS util_parse_partner_info_from_linkinfo(uint8_t *linkinfo,
|
|||||||
&macaddr,
|
&macaddr,
|
||||||
false,
|
false,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL,
|
||||||
|
&nstr_info,
|
||||||
|
&is_nstrlp_present);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_nstrlp_present) {
|
||||||
|
if (partner_info->num_nstr_info_links >=
|
||||||
|
QDF_ARRAY_SIZE(partner_info->nstr_info)) {
|
||||||
|
mlo_err_rl("Insufficient size %zu of array for nstr link info",
|
||||||
|
QDF_ARRAY_SIZE(partner_info->nstr_info));
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
}
|
||||||
|
qdf_mem_copy(&partner_info->nstr_info[partner_info->num_nstr_info_links],
|
||||||
|
&nstr_info, sizeof(nstr_info));
|
||||||
|
partner_info->num_nstr_info_links++;
|
||||||
|
is_nstrlp_present = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (is_macaddr_valid) {
|
if (is_macaddr_valid) {
|
||||||
if (partner_info->num_partner_links >=
|
if (partner_info->num_partner_links >=
|
||||||
QDF_ARRAY_SIZE(partner_info->partner_link_info)) {
|
QDF_ARRAY_SIZE(partner_info->partner_link_info)) {
|
||||||
@@ -1754,6 +1790,8 @@ util_find_bvmlie_persta_prof_for_linkid(uint8_t req_link_id,
|
|||||||
&macaddr,
|
&macaddr,
|
||||||
false,
|
false,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
if (QDF_IS_STATUS_ERROR(ret))
|
if (QDF_IS_STATUS_ERROR(ret))
|
||||||
return ret;
|
return ret;
|
||||||
@@ -2179,7 +2217,9 @@ QDF_STATUS util_gen_link_reqrsp_cmn(uint8_t *frame, qdf_size_t frame_len,
|
|||||||
&reportedmacaddr,
|
&reportedmacaddr,
|
||||||
true,
|
true,
|
||||||
&sta_prof_currpos,
|
&sta_prof_currpos,
|
||||||
&sta_prof_remlen);
|
&sta_prof_remlen,
|
||||||
|
NULL,
|
||||||
|
NULL);
|
||||||
if (QDF_IS_STATUS_ERROR(ret)) {
|
if (QDF_IS_STATUS_ERROR(ret)) {
|
||||||
qdf_mem_free(mlieseqpayload_copy);
|
qdf_mem_free(mlieseqpayload_copy);
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -1217,6 +1217,9 @@ struct wmi_host_link_state_params {
|
|||||||
* @emlsr_support: indicate if eMLSR supported
|
* @emlsr_support: indicate if eMLSR supported
|
||||||
* @emlmr_support: indicate if eMLMR supported
|
* @emlmr_support: indicate if eMLMR supported
|
||||||
* @msd_cap_support: indicate if MSD supported
|
* @msd_cap_support: indicate if MSD supported
|
||||||
|
* @nstr_bitmap_present: indicate if NSTR bitmap is present
|
||||||
|
* @nstr_bitmap_size: Indicates size of NSTR bitmap,
|
||||||
|
* as per the 802.11be specification
|
||||||
* @unused: spare bits
|
* @unused: spare bits
|
||||||
* @mld_mac: MLD mac address
|
* @mld_mac: MLD mac address
|
||||||
* @logical_link_index: Unique index for links of the mlo. Starts with Zero
|
* @logical_link_index: Unique index for links of the mlo. Starts with Zero
|
||||||
@@ -1231,6 +1234,7 @@ struct wmi_host_link_state_params {
|
|||||||
* @medium_sync_max_txop_num: Max number of TXOPs
|
* @medium_sync_max_txop_num: Max number of TXOPs
|
||||||
* @max_num_simultaneous_links: Max number of simultaneous links as per
|
* @max_num_simultaneous_links: Max number of simultaneous links as per
|
||||||
* MLD Capability for ML peer
|
* MLD Capability for ML peer
|
||||||
|
* @nstr_indication_bitmap: NSTR indication bitmap
|
||||||
*/
|
*/
|
||||||
struct peer_assoc_mlo_params {
|
struct peer_assoc_mlo_params {
|
||||||
uint32_t mlo_enabled:1,
|
uint32_t mlo_enabled:1,
|
||||||
@@ -1242,7 +1246,9 @@ struct peer_assoc_mlo_params {
|
|||||||
emlsr_support:1,
|
emlsr_support:1,
|
||||||
emlmr_support:1,
|
emlmr_support:1,
|
||||||
msd_cap_support:1,
|
msd_cap_support:1,
|
||||||
unused:23;
|
nstr_bitmap_present:1,
|
||||||
|
nstr_bitmap_size:1,
|
||||||
|
unused:21;
|
||||||
uint8_t mld_mac[QDF_MAC_ADDR_SIZE];
|
uint8_t mld_mac[QDF_MAC_ADDR_SIZE];
|
||||||
uint32_t logical_link_index;
|
uint32_t logical_link_index;
|
||||||
uint32_t ml_peer_id;
|
uint32_t ml_peer_id;
|
||||||
@@ -1255,6 +1261,7 @@ struct peer_assoc_mlo_params {
|
|||||||
uint16_t medium_sync_ofdm_ed_thresh;
|
uint16_t medium_sync_ofdm_ed_thresh;
|
||||||
uint16_t medium_sync_max_txop_num;
|
uint16_t medium_sync_max_txop_num;
|
||||||
uint16_t max_num_simultaneous_links;
|
uint16_t max_num_simultaneous_links;
|
||||||
|
uint32_t nstr_indication_bitmap;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -298,6 +298,12 @@ uint8_t *peer_assoc_add_mlo_params(uint8_t *buf_ptr,
|
|||||||
|
|
||||||
mlo_params->max_num_simultaneous_links =
|
mlo_params->max_num_simultaneous_links =
|
||||||
req->mlo_params.max_num_simultaneous_links;
|
req->mlo_params.max_num_simultaneous_links;
|
||||||
|
mlo_params->mlo_flags.nstr_bitmap_present =
|
||||||
|
req->mlo_params.nstr_bitmap_present;
|
||||||
|
mlo_params->mlo_flags.nstr_bitmap_size =
|
||||||
|
req->mlo_params.nstr_bitmap_size;
|
||||||
|
mlo_params->nstr_indication_bitmap =
|
||||||
|
req->mlo_params.nstr_indication_bitmap;
|
||||||
|
|
||||||
return buf_ptr + sizeof(wmi_peer_assoc_mlo_params);
|
return buf_ptr + sizeof(wmi_peer_assoc_mlo_params);
|
||||||
}
|
}
|
||||||
|
Yeni konuda referans
Bir kullanıcı engelle