diff --git a/wmi_unified_api.h b/wmi_unified_api.h index 66d3de25c7..3f0c303d05 100644 --- a/wmi_unified_api.h +++ b/wmi_unified_api.h @@ -1218,8 +1218,19 @@ QDF_STATUS wmi_extract_fips_event_data(void *wmi_hdl, void *evt_buf, QDF_STATUS wmi_extract_vdev_start_resp(void *wmi_hdl, void *evt_buf, wmi_host_vdev_start_resp *vdev_rsp); + 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); + +QDF_STATUS wmi_extract_ext_tbttoffset_update_params(void *wmi_hdl, + void *evt_buf, uint8_t idx, + struct tbttoffset_params *tbtt_param); + +QDF_STATUS wmi_extract_tbttoffset_num_vdevs(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs); + +QDF_STATUS wmi_extract_ext_tbttoffset_num_vdevs(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs); QDF_STATUS wmi_extract_mgmt_rx_params(void *wmi_hdl, void *evt_buf, struct mgmt_rx_event_params *hdr, uint8_t **bufp); @@ -1290,8 +1301,8 @@ QDF_STATUS wmi_extract_pdev_csa_switch_count_status(void *wmi_hdl, void *evt_buf, struct pdev_csa_switch_count_status *param); -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); QDF_STATUS wmi_extract_swba_tim_info(void *wmi_hdl, void *evt_buf, uint32_t idx, wmi_host_tim_info *tim_info); diff --git a/wmi_unified_param.h b/wmi_unified_param.h index 327c5e8d0d..a529117978 100644 --- a/wmi_unified_param.h +++ b/wmi_unified_param.h @@ -4955,6 +4955,7 @@ typedef enum { wmi_offchan_data_tx_completion_event, wmi_dfs_cac_complete_id, wmi_dfs_radar_detection_event_id, + wmi_ext_tbttoffset_update_event_id, wmi_events_max, } wmi_conv_event_id; @@ -5860,6 +5861,7 @@ struct wmi_host_offchan_data_tx_compl_event { * @tim_bitmap: TIM bitmap * @tim_changed: TIM changed * @tim_num_ps_pending: TIM num PS sta pending + * @vdev_id: Vdev id */ typedef struct { uint32_t tim_len; @@ -5867,6 +5869,7 @@ typedef struct { uint32_t tim_bitmap[WMI_HOST_TIM_BITMAP_ARRAY_SIZE]; uint32_t tim_changed; uint32_t tim_num_ps_pending; + uint32_t vdev_id; } wmi_host_tim_info; /** @@ -5892,6 +5895,7 @@ typedef struct { * @ctwindow: CT window * @num_descriptors: number of descriptors * @noa_descriptors: noa descriptors + * @vdev_id: Vdev id */ typedef struct { uint8_t modified; @@ -5901,6 +5905,7 @@ typedef struct { uint8_t num_descriptors; wmi_host_p2p_noa_descriptor noa_descriptors[WMI_HOST_P2P_MAX_NOA_DESCRIPTORS]; + uint32_t vdev_id; } wmi_host_p2p_noa_info; /** @@ -7250,4 +7255,15 @@ struct coex_config_params { #define WMI_HOST_PDEV_ID_0 0 #define WMI_HOST_PDEV_ID_1 1 #define WMI_HOST_PDEV_ID_2 2 + +/** + * struct tbttoffset_params - Tbttoffset event params + * @vdev_id: Virtual AP device identifier + * @tbttoffset : Tbttoffset for the virtual AP device + */ +struct tbttoffset_params { + uint32_t vdev_id; + uint32_t tbttoffset; +}; + #endif /* _WMI_UNIFIED_PARAM_H_ */ diff --git a/wmi_unified_priv.h b/wmi_unified_priv.h index 56c52a2395..a1b75349bc 100644 --- a/wmi_unified_priv.h +++ b/wmi_unified_priv.h @@ -1058,7 +1058,16 @@ QDF_STATUS (*extract_vdev_start_resp)(wmi_unified_t wmi_handle, void *evt_buf, wmi_host_vdev_start_resp *vdev_rsp); QDF_STATUS (*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); + +QDF_STATUS (*extract_ext_tbttoffset_update_params)(void *wmi_hdl, void *evt_buf, + uint8_t idx, struct tbttoffset_params *tbtt_param); + +QDF_STATUS (*extract_tbttoffset_num_vdevs)(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs); + +QDF_STATUS (*extract_ext_tbttoffset_num_vdevs)(void *wmi_hdl, void *evt_buf, + uint32_t *num_vdevs); QDF_STATUS (*extract_mgmt_rx_params)(wmi_unified_t wmi_handle, void *evt_buf, struct mgmt_rx_event_params *hdr, uint8_t **bufp); @@ -1122,8 +1131,8 @@ QDF_STATUS (*extract_offchan_data_tx_compl_param)(wmi_unified_t wmi_handle, QDF_STATUS (*extract_pdev_csa_switch_count_status)(wmi_unified_t wmi_handle, void *evt_buf, struct pdev_csa_switch_count_status *param); -QDF_STATUS (*extract_swba_vdev_map)(wmi_unified_t wmi_handle, void *evt_buf, - uint32_t *vdev_map); +QDF_STATUS (*extract_swba_num_vdevs)(wmi_unified_t wmi_handle, void *evt_buf, + uint32_t *num_vdevs); QDF_STATUS (*extract_swba_tim_info)(wmi_unified_t wmi_handle, void *evt_buf, uint32_t idx, wmi_host_tim_info *tim_info); @@ -1456,4 +1465,52 @@ static inline uint32_t wmi_align(uint32_t param) { return roundup(param, sizeof(uint32_t)); } + +/** + * wmi_vdev_map_to_vdev_id() - Provides vdev id corresponding to idx + * from vdev map + * @vdev_map: Bitmask containing information of active vdev ids + * @idx: Index referring to the i'th bit set from LSB in vdev map + * + * This API returns the vdev id for the i'th bit set from LSB in vdev map. + * Index runs through 1 from maximum number of vdevs set in the vdev map + * + * Return: vdev id of the vdev object + */ +static inline uint32_t wmi_vdev_map_to_vdev_id(uint32_t vdev_map, + uint32_t idx) +{ + uint32_t vdev_count = 0, vdev_set = 0, vdev_id = WLAN_INVALID_VDEV_ID; + + while (vdev_map) { + vdev_set += (vdev_map & 0x1); + if (vdev_set == (idx+1)) { + vdev_id = vdev_count; + break; + } + vdev_map >>= 1; + vdev_count++; + } + + return vdev_id; +} + +/** + * wmi_vdev_map_to_num_vdevs() - Provides number of vdevs active based on the + * vdev map received from FW + * @vdev_map: Bitmask containing information of active vdev ids + * + * Return: Number of vdevs set in the vdev bit mask + */ +static inline uint32_t wmi_vdev_map_to_num_vdevs(uint32_t vdev_map) +{ + uint32_t num_vdevs = 0; + + while (vdev_map) { + num_vdevs += (vdev_map & 0x1); + vdev_map >>= 1; + } + + return num_vdevs; +} #endif