@@ -609,7 +609,6 @@ struct ath11k_base {
struct ath11k_ext_irq_grp ext_irq_grp[ATH11K_EXT_IRQ_GRP_NUM_MAX];
struct napi_struct *napi;
struct ath11k_targ_cap target_caps;
- u32 service_bitmap[WMI_SERVICE_BM_SIZE];
u32 ext_service_bitmap[WMI_SERVICE_EXT_BM_SIZE];
bool pdevs_macaddr_valid;
int bd_api;
@@ -4996,9 +4996,8 @@ static void ath11k_mac_disable_peer_fixed_rate(void *data,
lockdep_assert_held(&ar->conf_mutex);
- if (!test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64,
- ar->ab->wmi_sc.svc_map) ||
- (ar->rx_channel != channel))
+ if (!test_bit(WMI_TLV_SERVICE_BSS_CHANNEL_INFO_64, ar->ab->wmi_sc.svc_map) ||
+ ar->rx_channel != channel)
return;
if (ar->scan.state != ATH11K_SCAN_IDLE) {
@@ -437,6 +437,23 @@ static int ath11k_pull_service_ready_tlv(struct ath11k_base *ab,
return 0;
}
+/* Save the wmi_service_bitmap into a linear bitmap. The wmi_services in
+ * wmi_service ready event are advertised in b0-b3 (LSB 4-bits) of each
+ * 4-byte word.
+ */
+static void ath11k_wmi_service_bitmap_copy(struct ath11k_pdev_wmi *wmi,
+ const u32 *wmi_svc_bm)
+{
+ int i, j;
+
+ for (i = 0, j = 0; i < WMI_SERVICE_BM_SIZE && j < WMI_MAX_SERVICE; i++) {
+ do {
+ if (wmi_svc_bm[i] & BIT(j % WMI_SERVICE_BITS_IN_SIZE32))
+ set_bit(j, wmi->wmi_sc->svc_map);
+ } while (++j % WMI_SERVICE_BITS_IN_SIZE32);
+ }
+}
+
static int ath11k_wmi_tlv_svc_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len,
const void *ptr, void *data)
{
@@ -459,11 +476,7 @@ static int ath11k_wmi_tlv_svc_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len
return -EINVAL;
}
- wmi_svc_map(ptr, wmi_handle->wmi_sc->svc_map,
- WMI_MAX_SERVICE);
-
- memcpy(ab->service_bitmap, ptr,
- expect_len);
+ ath11k_wmi_service_bitmap_copy(wmi_handle, ptr);
svc_ready->wmi_svc_bitmap_done = true;
}
@@ -5310,6 +5323,7 @@ static void ath11k_service_available_event(struct ath11k_base *ab, u8 *evt_buf,
const void **tb;
const struct wmi_service_available_event *ev;
int ret;
+ int i, j;
tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
if (IS_ERR(tb)) {
@@ -5325,17 +5339,24 @@ static void ath11k_service_available_event(struct ath11k_base *ab, u8 *evt_buf,
return;
}
- memcpy(ab->ext_service_bitmap, ev->wmi_service_segment_bitmap,
- (WMI_SERVICE_SEGMENT_BM_SIZE32 * sizeof(u32)));
-
- wmi_svc_map_ext(ev->wmi_service_segment_bitmap,
- ab->wmi_sc.svc_map,
- WMI_MAX_SERVICE);
+ /* TODO: Use wmi_service_segment_offset information to get the service
+ * especially when more services are advertised in multiple sevice
+ * available events.
+ */
+ for (i = 0, j = WMI_MAX_SERVICE;
+ i < WMI_SERVICE_SEGMENT_BM_SIZE32 && j < WMI_MAX_EXT_SERVICE;
+ i++) {
+ do {
+ if (ev->wmi_service_segment_bitmap[i] &
+ BIT(j % WMI_AVAIL_SERVICE_BITS_IN_SIZE32))
+ set_bit(j, ab->wmi_sc.svc_map);
+ } while (++j % WMI_AVAIL_SERVICE_BITS_IN_SIZE32);
+ }
ath11k_dbg(ab, ATH11K_DBG_WMI,
"wmi_ext_service_bitmap 0:0x%x, 1:0x%x, 2:0x%x, 3:0x%x",
- ab->ext_service_bitmap[0], ab->ext_service_bitmap[1],
- ab->ext_service_bitmap[2], ab->ext_service_bitmap[3]);
+ ev->wmi_service_segment_bitmap[0], ev->wmi_service_segment_bitmap[1],
+ ev->wmi_service_segment_bitmap[2], ev->wmi_service_segment_bitmap[3]);
kfree(tb);
}
@@ -1943,570 +1943,6 @@ enum wmi_tlv_service {
};
-enum wmi_service {
- WMI_SERVICE_BEACON_OFFLOAD = 0,
- WMI_SERVICE_SCAN_OFFLOAD,
- WMI_SERVICE_ROAM_SCAN_OFFLOAD,
- WMI_SERVICE_BCN_MISS_OFFLOAD,
- WMI_SERVICE_STA_PWRSAVE,
- WMI_SERVICE_STA_ADVANCED_PWRSAVE,
- WMI_SERVICE_AP_UAPSD,
- WMI_SERVICE_AP_DFS,
- WMI_SERVICE_11AC,
- WMI_SERVICE_BLOCKACK,
- WMI_SERVICE_PHYERR,
- WMI_SERVICE_BCN_FILTER,
- WMI_SERVICE_RTT,
- WMI_SERVICE_WOW,
- WMI_SERVICE_RATECTRL_CACHE,
- WMI_SERVICE_IRAM_TIDS,
- WMI_SERVICE_ARPNS_OFFLOAD,
- WMI_SERVICE_NLO,
- WMI_SERVICE_GTK_OFFLOAD,
- WMI_SERVICE_SCAN_SCH,
- WMI_SERVICE_CSA_OFFLOAD,
- WMI_SERVICE_CHATTER,
- WMI_SERVICE_COEX_FREQAVOID,
- WMI_SERVICE_PACKET_POWER_SAVE,
- WMI_SERVICE_FORCE_FW_HANG,
- WMI_SERVICE_GPIO,
- WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
- WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
- WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
- WMI_SERVICE_STA_KEEP_ALIVE,
- WMI_SERVICE_TX_ENCAP,
- WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC,
- WMI_SERVICE_EARLY_RX,
- WMI_SERVICE_STA_SMPS,
- WMI_SERVICE_FWTEST,
- WMI_SERVICE_STA_WMMAC,
- WMI_SERVICE_TDLS,
- WMI_SERVICE_BURST,
- WMI_SERVICE_MCC_BCN_INTERVAL_CHANGE,
- WMI_SERVICE_ADAPTIVE_OCS,
- WMI_SERVICE_BA_SSN_SUPPORT,
- WMI_SERVICE_FILTER_IPSEC_NATKEEPALIVE,
- WMI_SERVICE_WLAN_HB,
- WMI_SERVICE_LTE_ANT_SHARE_SUPPORT,
- WMI_SERVICE_BATCH_SCAN,
- WMI_SERVICE_QPOWER,
- WMI_SERVICE_PLMREQ,
- WMI_SERVICE_THERMAL_MGMT,
- WMI_SERVICE_RMC,
- WMI_SERVICE_MHF_OFFLOAD,
- WMI_SERVICE_COEX_SAR,
- WMI_SERVICE_BCN_TXRATE_OVERRIDE,
- WMI_SERVICE_NAN,
- WMI_SERVICE_L1SS_STAT,
- WMI_SERVICE_ESTIMATE_LINKSPEED,
- WMI_SERVICE_OBSS_SCAN,
- WMI_SERVICE_TDLS_OFFCHAN,
- WMI_SERVICE_TDLS_UAPSD_BUFFER_STA,
- WMI_SERVICE_TDLS_UAPSD_SLEEP_STA,
- WMI_SERVICE_IBSS_PWRSAVE,
- WMI_SERVICE_LPASS,
- WMI_SERVICE_EXTSCAN,
- WMI_SERVICE_D0WOW,
- WMI_SERVICE_HSOFFLOAD,
- WMI_SERVICE_ROAM_HO_OFFLOAD,
- WMI_SERVICE_RX_FULL_REORDER,
- WMI_SERVICE_DHCP_OFFLOAD,
- WMI_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT,
- WMI_SERVICE_MDNS_OFFLOAD,
- WMI_SERVICE_SAP_AUTH_OFFLOAD,
- WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT,
- WMI_SERVICE_OCB,
- WMI_SERVICE_AP_ARPNS_OFFLOAD,
- WMI_SERVICE_PER_BAND_CHAINMASK_SUPPORT,
- WMI_SERVICE_PACKET_FILTER_OFFLOAD,
- WMI_SERVICE_MGMT_TX_HTT,
- WMI_SERVICE_MGMT_TX_WMI,
- WMI_SERVICE_EXT_MSG,
- WMI_SERVICE_MAWC,
- WMI_SERVICE_PEER_ASSOC_CONF,
- WMI_SERVICE_EGAP,
- WMI_SERVICE_STA_PMF_OFFLOAD,
- WMI_SERVICE_UNIFIED_WOW_CAPABILITY,
- WMI_SERVICE_ENHANCED_PROXY_STA,
- WMI_SERVICE_ATF,
- WMI_SERVICE_COEX_GPIO,
- WMI_SERVICE_AUX_SPECTRAL_INTF,
- WMI_SERVICE_AUX_CHAN_LOAD_INTF,
- WMI_SERVICE_BSS_CHANNEL_INFO_64,
- WMI_SERVICE_ENTERPRISE_MESH,
- WMI_SERVICE_RESTRT_CHNL_SUPPORT,
- WMI_SERVICE_BPF_OFFLOAD,
- WMI_SERVICE_SYNC_DELETE_CMDS,
- WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT,
- WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT,
- WMI_SERVICE_RATECTRL_LIMIT_MAX_MIN_RATES,
- WMI_SERVICE_NAN_DATA,
- WMI_SERVICE_NAN_RTT,
- WMI_SERVICE_11AX,
- WMI_SERVICE_DEPRECATED_REPLACE,
- WMI_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE,
- WMI_SERVICE_ENHANCED_MCAST_FILTER,
- WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT,
- WMI_SERVICE_MESH_11S,
- WMI_SERVICE_HALF_RATE_QUARTER_RATE_SUPPORT,
- WMI_SERVICE_VDEV_RX_FILTER,
- WMI_SERVICE_P2P_LISTEN_OFFLOAD_SUPPORT,
- WMI_SERVICE_MARK_FIRST_WAKEUP_PACKET,
- WMI_SERVICE_MULTIPLE_MCAST_FILTER_SET,
- WMI_SERVICE_HOST_MANAGED_RX_REORDER,
- WMI_SERVICE_FLASH_RDWR_SUPPORT,
- WMI_SERVICE_WLAN_STATS_REPORT,
- WMI_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT,
- WMI_SERVICE_DFS_PHYERR_OFFLOAD,
- WMI_SERVICE_RCPI_SUPPORT,
- WMI_SERVICE_FW_MEM_DUMP_SUPPORT,
- WMI_SERVICE_PEER_STATS_INFO,
- WMI_SERVICE_REGULATORY_DB,
- WMI_SERVICE_11D_OFFLOAD,
- WMI_SERVICE_HW_DATA_FILTERING,
- WMI_SERVICE_MULTIPLE_VDEV_RESTART,
- WMI_SERVICE_PKT_ROUTING,
- WMI_SERVICE_CHECK_CAL_VERSION,
- WMI_SERVICE_OFFCHAN_TX_WMI,
- WMI_SERVICE_8SS_TX_BFEE,
- WMI_SERVICE_EXTENDED_NSS_SUPPORT,
- WMI_SERVICE_ACK_TIMEOUT,
- WMI_SERVICE_PDEV_BSS_CHANNEL_INFO_64,
- WMI_SERVICE_CHAN_LOAD_INFO,
- WMI_SERVICE_TX_PPDU_INFO_STATS_SUPPORT,
- WMI_SERVICE_VDEV_LIMIT_OFFCHAN_SUPPORT,
- WMI_SERVICE_FILS_SUPPORT,
- WMI_SERVICE_WLAN_OIC_PING_OFFLOAD,
- WMI_SERVICE_WLAN_DHCP_RENEW,
- WMI_SERVICE_MAWC_SUPPORT,
- WMI_SERVICE_VDEV_LATENCY_CONFIG,
- WMI_SERVICE_PDEV_UPDATE_CTLTABLE_SUPPORT,
- WMI_SERVICE_PKTLOG_SUPPORT_OVER_HTT,
- WMI_SERVICE_VDEV_MULTI_GROUP_KEY_SUPPORT,
- WMI_SERVICE_SCAN_PHYMODE_SUPPORT,
- WMI_SERVICE_THERM_THROT,
- WMI_SERVICE_BCN_OFFLOAD_START_STOP_SUPPORT,
- WMI_SERVICE_WOW_WAKEUP_BY_TIMER_PATTERN,
- WMI_SERVICE_PEER_MAP_UNMAP_V2_SUPPORT,
- WMI_SERVICE_OFFCHAN_DATA_TID_SUPPORT,
- WMI_SERVICE_RX_PROMISC_ENABLE_SUPPORT,
- WMI_SERVICE_SUPPORT_DIRECT_DMA,
- WMI_SERVICE_AP_OBSS_DETECTION_OFFLOAD,
- WMI_SERVICE_11K_NEIGHBOUR_REPORT_SUPPORT,
- WMI_SERVICE_LISTEN_INTERVAL_OFFLOAD_SUPPORT,
- WMI_SERVICE_BSS_COLOR_OFFLOAD,
- WMI_SERVICE_RUNTIME_DPD_RECAL,
- WMI_SERVICE_STA_TWT,
- WMI_SERVICE_AP_TWT,
- WMI_SERVICE_GMAC_OFFLOAD_SUPPORT,
- WMI_SERVICE_SPOOF_MAC_SUPPORT,
- WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT,
- WMI_SERVICE_VDEV_SWRETRY_PER_AC_CONFIG_SUPPORT,
- WMI_SERVICE_DUAL_BEACON_ON_SINGLE_MAC_SCC_SUPPORT,
- WMI_SERVICE_DUAL_BEACON_ON_SINGLE_MAC_MCC_SUPPORT,
- WMI_SERVICE_MOTION_DET,
- WMI_SERVICE_INFRA_MBSSID,
- WMI_SERVICE_OBSS_SPATIAL_REUSE,
- WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
- WMI_SERVICE_NAN_DBS_SUPPORT,
- WMI_SERVICE_NDI_DBS_SUPPORT,
- WMI_SERVICE_NAN_SAP_SUPPORT,
- WMI_SERVICE_NDI_SAP_SUPPORT,
- WMI_SERVICE_CFR_CAPTURE_SUPPORT,
- WMI_SERVICE_CFR_CAPTURE_IND_MSG_TYPE_1,
- WMI_SERVICE_ESP_SUPPORT,
- WMI_SERVICE_PEER_CHWIDTH_CHANGE,
- WMI_SERVICE_WLAN_HPCS_PULSE,
- WMI_SERVICE_PER_VDEV_CHAINMASK_CONFIG_SUPPORT,
- WMI_SERVICE_TX_DATA_MGMT_ACK_RSSI,
- WMI_SERVICE_NAN_DISABLE_SUPPORT,
- WMI_SERVICE_NAN_DISABLE_SUPPORT__prototype = WMI_SERVICE_NAN_DISABLE_SUPPORT,
- WMI_SERVICE_HTT_H2T_NO_HTC_HDR_LEN_IN_MSG_LEN,
-
- /* keep it last */
- WMI_SERVICE_MAX
-};
-
-#define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id, len) \
- ((svc_id) < (len) && \
- ((wmi_svc_bmap)[(svc_id) / (sizeof(u32))]) & \
- BIT((svc_id) % (sizeof(u32))))
-
-#define WMI_EXT_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id, len) \
- ((svc_id) < (WMI_MAX_EXT_SERVICE) && \
- (svc_id) >= (len) && \
- ((wmi_svc_bmap)[((svc_id) - (len)) / 32]) & \
- BIT(((((svc_id) - (len)) % 32) & 0x1f)))
-
-#define SVCMAP(x, y, len) \
- do { \
- if ((WMI_SERVICE_IS_ENABLED((in), (x), (len))) || \
- (WMI_EXT_SERVICE_IS_ENABLED((in), (x), (len)))) \
- __set_bit(y, out); \
- } while (0)
-
-static inline void
-wmi_svc_map_ext(const u32 *in, unsigned long *out, size_t len)
-{
- SVCMAP(WMI_TLV_SERVICE_TX_PPDU_INFO_STATS_SUPPORT,
- WMI_SERVICE_TX_PPDU_INFO_STATS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_VDEV_LIMIT_OFFCHAN_SUPPORT,
- WMI_SERVICE_VDEV_LIMIT_OFFCHAN_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_FILS_SUPPORT,
- WMI_SERVICE_FILS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_WLAN_OIC_PING_OFFLOAD,
- WMI_SERVICE_WLAN_OIC_PING_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_WLAN_DHCP_RENEW,
- WMI_SERVICE_WLAN_DHCP_RENEW, len);
- SVCMAP(WMI_TLV_SERVICE_MAWC_SUPPORT,
- WMI_SERVICE_MAWC_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_VDEV_LATENCY_CONFIG,
- WMI_SERVICE_VDEV_LATENCY_CONFIG, len);
- SVCMAP(WMI_TLV_SERVICE_PDEV_UPDATE_CTLTABLE_SUPPORT,
- WMI_SERVICE_PDEV_UPDATE_CTLTABLE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_PKTLOG_SUPPORT_OVER_HTT,
- WMI_SERVICE_PKTLOG_SUPPORT_OVER_HTT, len);
- SVCMAP(WMI_TLV_SERVICE_VDEV_MULTI_GROUP_KEY_SUPPORT,
- WMI_SERVICE_VDEV_MULTI_GROUP_KEY_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_SCAN_PHYMODE_SUPPORT,
- WMI_SERVICE_SCAN_PHYMODE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_THERM_THROT,
- WMI_SERVICE_THERM_THROT, len);
- SVCMAP(WMI_TLV_SERVICE_BCN_OFFLOAD_START_STOP_SUPPORT,
- WMI_SERVICE_BCN_OFFLOAD_START_STOP_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_WOW_WAKEUP_BY_TIMER_PATTERN,
- WMI_SERVICE_WOW_WAKEUP_BY_TIMER_PATTERN, len);
- SVCMAP(WMI_TLV_SERVICE_PEER_MAP_UNMAP_V2_SUPPORT,
- WMI_SERVICE_PEER_MAP_UNMAP_V2_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_OFFCHAN_DATA_TID_SUPPORT,
- WMI_SERVICE_OFFCHAN_DATA_TID_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_RX_PROMISC_ENABLE_SUPPORT,
- WMI_SERVICE_RX_PROMISC_ENABLE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_SUPPORT_DIRECT_DMA,
- WMI_SERVICE_SUPPORT_DIRECT_DMA, len);
- SVCMAP(WMI_TLV_SERVICE_AP_OBSS_DETECTION_OFFLOAD,
- WMI_SERVICE_AP_OBSS_DETECTION_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_11K_NEIGHBOUR_REPORT_SUPPORT,
- WMI_SERVICE_11K_NEIGHBOUR_REPORT_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_LISTEN_INTERVAL_OFFLOAD_SUPPORT,
- WMI_SERVICE_LISTEN_INTERVAL_OFFLOAD_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_BSS_COLOR_OFFLOAD,
- WMI_SERVICE_BSS_COLOR_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_RUNTIME_DPD_RECAL,
- WMI_SERVICE_RUNTIME_DPD_RECAL, len);
- SVCMAP(WMI_TLV_SERVICE_STA_TWT,
- WMI_SERVICE_STA_TWT, len);
- SVCMAP(WMI_TLV_SERVICE_AP_TWT,
- WMI_SERVICE_AP_TWT, len);
- SVCMAP(WMI_TLV_SERVICE_GMAC_OFFLOAD_SUPPORT,
- WMI_SERVICE_GMAC_OFFLOAD_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_SPOOF_MAC_SUPPORT,
- WMI_SERVICE_SPOOF_MAC_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_PEER_TID_CONFIGS_SUPPORT,
- WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_VDEV_SWRETRY_PER_AC_CONFIG_SUPPORT,
- WMI_SERVICE_VDEV_SWRETRY_PER_AC_CONFIG_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_DUAL_BEACON_ON_SINGLE_MAC_SCC_SUPPORT,
- WMI_SERVICE_DUAL_BEACON_ON_SINGLE_MAC_SCC_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_MOTION_DET,
- WMI_SERVICE_MOTION_DET, len);
- SVCMAP(WMI_TLV_SERVICE_INFRA_MBSSID,
- WMI_SERVICE_INFRA_MBSSID, len);
- SVCMAP(WMI_TLV_SERVICE_OBSS_SPATIAL_REUSE,
- WMI_SERVICE_OBSS_SPATIAL_REUSE, len);
- SVCMAP(WMI_TLV_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
- WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_NAN_DBS_SUPPORT,
- WMI_SERVICE_NAN_DBS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_NDI_DBS_SUPPORT,
- WMI_SERVICE_NDI_DBS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_NAN_SAP_SUPPORT,
- WMI_SERVICE_NAN_SAP_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_NDI_SAP_SUPPORT,
- WMI_SERVICE_NDI_SAP_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_CFR_CAPTURE_SUPPORT,
- WMI_SERVICE_CFR_CAPTURE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_CFR_CAPTURE_IND_MSG_TYPE_1,
- WMI_SERVICE_CFR_CAPTURE_IND_MSG_TYPE_1, len);
- SVCMAP(WMI_TLV_SERVICE_ESP_SUPPORT,
- WMI_SERVICE_ESP_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_PEER_CHWIDTH_CHANGE,
- WMI_SERVICE_PEER_CHWIDTH_CHANGE, len);
- SVCMAP(WMI_TLV_SERVICE_WLAN_HPCS_PULSE,
- WMI_SERVICE_WLAN_HPCS_PULSE, len);
- SVCMAP(WMI_TLV_SERVICE_PER_VDEV_CHAINMASK_CONFIG_SUPPORT,
- WMI_SERVICE_PER_VDEV_CHAINMASK_CONFIG_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_TX_DATA_MGMT_ACK_RSSI,
- WMI_SERVICE_TX_DATA_MGMT_ACK_RSSI, len);
- SVCMAP(WMI_TLV_SERVICE_NAN_DISABLE_SUPPORT,
- WMI_SERVICE_NAN_DISABLE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_NAN_DISABLE_SUPPORT__prototype,
- WMI_SERVICE_NAN_DISABLE_SUPPORT__prototype, len);
- SVCMAP(WMI_TLV_SERVICE_HTT_H2T_NO_HTC_HDR_LEN_IN_MSG_LEN,
- WMI_SERVICE_HTT_H2T_NO_HTC_HDR_LEN_IN_MSG_LEN, len);
-}
-
-static inline void
-wmi_svc_map(const u32 *in, unsigned long *out, size_t len)
-{
- SVCMAP(WMI_TLV_SERVICE_BEACON_OFFLOAD,
- WMI_SERVICE_BEACON_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_SCAN_OFFLOAD,
- WMI_SERVICE_SCAN_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_ROAM_SCAN_OFFLOAD,
- WMI_SERVICE_ROAM_SCAN_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_BCN_MISS_OFFLOAD,
- WMI_SERVICE_BCN_MISS_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_STA_PWRSAVE,
- WMI_SERVICE_STA_PWRSAVE, len);
- SVCMAP(WMI_TLV_SERVICE_STA_ADVANCED_PWRSAVE,
- WMI_SERVICE_STA_ADVANCED_PWRSAVE, len);
- SVCMAP(WMI_TLV_SERVICE_AP_UAPSD,
- WMI_SERVICE_AP_UAPSD, len);
- SVCMAP(WMI_TLV_SERVICE_AP_DFS,
- WMI_SERVICE_AP_DFS, len);
- SVCMAP(WMI_TLV_SERVICE_11AC,
- WMI_SERVICE_11AC, len);
- SVCMAP(WMI_TLV_SERVICE_BLOCKACK,
- WMI_SERVICE_BLOCKACK, len);
- SVCMAP(WMI_TLV_SERVICE_PHYERR,
- WMI_SERVICE_PHYERR, len);
- SVCMAP(WMI_TLV_SERVICE_BCN_FILTER,
- WMI_SERVICE_BCN_FILTER, len);
- SVCMAP(WMI_TLV_SERVICE_RTT,
- WMI_SERVICE_RTT, len);
- SVCMAP(WMI_TLV_SERVICE_WOW,
- WMI_SERVICE_WOW, len);
- SVCMAP(WMI_TLV_SERVICE_RATECTRL_CACHE,
- WMI_SERVICE_RATECTRL_CACHE, len);
- SVCMAP(WMI_TLV_SERVICE_IRAM_TIDS,
- WMI_SERVICE_IRAM_TIDS, len);
- SVCMAP(WMI_TLV_SERVICE_ARPNS_OFFLOAD,
- WMI_SERVICE_ARPNS_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_NLO,
- WMI_SERVICE_NLO, len);
- SVCMAP(WMI_TLV_SERVICE_GTK_OFFLOAD,
- WMI_SERVICE_GTK_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_SCAN_SCH,
- WMI_SERVICE_SCAN_SCH, len);
- SVCMAP(WMI_TLV_SERVICE_CSA_OFFLOAD,
- WMI_SERVICE_CSA_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_CHATTER,
- WMI_SERVICE_CHATTER, len);
- SVCMAP(WMI_TLV_SERVICE_COEX_FREQAVOID,
- WMI_SERVICE_COEX_FREQAVOID, len);
- SVCMAP(WMI_TLV_SERVICE_PACKET_POWER_SAVE,
- WMI_SERVICE_PACKET_POWER_SAVE, len);
- SVCMAP(WMI_TLV_SERVICE_FORCE_FW_HANG,
- WMI_SERVICE_FORCE_FW_HANG, len);
- SVCMAP(WMI_TLV_SERVICE_GPIO,
- WMI_SERVICE_GPIO, len);
- SVCMAP(WMI_TLV_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
- WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM, len);
- SVCMAP(WMI_STA_UAPSD_BASIC_AUTO_TRIG,
- WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, len);
- SVCMAP(WMI_STA_UAPSD_VAR_AUTO_TRIG,
- WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, len);
- SVCMAP(WMI_TLV_SERVICE_STA_KEEP_ALIVE,
- WMI_SERVICE_STA_KEEP_ALIVE, len);
- SVCMAP(WMI_TLV_SERVICE_TX_ENCAP,
- WMI_SERVICE_TX_ENCAP, len);
- SVCMAP(WMI_TLV_SERVICE_AP_PS_DETECT_OUT_OF_SYNC,
- WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC, len);
- SVCMAP(WMI_TLV_SERVICE_EARLY_RX,
- WMI_SERVICE_EARLY_RX, len);
- SVCMAP(WMI_TLV_SERVICE_STA_SMPS,
- WMI_SERVICE_STA_SMPS, len);
- SVCMAP(WMI_TLV_SERVICE_FWTEST,
- WMI_SERVICE_FWTEST, len);
- SVCMAP(WMI_TLV_SERVICE_STA_WMMAC,
- WMI_SERVICE_STA_WMMAC, len);
- SVCMAP(WMI_TLV_SERVICE_TDLS,
- WMI_SERVICE_TDLS, len);
- SVCMAP(WMI_TLV_SERVICE_BURST,
- WMI_SERVICE_BURST, len);
- SVCMAP(WMI_TLV_SERVICE_MCC_BCN_INTERVAL_CHANGE,
- WMI_SERVICE_MCC_BCN_INTERVAL_CHANGE, len);
- SVCMAP(WMI_TLV_SERVICE_ADAPTIVE_OCS,
- WMI_SERVICE_ADAPTIVE_OCS, len);
- SVCMAP(WMI_TLV_SERVICE_BA_SSN_SUPPORT,
- WMI_SERVICE_BA_SSN_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_FILTER_IPSEC_NATKEEPALIVE,
- WMI_SERVICE_FILTER_IPSEC_NATKEEPALIVE, len);
- SVCMAP(WMI_TLV_SERVICE_WLAN_HB,
- WMI_SERVICE_WLAN_HB, len);
- SVCMAP(WMI_TLV_SERVICE_LTE_ANT_SHARE_SUPPORT,
- WMI_SERVICE_LTE_ANT_SHARE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_BATCH_SCAN,
- WMI_SERVICE_BATCH_SCAN, len);
- SVCMAP(WMI_TLV_SERVICE_QPOWER,
- WMI_SERVICE_QPOWER, len);
- SVCMAP(WMI_TLV_SERVICE_PLMREQ,
- WMI_SERVICE_PLMREQ, len);
- SVCMAP(WMI_TLV_SERVICE_THERMAL_MGMT,
- WMI_SERVICE_THERMAL_MGMT, len);
- SVCMAP(WMI_TLV_SERVICE_RMC,
- WMI_SERVICE_RMC, len);
- SVCMAP(WMI_TLV_SERVICE_MHF_OFFLOAD,
- WMI_SERVICE_MHF_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_COEX_SAR,
- WMI_SERVICE_COEX_SAR, len);
- SVCMAP(WMI_TLV_SERVICE_BCN_TXRATE_OVERRIDE,
- WMI_SERVICE_BCN_TXRATE_OVERRIDE, len);
- SVCMAP(WMI_TLV_SERVICE_NAN,
- WMI_SERVICE_NAN, len);
- SVCMAP(WMI_TLV_SERVICE_L1SS_STAT,
- WMI_SERVICE_L1SS_STAT, len);
- SVCMAP(WMI_TLV_SERVICE_ESTIMATE_LINKSPEED,
- WMI_SERVICE_ESTIMATE_LINKSPEED, len);
- SVCMAP(WMI_TLV_SERVICE_OBSS_SCAN,
- WMI_SERVICE_OBSS_SCAN, len);
- SVCMAP(WMI_TLV_SERVICE_TDLS_OFFCHAN,
- WMI_SERVICE_TDLS_OFFCHAN, len);
- SVCMAP(WMI_TLV_SERVICE_TDLS_UAPSD_BUFFER_STA,
- WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, len);
- SVCMAP(WMI_TLV_SERVICE_TDLS_UAPSD_SLEEP_STA,
- WMI_SERVICE_TDLS_UAPSD_SLEEP_STA, len);
- SVCMAP(WMI_TLV_SERVICE_IBSS_PWRSAVE,
- WMI_SERVICE_IBSS_PWRSAVE, len);
- SVCMAP(WMI_TLV_SERVICE_LPASS,
- WMI_SERVICE_LPASS, len);
- SVCMAP(WMI_TLV_SERVICE_EXTSCAN,
- WMI_SERVICE_EXTSCAN, len);
- SVCMAP(WMI_TLV_SERVICE_D0WOW,
- WMI_SERVICE_D0WOW, len);
- SVCMAP(WMI_TLV_SERVICE_HSOFFLOAD,
- WMI_SERVICE_HSOFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_ROAM_HO_OFFLOAD,
- WMI_SERVICE_ROAM_HO_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_RX_FULL_REORDER,
- WMI_SERVICE_RX_FULL_REORDER, len);
- SVCMAP(WMI_TLV_SERVICE_DHCP_OFFLOAD,
- WMI_SERVICE_DHCP_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT,
- WMI_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_MDNS_OFFLOAD,
- WMI_SERVICE_MDNS_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_SAP_AUTH_OFFLOAD,
- WMI_SERVICE_SAP_AUTH_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT,
- WMI_SERVICE_DUAL_BAND_SIMULTANEOUS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_OCB,
- WMI_SERVICE_OCB, len);
- SVCMAP(WMI_TLV_SERVICE_AP_ARPNS_OFFLOAD,
- WMI_SERVICE_AP_ARPNS_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_PER_BAND_CHAINMASK_SUPPORT,
- WMI_SERVICE_PER_BAND_CHAINMASK_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_PACKET_FILTER_OFFLOAD,
- WMI_SERVICE_PACKET_FILTER_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_MGMT_TX_HTT,
- WMI_SERVICE_MGMT_TX_HTT, len);
- SVCMAP(WMI_TLV_SERVICE_MGMT_TX_WMI,
- WMI_SERVICE_MGMT_TX_WMI, len);
- SVCMAP(WMI_TLV_SERVICE_EXT_MSG,
- WMI_SERVICE_EXT_MSG, len);
- SVCMAP(WMI_TLV_SERVICE_MAWC,
- WMI_SERVICE_MAWC, len);
- SVCMAP(WMI_TLV_SERVICE_PEER_ASSOC_CONF,
- WMI_SERVICE_PEER_ASSOC_CONF, len);
- SVCMAP(WMI_TLV_SERVICE_EGAP,
- WMI_SERVICE_EGAP, len);
- SVCMAP(WMI_TLV_SERVICE_STA_PMF_OFFLOAD,
- WMI_SERVICE_STA_PMF_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_UNIFIED_WOW_CAPABILITY,
- WMI_SERVICE_UNIFIED_WOW_CAPABILITY, len);
- SVCMAP(WMI_TLV_SERVICE_ENHANCED_PROXY_STA,
- WMI_SERVICE_ENHANCED_PROXY_STA, len);
- SVCMAP(WMI_TLV_SERVICE_ATF,
- WMI_SERVICE_ATF, len);
- SVCMAP(WMI_TLV_SERVICE_COEX_GPIO,
- WMI_SERVICE_COEX_GPIO, len);
- SVCMAP(WMI_TLV_SERVICE_AUX_SPECTRAL_INTF,
- WMI_SERVICE_AUX_SPECTRAL_INTF, len);
- SVCMAP(WMI_TLV_SERVICE_AUX_CHAN_LOAD_INTF,
- WMI_SERVICE_AUX_CHAN_LOAD_INTF, len);
- SVCMAP(WMI_TLV_SERVICE_BSS_CHANNEL_INFO_64,
- WMI_SERVICE_BSS_CHANNEL_INFO_64, len);
- SVCMAP(WMI_TLV_SERVICE_ENTERPRISE_MESH,
- WMI_SERVICE_ENTERPRISE_MESH, len);
- SVCMAP(WMI_TLV_SERVICE_RESTRT_CHNL_SUPPORT,
- WMI_SERVICE_RESTRT_CHNL_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_BPF_OFFLOAD,
- WMI_SERVICE_BPF_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_SYNC_DELETE_CMDS,
- WMI_SERVICE_SYNC_DELETE_CMDS, len);
- SVCMAP(WMI_TLV_SERVICE_SMART_ANTENNA_SW_SUPPORT,
- WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_SMART_ANTENNA_HW_SUPPORT,
- WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_RATECTRL_LIMIT_MAX_MIN_RATES,
- WMI_SERVICE_RATECTRL_LIMIT_MAX_MIN_RATES, len);
- SVCMAP(WMI_TLV_SERVICE_NAN_DATA,
- WMI_SERVICE_NAN_DATA, len);
- SVCMAP(WMI_TLV_SERVICE_NAN_RTT,
- WMI_SERVICE_NAN_RTT, len);
- SVCMAP(WMI_TLV_SERVICE_11AX,
- WMI_SERVICE_11AX, len);
- SVCMAP(WMI_TLV_SERVICE_DEPRECATED_REPLACE,
- WMI_SERVICE_DEPRECATED_REPLACE, len);
- SVCMAP(WMI_TLV_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE,
- WMI_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE, len);
- SVCMAP(WMI_TLV_SERVICE_ENHANCED_MCAST_FILTER,
- WMI_SERVICE_ENHANCED_MCAST_FILTER, len);
- SVCMAP(WMI_TLV_SERVICE_PERIODIC_CHAN_STAT_SUPPORT,
- WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_MESH_11S,
- WMI_SERVICE_MESH_11S, len);
- SVCMAP(WMI_TLV_SERVICE_HALF_RATE_QUARTER_RATE_SUPPORT,
- WMI_SERVICE_HALF_RATE_QUARTER_RATE_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_VDEV_RX_FILTER,
- WMI_SERVICE_VDEV_RX_FILTER, len);
- SVCMAP(WMI_TLV_SERVICE_P2P_LISTEN_OFFLOAD_SUPPORT,
- WMI_SERVICE_P2P_LISTEN_OFFLOAD_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_MARK_FIRST_WAKEUP_PACKET,
- WMI_SERVICE_MARK_FIRST_WAKEUP_PACKET, len);
- SVCMAP(WMI_TLV_SERVICE_MULTIPLE_MCAST_FILTER_SET,
- WMI_SERVICE_MULTIPLE_MCAST_FILTER_SET, len);
- SVCMAP(WMI_TLV_SERVICE_HOST_MANAGED_RX_REORDER,
- WMI_SERVICE_HOST_MANAGED_RX_REORDER, len);
- SVCMAP(WMI_TLV_SERVICE_FLASH_RDWR_SUPPORT,
- WMI_SERVICE_FLASH_RDWR_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_WLAN_STATS_REPORT,
- WMI_SERVICE_WLAN_STATS_REPORT, len);
- SVCMAP(WMI_TLV_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT,
- WMI_SERVICE_TX_MSDU_ID_NEW_PARTITION_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_DFS_PHYERR_OFFLOAD,
- WMI_SERVICE_DFS_PHYERR_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_RCPI_SUPPORT,
- WMI_SERVICE_RCPI_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_FW_MEM_DUMP_SUPPORT,
- WMI_SERVICE_FW_MEM_DUMP_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_PEER_STATS_INFO,
- WMI_SERVICE_PEER_STATS_INFO, len);
- SVCMAP(WMI_TLV_SERVICE_REGULATORY_DB,
- WMI_SERVICE_REGULATORY_DB, len);
- SVCMAP(WMI_TLV_SERVICE_11D_OFFLOAD,
- WMI_SERVICE_11D_OFFLOAD, len);
- SVCMAP(WMI_TLV_SERVICE_HW_DATA_FILTERING,
- WMI_SERVICE_HW_DATA_FILTERING, len);
- SVCMAP(WMI_TLV_SERVICE_MULTIPLE_VDEV_RESTART,
- WMI_SERVICE_MULTIPLE_VDEV_RESTART, len);
- SVCMAP(WMI_TLV_SERVICE_PKT_ROUTING,
- WMI_SERVICE_PKT_ROUTING, len);
- SVCMAP(WMI_TLV_SERVICE_CHECK_CAL_VERSION,
- WMI_SERVICE_CHECK_CAL_VERSION, len);
- SVCMAP(WMI_TLV_SERVICE_OFFCHAN_TX_WMI,
- WMI_SERVICE_OFFCHAN_TX_WMI, len);
- SVCMAP(WMI_TLV_SERVICE_8SS_TX_BFEE,
- WMI_SERVICE_8SS_TX_BFEE, len);
- SVCMAP(WMI_TLV_SERVICE_EXTENDED_NSS_SUPPORT,
- WMI_SERVICE_EXTENDED_NSS_SUPPORT, len);
- SVCMAP(WMI_TLV_SERVICE_ACK_TIMEOUT,
- WMI_SERVICE_ACK_TIMEOUT, len);
- SVCMAP(WMI_TLV_SERVICE_PDEV_BSS_CHANNEL_INFO_64,
- WMI_SERVICE_PDEV_BSS_CHANNEL_INFO_64, len);
-};
-
enum {
WMI_SMPS_FORCED_MODE_NONE = 0,
WMI_SMPS_FORCED_MODE_DISABLED,
@@ -2775,6 +2211,8 @@ struct wmi_service_ready_event {
#define WMI_SERVICE_SEGMENT_BM_SIZE32 4 /* 4x u32 = 128 bits */
#define WMI_SERVICE_EXT_BM_SIZE (WMI_SERVICE_SEGMENT_BM_SIZE32 * sizeof(u32))
+#define WMI_AVAIL_SERVICE_BITS_IN_SIZE32 32
+#define WMI_SERVICE_BITS_IN_SIZE32 4
struct wmi_service_ready_ext_event {
u32 default_conc_scan_config_bits;
@@ -5167,7 +4605,7 @@ struct ath11k_wmi_base {
struct completion service_ready;
struct completion unified_ready;
- DECLARE_BITMAP(svc_map, WMI_SERVICE_MAX);
+ DECLARE_BITMAP(svc_map, WMI_MAX_EXT_SERVICE);
wait_queue_head_t tx_credits_wq;
const struct wmi_peer_flags_map *peer_flags;
u32 num_mem_chunks;
There is going to be only one version of WMI TLV. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org> --- drivers/net/wireless/ath/ath11k/core.h | 1 - drivers/net/wireless/ath/ath11k/mac.c | 5 +- drivers/net/wireless/ath/ath11k/wmi.c | 47 ++- drivers/net/wireless/ath/ath11k/wmi.h | 568 +-------------------------------- 4 files changed, 39 insertions(+), 582 deletions(-)