diff --git a/wmi_unified_api.c b/wmi_unified_api.c index bf405cf439..b9144df4fa 100644 --- a/wmi_unified_api.c +++ b/wmi_unified_api.c @@ -5060,23 +5060,84 @@ QDF_STATUS wmi_extract_vdev_start_resp(void *wmi_hdl, void *evt_buf, return QDF_STATUS_E_FAILURE; } +/** + * wmi_extract_tbttoffset_num_vdevs() - extract tbtt offset num vdev + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param vdev_map: Pointer to hold num vdev + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_extract_tbttoffset_num_vdevs(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs) +{ + wmi_unified_t wmi = (wmi_unified_t) wmi_hdl; + + if (wmi->ops->extract_tbttoffset_num_vdevs) + return wmi->ops->extract_tbttoffset_num_vdevs(wmi, + evt_buf, num_vdevs); + + return QDF_STATUS_E_FAILURE; +} + +/** + * wmi_extract_ext_tbttoffset_num_vdevs() - extract ext tbtt offset num vdev + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param vdev_map: Pointer to hold num vdev + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_extract_ext_tbttoffset_num_vdevs(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs) +{ + wmi_unified_t wmi = (wmi_unified_t) wmi_hdl; + + if (wmi->ops->extract_ext_tbttoffset_num_vdevs) + return wmi->ops->extract_ext_tbttoffset_num_vdevs(wmi, + evt_buf, num_vdevs); + + return QDF_STATUS_E_FAILURE; +} + /** * wmi_extract_tbttoffset_update_params() - extract tbtt offset update param * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer - * @param vdev_map: Pointer to hold vdev map - * @param tbttoffset_list: Pointer to tbtt offset list + * @param idx: Index refering to a vdev + * @param tbtt_param: Pointer to tbttoffset event param * * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure */ QDF_STATUS wmi_extract_tbttoffset_update_params(void *wmi_hdl, void *evt_buf, - uint32_t *vdev_map, uint32_t **tbttoffset_list) + uint8_t idx, struct tbttoffset_params *tbtt_param) { wmi_unified_t wmi = (wmi_unified_t) wmi_hdl; if (wmi->ops->extract_tbttoffset_update_params) return wmi->ops->extract_tbttoffset_update_params(wmi, - evt_buf, vdev_map, tbttoffset_list); + evt_buf, idx, tbtt_param); + + return QDF_STATUS_E_FAILURE; +} + +/** + * wmi_extract_ext_tbttoffset_update_params() - extract tbtt offset update param + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param idx: Index refering to a vdev + * @param tbtt_param: Pointer to tbttoffset event param + * + * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure + */ +QDF_STATUS wmi_extract_ext_tbttoffset_update_params(void *wmi_hdl, + void *evt_buf, uint8_t idx, struct tbttoffset_params *tbtt_param) +{ + wmi_unified_t wmi = (wmi_unified_t) wmi_hdl; + + if (wmi->ops->extract_ext_tbttoffset_update_params) + return wmi->ops->extract_ext_tbttoffset_update_params(wmi, + evt_buf, idx, tbtt_param); return QDF_STATUS_E_FAILURE; } @@ -5478,21 +5539,21 @@ QDF_STATUS wmi_extract_pdev_csa_switch_count_status(void *wmi_hdl, /** - * wmi_extract_swba_vdev_map() - extract swba vdev map from event + * wmi_extract_swba_num_vdevs() - extract swba num vdevs from event * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer - * @param vdev_map: Pointer to hold vdev map + * @param num_vdevs: Pointer to hold num vdevs * * Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure */ -QDF_STATUS wmi_extract_swba_vdev_map(void *wmi_hdl, void *evt_buf, - uint32_t *vdev_map) +QDF_STATUS wmi_extract_swba_num_vdevs(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs) { wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; - if (wmi_handle->ops->extract_swba_vdev_map) - return wmi_handle->ops->extract_swba_vdev_map(wmi_handle, - evt_buf, vdev_map); + if (wmi_handle->ops->extract_swba_num_vdevs) + return wmi_handle->ops->extract_swba_num_vdevs(wmi_handle, + evt_buf, num_vdevs); return QDF_STATUS_E_FAILURE; } diff --git a/wmi_unified_non_tlv.c b/wmi_unified_non_tlv.c index b7032c1f5b..7060a7ef6b 100644 --- a/wmi_unified_non_tlv.c +++ b/wmi_unified_non_tlv.c @@ -5886,24 +5886,52 @@ static QDF_STATUS extract_vdev_start_resp_non_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_SUCCESS; } +/** + * extract_tbttoffset_num_vdevs_non_tlv() - extract tbtt offset num vdevs + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param num_vdev: Pointer to hold num vdev + * + * Return: 0 for success or error code + */ +static QDF_STATUS extract_tbttoffset_num_vdevs_non_tlv(void *wmi_hdl, + void *evt_buf, + uint32_t *num_vdevs) +{ + wmi_tbtt_offset_event *tbtt_offset_event = + (wmi_tbtt_offset_event *)evt_buf; + uint32_t vdev_map; + + vdev_map = tbtt_offset_event->vdev_map; + *num_vdevs = wmi_vdev_map_to_num_vdevs(vdev_map); + + return QDF_STATUS_SUCCESS; +} + /** * extract_tbttoffset_update_params_non_tlv() - extract tbtt offset update param * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer - * @param vdev_map: Pointer to hold vdev map - * @param tbttoffset_list: Pointer to tbtt offset list + * @param idx: Index refering to a vdev + * @param tbtt_param: Pointer to tbttoffset event param * * Return: 0 for success or error code */ static QDF_STATUS extract_tbttoffset_update_params_non_tlv(void *wmi_hdl, - void *evt_buf, - uint32_t *vdev_map, uint32_t **tbttoffset_list) + void *evt_buf, uint8_t idx, + struct tbttoffset_params *tbtt_param) { wmi_tbtt_offset_event *tbtt_offset_event = (wmi_tbtt_offset_event *)evt_buf; + uint32_t vdev_map; - *vdev_map = tbtt_offset_event->vdev_map; - *tbttoffset_list = tbtt_offset_event->tbttoffset_list; + vdev_map = tbtt_offset_event->vdev_map; + + tbtt_param->vdev_id = wmi_vdev_map_to_vdev_id(vdev_map, idx); + if (tbtt_param->vdev_id == WLAN_INVALID_VDEV_ID) + return QDF_STATUS_E_INVAL; + tbtt_param->tbttoffset = + tbtt_offset_event->tbttoffset_list[tbtt_param->vdev_id]; return QDF_STATUS_SUCCESS; } @@ -6331,20 +6359,22 @@ static QDF_STATUS extract_pdev_reserve_ast_ev_param_non_tlv( } /** - * extract_swba_vdev_map_non_tlv() - extract swba vdev map from event + * extract_swba_num_vdevs_non_tlv() - extract swba num vdevs from event * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer - * @param vdev_map: Pointer to hold vdev map + * @param num_vdevs: Pointer to hold num vdevs * * Return: 0 for success or error code */ -static QDF_STATUS extract_swba_vdev_map_non_tlv(wmi_unified_t wmi_handle, +static QDF_STATUS extract_swba_num_vdevs_non_tlv(wmi_unified_t wmi_handle, void *evt_buf, - uint32_t *vdev_map) + uint32_t *num_vdevs) { wmi_host_swba_event *swba_event = (wmi_host_swba_event *)evt_buf; + uint32_t vdev_map; - *vdev_map = swba_event->vdev_map; + vdev_map = swba_event->vdev_map; + *num_vdevs = wmi_vdev_map_to_num_vdevs(vdev_map); return QDF_STATUS_SUCCESS; } @@ -6364,9 +6394,14 @@ static QDF_STATUS extract_swba_tim_info_non_tlv(wmi_unified_t wmi_handle, { wmi_host_swba_event *swba_event = (wmi_host_swba_event *)evt_buf; wmi_bcn_info *bcn_info; + uint32_t vdev_map; bcn_info = &swba_event->bcn_info[idx]; + vdev_map = swba_event->vdev_map; + tim_info->vdev_id = wmi_vdev_map_to_vdev_id(vdev_map, idx); + if (tim_info->vdev_id == WLAN_INVALID_VDEV_ID) + return QDF_STATUS_E_INVAL; tim_info->tim_len = bcn_info->tim_info.tim_len; tim_info->tim_mcast = bcn_info->tim_info.tim_mcast; qdf_mem_copy(tim_info->tim_bitmap, bcn_info->tim_info.tim_bitmap, @@ -6393,11 +6428,15 @@ static QDF_STATUS extract_swba_noa_info_non_tlv(wmi_unified_t wmi_handle, wmi_p2p_noa_info *p2p_noa_info; wmi_bcn_info *bcn_info; uint8_t i = 0; + uint32_t vdev_map; bcn_info = &swba_event->bcn_info[idx]; - + vdev_map = swba_event->vdev_map; p2p_noa_info = &bcn_info->p2p_noa_info; + p2p_desc->vdev_id = wmi_vdev_map_to_vdev_id(vdev_map, idx); + if (p2p_desc->vdev_id == WLAN_INVALID_VDEV_ID) + return QDF_STATUS_E_INVAL; p2p_desc->modified = false; p2p_desc->num_descriptors = 0; if (WMI_UNIFIED_NOA_ATTR_IS_MODIFIED(p2p_noa_info)) { @@ -8077,6 +8116,8 @@ struct wmi_ops non_tlv_ops = { .extract_vdev_start_resp = extract_vdev_start_resp_non_tlv, .extract_tbttoffset_update_params = extract_tbttoffset_update_params_non_tlv, + .extract_tbttoffset_num_vdevs = + extract_tbttoffset_num_vdevs_non_tlv, .extract_mgmt_rx_params = extract_mgmt_rx_params_non_tlv, .extract_vdev_stopped_param = extract_vdev_stopped_param_non_tlv, .extract_vdev_roam_param = extract_vdev_roam_param_non_tlv, @@ -8091,7 +8132,7 @@ struct wmi_ops non_tlv_ops = { .extract_gpio_input_ev_param = extract_gpio_input_ev_param_non_tlv, .extract_pdev_reserve_ast_ev_param = extract_pdev_reserve_ast_ev_param_non_tlv, - .extract_swba_vdev_map = extract_swba_vdev_map_non_tlv, + .extract_swba_num_vdevs = extract_swba_num_vdevs_non_tlv, .extract_swba_tim_info = extract_swba_tim_info_non_tlv, .extract_swba_noa_info = extract_swba_noa_info_non_tlv, .extract_peer_sta_ps_statechange_ev = diff --git a/wmi_unified_tlv.c b/wmi_unified_tlv.c index 7b62eef2cf..13f213c467 100644 --- a/wmi_unified_tlv.c +++ b/wmi_unified_tlv.c @@ -15413,29 +15413,117 @@ static QDF_STATUS extract_vdev_start_resp_tlv(wmi_unified_t wmi_handle, } /** - * extract_tbttoffset_update_params_tlv() - extract tbtt offset update param + * extract_tbttoffset_num_vdevs_tlv() - extract tbtt offset num vdev * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer - * @param vdev_map: Pointer to hold vdev map - * @param tbttoffset_list: Pointer to tbtt offset list + * @param num_vdevs: Pointer to hold num vdev + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS extract_tbttoffset_num_vdevs_tlv(void *wmi_hdl, + void *evt_buf, uint32_t *num_vdevs) +{ + WMI_TBTTOFFSET_UPDATE_EVENTID_param_tlvs *param_buf; + wmi_tbtt_offset_event_fixed_param *tbtt_offset_event; + uint32_t vdev_map; + + param_buf = (WMI_TBTTOFFSET_UPDATE_EVENTID_param_tlvs *)evt_buf; + if (!param_buf) { + qdf_print("Invalid tbtt update ext event buffer\n"); + return QDF_STATUS_E_INVAL; + } + tbtt_offset_event = param_buf->fixed_param; + vdev_map = tbtt_offset_event->vdev_map; + *num_vdevs = wmi_vdev_map_to_num_vdevs(vdev_map); + + return QDF_STATUS_SUCCESS; +} + +/** + * extract_ext_tbttoffset_num_vdevs_tlv() - extract ext tbtt offset num vdev + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param num_vdevs: Pointer to hold num vdev + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS extract_ext_tbttoffset_num_vdevs_tlv(void *wmi_hdl, + void *evt_buf, uint32_t *num_vdevs) +{ + WMI_TBTTOFFSET_EXT_UPDATE_EVENTID_param_tlvs *param_buf; + wmi_tbtt_offset_ext_event_fixed_param *tbtt_offset_ext_event; + + param_buf = (WMI_TBTTOFFSET_EXT_UPDATE_EVENTID_param_tlvs *)evt_buf; + if (!param_buf) { + qdf_print("Invalid tbtt update ext event buffer\n"); + return QDF_STATUS_E_INVAL; + } + tbtt_offset_ext_event = param_buf->fixed_param; + + *num_vdevs = tbtt_offset_ext_event->num_vdevs; + + return QDF_STATUS_SUCCESS; +} + +/** + * extract_tbttoffset_update_params_tlv() - extract tbtt offset param + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param idx: Index refering to a vdev + * @param tbtt_param: Pointer to tbttoffset event param * * Return: QDF_STATUS_SUCCESS for success or error code */ static QDF_STATUS extract_tbttoffset_update_params_tlv(void *wmi_hdl, - void *evt_buf, uint32_t *vdev_map, uint32_t **tbttoffset_list) + void *evt_buf, uint8_t idx, + struct tbttoffset_params *tbtt_param) { WMI_TBTTOFFSET_UPDATE_EVENTID_param_tlvs *param_buf; wmi_tbtt_offset_event_fixed_param *tbtt_offset_event; + uint32_t vdev_map; param_buf = (WMI_TBTTOFFSET_UPDATE_EVENTID_param_tlvs *) evt_buf; if (!param_buf) { qdf_print("Invalid tbtt update event buffer\n"); return QDF_STATUS_E_INVAL; } - tbtt_offset_event = param_buf->fixed_param; - *vdev_map = tbtt_offset_event->vdev_map; - *tbttoffset_list = param_buf->tbttoffset_list; + tbtt_offset_event = param_buf->fixed_param; + vdev_map = tbtt_offset_event->vdev_map; + tbtt_param->vdev_id = wmi_vdev_map_to_vdev_id(vdev_map, idx); + if (tbtt_param->vdev_id == WLAN_INVALID_VDEV_ID) + return QDF_STATUS_E_INVAL; + tbtt_param->tbttoffset = + param_buf->tbttoffset_list[tbtt_param->vdev_id]; + + return QDF_STATUS_SUCCESS; +} + +/** + * extract_ext_tbttoffset_update_params_tlv() - extract ext tbtt offset param + * @wmi_handle: wmi handle + * @param evt_buf: pointer to event buffer + * @param idx: Index refering to a vdev + * @param tbtt_param: Pointer to tbttoffset event param + * + * Return: QDF_STATUS_SUCCESS for success or error code + */ +static QDF_STATUS extract_ext_tbttoffset_update_params_tlv(void *wmi_hdl, + void *evt_buf, uint8_t idx, + struct tbttoffset_params *tbtt_param) +{ + WMI_TBTTOFFSET_EXT_UPDATE_EVENTID_param_tlvs *param_buf; + wmi_tbtt_offset_info *tbtt_offset_info; + + param_buf = (WMI_TBTTOFFSET_EXT_UPDATE_EVENTID_param_tlvs *)evt_buf; + if (!param_buf) { + qdf_print("Invalid tbtt update event buffer\n"); + return QDF_STATUS_E_INVAL; + } + tbtt_offset_info = ¶m_buf->tbtt_offset_info[idx]; + + tbtt_param->vdev_id = tbtt_offset_info->vdev_id; + tbtt_param->tbttoffset = tbtt_offset_info->tbttoffset; return QDF_STATUS_SUCCESS; } @@ -15833,26 +15921,32 @@ static QDF_STATUS extract_pdev_csa_switch_count_status_tlv( } /** - * extract_swba_vdev_map_tlv() - extract swba vdev map from event + * extract_swba_num_vdevs_tlv() - extract swba num vdevs from event * @wmi_handle: wmi handle * @param evt_buf: pointer to event buffer - * @param vdev_map: Pointer to hold vdev map + * @param num_vdevs: Pointer to hold num vdevs * * Return: QDF_STATUS_SUCCESS for success or error code */ -static QDF_STATUS extract_swba_vdev_map_tlv(wmi_unified_t wmi_handle, - void *evt_buf, uint32_t *vdev_map) +static QDF_STATUS extract_swba_num_vdevs_tlv(wmi_unified_t wmi_handle, + void *evt_buf, uint32_t *num_vdevs) { WMI_HOST_SWBA_EVENTID_param_tlvs *param_buf; wmi_host_swba_event_fixed_param *swba_event; + uint32_t vdev_map; param_buf = (WMI_HOST_SWBA_EVENTID_param_tlvs *) evt_buf; if (!param_buf) { WMI_LOGE("Invalid swba event buffer"); return QDF_STATUS_E_INVAL; } + swba_event = param_buf->fixed_param; - *vdev_map = swba_event->vdev_map; + *num_vdevs = swba_event->num_vdevs; + if (!(*num_vdevs)) { + vdev_map = swba_event->vdev_map; + *num_vdevs = wmi_vdev_map_to_num_vdevs(vdev_map); + } return QDF_STATUS_SUCCESS; } @@ -15886,6 +15980,7 @@ static QDF_STATUS extract_swba_tim_info_tlv(wmi_unified_t wmi_handle, (sizeof(uint32_t) * WMI_TIM_BITMAP_ARRAY_SIZE)); tim_info->tim_changed = tim_info_ev->tim_changed; tim_info->tim_num_ps_pending = tim_info_ev->tim_num_ps_pending; + tim_info->vdev_id = tim_info_ev->vdev_id; return QDF_STATUS_SUCCESS; } @@ -15938,6 +16033,7 @@ static QDF_STATUS extract_swba_noa_info_tlv(wmi_unified_t wmi_handle, p2p_desc->noa_descriptors[i].start_time = p2p_noa_info->noa_descriptors[i].start_time; } + p2p_desc->vdev_id = p2p_noa_info->vdev_id; } return QDF_STATUS_SUCCESS; @@ -17900,6 +17996,12 @@ struct wmi_ops tlv_ops = { .extract_vdev_start_resp = extract_vdev_start_resp_tlv, .extract_tbttoffset_update_params = extract_tbttoffset_update_params_tlv, + .extract_ext_tbttoffset_update_params = + extract_ext_tbttoffset_update_params_tlv, + .extract_tbttoffset_num_vdevs = + extract_tbttoffset_num_vdevs_tlv, + .extract_ext_tbttoffset_num_vdevs = + extract_ext_tbttoffset_num_vdevs_tlv, .extract_mgmt_rx_params = extract_mgmt_rx_params_tlv, .extract_vdev_stopped_param = extract_vdev_stopped_param_tlv, .extract_vdev_roam_param = extract_vdev_roam_param_tlv, @@ -17908,7 +18010,7 @@ struct wmi_ops tlv_ops = { .extract_vdev_tdls_ev_param = extract_vdev_tdls_ev_param_tlv, #endif .extract_mgmt_tx_compl_param = extract_mgmt_tx_compl_param_tlv, - .extract_swba_vdev_map = extract_swba_vdev_map_tlv, + .extract_swba_num_vdevs = extract_swba_num_vdevs_tlv, .extract_swba_tim_info = extract_swba_tim_info_tlv, .extract_swba_noa_info = extract_swba_noa_info_tlv, #ifdef CONVERGED_P2P_ENABLE @@ -18024,6 +18126,8 @@ static void populate_tlv_events_id(uint32_t *event_ids) event_ids[wmi_host_swba_event_id] = WMI_HOST_SWBA_EVENTID; event_ids[wmi_tbttoffset_update_event_id] = WMI_TBTTOFFSET_UPDATE_EVENTID; + event_ids[wmi_ext_tbttoffset_update_event_id] = + WMI_TBTTOFFSET_EXT_UPDATE_EVENTID; event_ids[wmi_offload_bcn_tx_status_event_id] = WMI_OFFLOAD_BCN_TX_STATUS_EVENTID; event_ids[wmi_offload_prob_resp_tx_status_event_id] =