qcacmn: Add vdev wmi cmd and event support t2lm ie info
Add support for vdev level WMI Command and event to send and receive t2lm ie info CRs-Fixed: 3339695 Change-Id: I8b896a961cba8f1d8e11111f900a98da090b9513
This commit is contained in:

committed by
Madan Koyyalamudi

parent
b673b97a2d
commit
6a2a1f1a5e
@@ -75,6 +75,49 @@ wmi_extract_mgmt_rx_ml_cu_params(wmi_unified_t wmi_handle, void *evt_buf,
|
||||
QDF_STATUS wmi_send_mlo_peer_tid_to_link_map_cmd(
|
||||
wmi_unified_t wmi,
|
||||
struct wmi_host_tid_to_link_map_params *params);
|
||||
|
||||
/**
|
||||
* wmi_send_mlo_vdev_tid_to_link_map_cmd() - send TID-to-link mapping command
|
||||
* per vdev
|
||||
* @wmi: WMI handle for this pdev
|
||||
* @params: Pointer to TID-to-link mapping params
|
||||
*/
|
||||
QDF_STATUS wmi_send_mlo_vdev_tid_to_link_map_cmd(
|
||||
wmi_unified_t wmi,
|
||||
struct wmi_host_tid_to_link_map_ap_params *params);
|
||||
|
||||
/**
|
||||
* wmi_extract_mlo_vdev_tid_to_link_map_event() - extract mlo t2lm info for vdev
|
||||
* @wmi: wmi handle
|
||||
* @evt_buf: pointer to event buffer
|
||||
* @evt: Pointer to host structure to get the t2lm info
|
||||
*
|
||||
* This function gets called to extract mlo t2lm info for particular pdev
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS
|
||||
wmi_extract_mlo_vdev_tid_to_link_map_event(
|
||||
wmi_unified_t wmi,
|
||||
void *evt_buf,
|
||||
struct wmi_host_tid_to_link_map_resp *params);
|
||||
|
||||
/**
|
||||
* wmi_extract_mlo_vdev_bcast_tid_to_link_map_event() - extract bcast mlo t2lm
|
||||
* info for vdev
|
||||
* @wmi: wmi handle
|
||||
* @evt_buf: pointer to event buffer
|
||||
* @bcast: Pointer to host structure to get the t2lm bcast info
|
||||
*
|
||||
* This function gets called to extract bcast mlo t2lm info for particular pdev
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS
|
||||
wmi_extract_mlo_vdev_bcast_tid_to_link_map_event(
|
||||
wmi_unified_t wmi,
|
||||
void *evt_buf,
|
||||
struct wmi_host_bcast_t2lm_info *bcast);
|
||||
#endif /* WLAN_FEATURE_11BE */
|
||||
|
||||
#endif /*_WMI_UNIFIED_11BE_API_H_*/
|
||||
|
@@ -1090,6 +1090,21 @@ typedef struct {
|
||||
} wmi_host_mac_addr;
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
/**
|
||||
* enum wlan_t2lm_status - Target status codes in event of t2lm
|
||||
* @WLAN_MAP_SWITCH_TIMER_TSF: Mapping switch time value in TSF to be included
|
||||
* in probe response frames
|
||||
* @WLAN_MAP_SWITCH_TIMER_EXPIRED: Indication that the new proposed T2LM has
|
||||
* been applied, Update the required data structures and other modules.
|
||||
* @WLAN_EXPECTED_DUR_EXPIRED: Indication that the proposed T2LM ineffective
|
||||
* after this duration and all TIDs fall back to default mode.
|
||||
*/
|
||||
enum wlan_t2lm_status {
|
||||
WLAN_MAP_SWITCH_TIMER_TSF,
|
||||
WLAN_MAP_SWITCH_TIMER_EXPIRED,
|
||||
WLAN_EXPECTED_DUR_EXPIRED,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_host_t2lm_of_tids - TID-to-link mapping info
|
||||
* @direction: 0 - Downlink, 1 - uplink 2 - Both uplink and downlink
|
||||
@@ -1117,6 +1132,46 @@ struct wmi_host_tid_to_link_map_params {
|
||||
uint8_t num_dir;
|
||||
struct wlan_host_t2lm_of_tids t2lm_info[WLAN_T2LM_MAX_DIRECTION];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_host_tid_to_link_map_ap_params - TID-to-link mapping params
|
||||
* @pdev_id: Pdev id
|
||||
* @vdev_id: Vdev id
|
||||
* @num_t2lm_info: Number of t2lm IEs
|
||||
* @hw_link_id: HW link id
|
||||
* @disabled_link_bitmap: Disabled link bitmap info
|
||||
* @t2lm_info: TID-to-link mapping IE info
|
||||
*/
|
||||
struct wmi_host_tid_to_link_map_ap_params {
|
||||
uint8_t pdev_id;
|
||||
uint8_t vdev_id;
|
||||
uint8_t num_t2lm_info;
|
||||
uint16_t hw_link_id;
|
||||
uint16_t disabled_link_bitmap;
|
||||
struct wlan_t2lm_info info[WLAN_MAX_T2LM_IE];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_host_tid_to_link_map_resp - TID-to-link mapping response
|
||||
* @vdev_id: Vdev id
|
||||
* @wlan_t2lm_status: Target status for t2lm ie info
|
||||
* @mapping_switch_tsf: Mapping switch time in tsf for probe response frames
|
||||
*/
|
||||
struct wmi_host_tid_to_link_map_resp {
|
||||
uint8_t vdev_id;
|
||||
enum wlan_t2lm_status status;
|
||||
uint8_t mapping_switch_tsf;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_host_bcast_t2lm_info - TID-to-link mapping broadcast info
|
||||
* @vdev_id: Vdev id
|
||||
* @expected_duration: Expected duration for vdev t2lm ie
|
||||
*/
|
||||
struct wmi_host_bcast_t2lm_info {
|
||||
uint8_t vdev_id;
|
||||
uint32_t expected_duration;
|
||||
};
|
||||
#endif /* WLAN_FEATURE_11BE */
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
|
@@ -3094,6 +3094,20 @@ QDF_STATUS
|
||||
QDF_STATUS (*send_mlo_peer_tid_to_link_map)(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wmi_host_tid_to_link_map_params *params);
|
||||
|
||||
QDF_STATUS (*send_mlo_vdev_tid_to_link_map)(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wmi_host_tid_to_link_map_ap_params *params);
|
||||
|
||||
QDF_STATUS (*extract_mlo_vdev_tid_to_link_map_event)(
|
||||
struct wmi_unified *wmi_handle,
|
||||
uint8_t *buf,
|
||||
struct wmi_host_tid_to_link_map_resp *params);
|
||||
|
||||
QDF_STATUS (*extract_mlo_vdev_bcast_tid_to_link_map_event)(
|
||||
struct wmi_unified *wmi_handle,
|
||||
void *buf,
|
||||
struct wmi_host_bcast_t2lm_info *bcast_info);
|
||||
#endif /* WLAN_FEATURE_11BE */
|
||||
|
||||
QDF_STATUS
|
||||
|
@@ -69,6 +69,45 @@ QDF_STATUS wmi_send_mlo_peer_tid_to_link_map_cmd(
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS wmi_send_mlo_vdev_tid_to_link_map_cmd(
|
||||
wmi_unified_t wmi,
|
||||
struct wmi_host_tid_to_link_map_ap_params *params)
|
||||
{
|
||||
if (wmi->ops->send_mlo_vdev_tid_to_link_map)
|
||||
return wmi->ops->send_mlo_vdev_tid_to_link_map(wmi, params);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_extract_mlo_vdev_tid_to_link_map_event(
|
||||
wmi_unified_t wmi,
|
||||
void *evt_buf,
|
||||
struct wmi_host_tid_to_link_map_resp *resp)
|
||||
{
|
||||
if (wmi->ops->extract_mlo_vdev_tid_to_link_map_event) {
|
||||
return wmi->ops->extract_mlo_vdev_tid_to_link_map_event(wmi,
|
||||
evt_buf,
|
||||
resp);
|
||||
}
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_extract_mlo_vdev_bcast_tid_to_link_map_event(
|
||||
wmi_unified_t wmi,
|
||||
void *evt_buf,
|
||||
struct wmi_host_bcast_t2lm_info *bcast)
|
||||
{
|
||||
if (wmi->ops->extract_mlo_vdev_bcast_tid_to_link_map_event) {
|
||||
return wmi->ops->extract_mlo_vdev_bcast_tid_to_link_map_event(
|
||||
wmi,
|
||||
evt_buf,
|
||||
bcast);
|
||||
}
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_11BE */
|
||||
|
||||
QDF_STATUS
|
||||
|
@@ -765,6 +765,240 @@ static QDF_STATUS send_mlo_peer_tid_to_link_map_cmd_tlv(
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void update_t2lm_ie_info_params(
|
||||
wmi_mlo_ap_vdev_tid_to_link_map_ie_info * info,
|
||||
struct wlan_t2lm_info *params)
|
||||
{
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_CTRL_DIR_SET(
|
||||
info->tid_to_link_map_ctrl,
|
||||
params->direction);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_CTRL_DEF_LINK_SET(
|
||||
info->tid_to_link_map_ctrl,
|
||||
params->default_link_mapping);
|
||||
|
||||
info->map_switch_time = params->mapping_switch_time;
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_CTRL_SWT_TIME_SET(
|
||||
info->tid_to_link_map_ctrl,
|
||||
params->mapping_switch_time_present);
|
||||
|
||||
info->expected_duration = params->expected_duration;
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_CTRL_DUR_TIME_SET(
|
||||
info->tid_to_link_map_ctrl,
|
||||
params->expected_duration_present);
|
||||
|
||||
wmi_debug("tid_to_link_map_ctrl:%x map_switch_time:%d expected_duration:%d",
|
||||
info->tid_to_link_map_ctrl, info->map_switch_time,
|
||||
info->expected_duration);
|
||||
|
||||
/* Do not fill link mapping values when default mapping is set to 1 */
|
||||
if (params->default_link_mapping)
|
||||
return;
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_CTRL_LINK_MAP_PRE_SET(
|
||||
info->tid_to_link_map_ctrl, 0xff);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_0_SET(
|
||||
info->ieee_tid_0_1_link_map,
|
||||
params->ieee_link_map_tid[0]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_1_SET(
|
||||
info->ieee_tid_0_1_link_map,
|
||||
params->ieee_link_map_tid[1]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_2_SET(
|
||||
info->ieee_tid_2_3_link_map,
|
||||
params->ieee_link_map_tid[2]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_3_SET(
|
||||
info->ieee_tid_2_3_link_map,
|
||||
params->ieee_link_map_tid[3]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_4_SET(
|
||||
info->ieee_tid_4_5_link_map,
|
||||
params->ieee_link_map_tid[4]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_5_SET(
|
||||
info->ieee_tid_4_5_link_map,
|
||||
params->ieee_link_map_tid[5]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_6_SET(
|
||||
info->ieee_tid_6_7_link_map,
|
||||
params->ieee_link_map_tid[6]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_IEEE_LINK_ID_7_SET(
|
||||
info->ieee_tid_6_7_link_map,
|
||||
params->ieee_link_map_tid[7]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_0_SET(
|
||||
info->hw_tid_0_1_link_map,
|
||||
params->hw_link_map_tid[0]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_1_SET(
|
||||
info->hw_tid_0_1_link_map,
|
||||
params->hw_link_map_tid[1]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_2_SET(
|
||||
info->hw_tid_2_3_link_map,
|
||||
params->hw_link_map_tid[2]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_3_SET(
|
||||
info->hw_tid_2_3_link_map,
|
||||
params->hw_link_map_tid[3]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_4_SET(
|
||||
info->hw_tid_4_5_link_map,
|
||||
params->hw_link_map_tid[4]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_5_SET(
|
||||
info->hw_tid_4_5_link_map,
|
||||
params->hw_link_map_tid[5]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_6_SET(
|
||||
info->hw_tid_6_7_link_map,
|
||||
params->hw_link_map_tid[6]);
|
||||
|
||||
WMI_MLO_VDEV_TID_TO_LINK_MAP_HW_LINK_ID_7_SET(
|
||||
info->hw_tid_6_7_link_map,
|
||||
params->hw_link_map_tid[7]);
|
||||
|
||||
wmi_debug("tid_to_link_map_ctrl:%x", info->tid_to_link_map_ctrl);
|
||||
wmi_debug("ieee_link_map: tid_0_1:%x tid_2_3:%x tid_4_5:%x tid_6_7:%x",
|
||||
info->ieee_tid_0_1_link_map, info->ieee_tid_2_3_link_map,
|
||||
info->ieee_tid_4_5_link_map, info->ieee_tid_6_7_link_map);
|
||||
wmi_debug("hw_link_map: tid_0_1:%x tid_2_3:%x tid_4_5:%x tid_6_7:%x",
|
||||
info->hw_tid_0_1_link_map, info->hw_tid_2_3_link_map,
|
||||
info->hw_tid_4_5_link_map, info->hw_tid_6_7_link_map);
|
||||
}
|
||||
|
||||
static QDF_STATUS send_mlo_vdev_tid_to_link_map_cmd_tlv(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wmi_host_tid_to_link_map_ap_params *params)
|
||||
{
|
||||
wmi_mlo_ap_vdev_tid_to_link_map_cmd_fixed_param *cmd;
|
||||
wmi_mlo_ap_vdev_tid_to_link_map_ie_info *info;
|
||||
wmi_buf_t buf;
|
||||
uint8_t *buf_ptr;
|
||||
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
||||
uint32_t buf_len = 0;
|
||||
uint32_t num_info = 0;
|
||||
|
||||
buf_len = sizeof(wmi_mlo_ap_vdev_tid_to_link_map_cmd_fixed_param) +
|
||||
WMI_TLV_HDR_SIZE + (params->num_t2lm_info *
|
||||
sizeof(wmi_mlo_ap_vdev_tid_to_link_map_ie_info));
|
||||
|
||||
buf = wmi_buf_alloc(wmi_handle, buf_len);
|
||||
if (!buf) {
|
||||
wmi_err("wmi buf alloc failed for vdev id %d while t2lm map cmd send: ",
|
||||
params->vdev_id);
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
}
|
||||
|
||||
buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
||||
cmd = (wmi_mlo_ap_vdev_tid_to_link_map_cmd_fixed_param *)buf_ptr;
|
||||
|
||||
WMITLV_SET_HDR(
|
||||
&cmd->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_mlo_ap_vdev_tid_to_link_map_cmd_fixed_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN(
|
||||
wmi_mlo_ap_vdev_tid_to_link_map_cmd_fixed_param));
|
||||
|
||||
cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target(
|
||||
wmi_handle, params->pdev_id);
|
||||
cmd->vdev_id = params->vdev_id;
|
||||
cmd->disabled_link_bitmap = params->disabled_link_bitmap;
|
||||
wmi_debug("pdev_id:%d vdev_id:%d disabled_link_bitmap:%x num_t2lm_info:%d",
|
||||
cmd->pdev_id, cmd->vdev_id, cmd->disabled_link_bitmap,
|
||||
params->num_t2lm_info);
|
||||
|
||||
buf_ptr += sizeof(wmi_mlo_ap_vdev_tid_to_link_map_cmd_fixed_param);
|
||||
|
||||
WMITLV_SET_HDR(buf_ptr, WMITLV_TAG_ARRAY_STRUC,
|
||||
(params->num_t2lm_info *
|
||||
sizeof(wmi_mlo_ap_vdev_tid_to_link_map_ie_info)));
|
||||
buf_ptr += sizeof(uint32_t);
|
||||
|
||||
for (num_info = 0; num_info < params->num_t2lm_info; num_info++) {
|
||||
info = (wmi_mlo_ap_vdev_tid_to_link_map_ie_info *)buf_ptr;
|
||||
|
||||
WMITLV_SET_HDR(
|
||||
&info->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_mlo_ap_vdev_tid_to_link_map_ie_info,
|
||||
WMITLV_GET_STRUCT_TLVLEN(
|
||||
wmi_mlo_ap_vdev_tid_to_link_map_ie_info));
|
||||
update_t2lm_ie_info_params(info, ¶ms->info[num_info]);
|
||||
buf_ptr += sizeof(wmi_mlo_ap_vdev_tid_to_link_map_ie_info);
|
||||
}
|
||||
|
||||
wmi_mtrace(WMI_MLO_AP_VDEV_TID_TO_LINK_MAP_CMDID, cmd->vdev_id, 0);
|
||||
ret = wmi_unified_cmd_send(wmi_handle, buf, buf_len,
|
||||
WMI_MLO_AP_VDEV_TID_TO_LINK_MAP_CMDID);
|
||||
if (ret) {
|
||||
wmi_err("Failed to send T2LM command to FW: %d vdev id %d",
|
||||
ret, cmd->vdev_id);
|
||||
wmi_buf_free(buf);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
extract_mlo_vdev_tid_to_link_map_event_tlv(
|
||||
struct wmi_unified *wmi_handle,
|
||||
uint8_t *buf,
|
||||
struct wmi_host_tid_to_link_map_resp *params)
|
||||
{
|
||||
WMI_MLO_AP_VDEV_TID_TO_LINK_MAP_EVENTID_param_tlvs *param_buf;
|
||||
wmi_mlo_ap_vdev_tid_to_link_map_evt_fixed_param *ev;
|
||||
|
||||
param_buf = (WMI_MLO_AP_VDEV_TID_TO_LINK_MAP_EVENTID_param_tlvs *)buf;
|
||||
if (!param_buf) {
|
||||
wmi_err_rl("Param_buf is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
ev = (wmi_mlo_ap_vdev_tid_to_link_map_evt_fixed_param *)
|
||||
param_buf->fixed_param;
|
||||
|
||||
params->vdev_id = ev->vdev_id;
|
||||
params->status = ev->status_type;
|
||||
params->mapping_switch_tsf = ev->mapping_switch_tsf;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
extract_mlo_vdev_bcast_tid_to_link_map_event_tlv(
|
||||
struct wmi_unified *wmi_handle,
|
||||
void *buf,
|
||||
struct wmi_host_bcast_t2lm_info *bcast_info)
|
||||
{
|
||||
WMI_MGMT_RX_EVENTID_param_tlvs *param_tlvs;
|
||||
wmi_mlo_bcast_t2lm_info *info;
|
||||
|
||||
param_tlvs = (WMI_MGMT_RX_EVENTID_param_tlvs *)buf;
|
||||
if (!param_tlvs) {
|
||||
wmi_err(" MGMT RX param_tlvs is NULL");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
info = param_tlvs->mlo_bcast_t2lm_info;
|
||||
if (!info) {
|
||||
wmi_debug("mgmt_ml_info TLV is not sent by FW");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
bcast_info->vdev_id =
|
||||
WMI_MLO_BROADCAST_TID_TO_LINK_MAP_INFO_VDEV_ID_GET(
|
||||
info->vdev_id_expec_dur);
|
||||
|
||||
bcast_info->expected_duration =
|
||||
WMI_MLO_BROADCAST_TID_TO_LINK_MAP_INFO_VDEV_ID_GET(
|
||||
info->vdev_id_expec_dur);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#else
|
||||
size_t peer_assoc_t2lm_params_size(struct peer_assoc_params *req)
|
||||
{
|
||||
@@ -1060,6 +1294,12 @@ void wmi_11be_attach_tlv(wmi_unified_t wmi_handle)
|
||||
#ifdef WLAN_FEATURE_11BE
|
||||
ops->send_mlo_peer_tid_to_link_map =
|
||||
send_mlo_peer_tid_to_link_map_cmd_tlv;
|
||||
ops->send_mlo_vdev_tid_to_link_map =
|
||||
send_mlo_vdev_tid_to_link_map_cmd_tlv;
|
||||
ops->extract_mlo_vdev_tid_to_link_map_event =
|
||||
extract_mlo_vdev_tid_to_link_map_event_tlv;
|
||||
ops->extract_mlo_vdev_bcast_tid_to_link_map_event =
|
||||
extract_mlo_vdev_bcast_tid_to_link_map_event_tlv;
|
||||
#endif /* WLAN_FEATURE_11BE */
|
||||
ops->extract_mgmt_rx_ml_cu_params =
|
||||
extract_mgmt_rx_ml_cu_params_tlv;
|
||||
|
Reference in New Issue
Block a user