All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction
@ 2019-06-26 12:07 Vasanthakumar Thiagarajan
  2019-06-26 12:07 ` [PATCH 2/4] ath11k/wmi: Clean up few indentations in wmi Vasanthakumar Thiagarajan
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Vasanthakumar Thiagarajan @ 2019-06-26 12:07 UTC (permalink / raw
  To: ath11k

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(-)

diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h
index af5c66f..d4b44f8 100644
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
@@ -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;
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 1a4a333..0787d0d 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -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) {
diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 46a3e0f..9b0c7d4 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -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);
 }
diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
index 779209a..248326e 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -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;
-- 
1.9.1


_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/4] ath11k/wmi: Clean up few indentations in wmi
  2019-06-26 12:07 [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Vasanthakumar Thiagarajan
@ 2019-06-26 12:07 ` Vasanthakumar Thiagarajan
  2019-06-26 12:07 ` [PATCH 3/4] ath11k/wmi: Remove unnecessary type casting Vasanthakumar Thiagarajan
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Vasanthakumar Thiagarajan @ 2019-06-26 12:07 UTC (permalink / raw
  To: ath11k

Also make ath11k_hw_mode_pri_map[] static const.

Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org>
---
 drivers/net/wireless/ath/ath11k/wmi.c | 187 +++++++++++++++-------------------
 1 file changed, 80 insertions(+), 107 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 9b0c7d4..6807ee5 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -102,7 +102,7 @@ struct wmi_tlv_rdy_parse {
 #define PRIMAP(_hw_mode_) \
 	[_hw_mode_] = _hw_mode_##_PRI
 
-static int ath11k_hw_mode_pri_map[] = {
+static const int ath11k_hw_mode_pri_map[] = {
 	PRIMAP(WMI_HOST_HW_MODE_SINGLE),
 	PRIMAP(WMI_HOST_HW_MODE_DBS),
 	PRIMAP(WMI_HOST_HW_MODE_SBS_PASSIVE),
@@ -254,17 +254,18 @@ int ath11k_wmi_cmd_send(struct ath11k_pdev_wmi *wmi, struct sk_buff *skb,
 	return ret;
 }
 
-static int ath11k_pull_service_ready_ext(
-		struct ath11k_pdev_wmi *wmi_handle,
-		struct wmi_service_ready_ext_event *ev,
-		struct ath11k_service_ext_param *param)
+static int ath11k_pull_svc_ready_ext(struct ath11k_pdev_wmi *wmi_handle,
+				     const void *ptr,
+				     struct ath11k_service_ext_param *param)
 {
+	struct wmi_service_ready_ext_event *ev;
+
+	ev = (struct wmi_service_ready_ext_event *)ptr;
 	if (!ev)
 		return -EINVAL;
 
 	/* Move this to host based bitmap */
-	param->default_conc_scan_config_bits =
-		 ev->default_conc_scan_config_bits;
+	param->default_conc_scan_config_bits = ev->default_conc_scan_config_bits;
 	param->default_fw_config_bits =	ev->default_fw_config_bits;
 	param->he_cap_info = ev->he_cap_info;
 	param->mpdu_density = ev->mpdu_density;
@@ -274,14 +275,14 @@ static int ath11k_pull_service_ready_ext(
 	return 0;
 }
 
-static int ath11k_pull_mac_phy_cap_service_ready_ext(
-		struct ath11k_pdev_wmi *wmi_handle,
-		struct wmi_soc_mac_phy_hw_mode_caps *hw_caps,
-		struct wmi_hw_mode_capabilities *wmi_hw_mode_caps,
-		struct wmi_soc_hal_reg_capabilities *soc_hal_reg_caps,
-		struct wmi_mac_phy_capabilities *wmi_mac_phy_caps,
-		u8 hw_mode_id, u8 phy_id,
-		struct ath11k_pdev *pdev)
+static int
+ath11k_pull_mac_phy_cap_svc_ready_ext(struct ath11k_pdev_wmi *wmi_handle,
+				      struct wmi_soc_mac_phy_hw_mode_caps *hw_caps,
+				      struct wmi_hw_mode_capabilities *wmi_hw_mode_caps,
+				      struct wmi_soc_hal_reg_capabilities *hal_reg_caps,
+				      struct wmi_mac_phy_capabilities *wmi_mac_phy_caps,
+				      u8 hw_mode_id, u8 phy_id,
+				      struct ath11k_pdev *pdev)
 {
 	struct wmi_mac_phy_capabilities *mac_phy_caps;
 	struct ath11k_band_cap *cap_band;
@@ -289,7 +290,7 @@ static int ath11k_pull_mac_phy_cap_service_ready_ext(
 	u32 phy_map;
 	u32 hw_idx, phy_idx = 0;
 
-	if (!hw_caps || !wmi_hw_mode_caps || !soc_hal_reg_caps)
+	if (!hw_caps || !wmi_hw_mode_caps || !hal_reg_caps)
 		return -EINVAL;
 
 	for (hw_idx = 0; hw_idx < hw_caps->num_hw_modes; hw_idx++) {
@@ -307,7 +308,7 @@ static int ath11k_pull_mac_phy_cap_service_ready_ext(
 		return -EINVAL;
 
 	phy_idx += phy_id;
-	if (phy_id >= soc_hal_reg_caps->num_phy)
+	if (phy_id >= hal_reg_caps->num_phy)
 		return -EINVAL;
 
 	mac_phy_caps = &wmi_mac_phy_caps[phy_idx];
@@ -371,12 +372,12 @@ static int ath11k_pull_mac_phy_cap_service_ready_ext(
 	return 0;
 }
 
-static int ath11k_pull_reg_cap_svc_rdy_ext(
-		struct ath11k_pdev_wmi *wmi_handle,
-		struct wmi_soc_hal_reg_capabilities *reg_caps,
-		struct wmi_hal_reg_capabilities_ext *wmi_ext_reg_cap,
-		u8 phy_idx,
-		struct ath11k_hal_reg_capabilities_ext *param)
+static int
+ath11k_pull_reg_cap_svc_rdy_ext(struct ath11k_pdev_wmi *wmi_handle,
+				struct wmi_soc_hal_reg_capabilities *reg_caps,
+				struct wmi_hal_reg_capabilities_ext *wmi_ext_reg_cap,
+				u8 phy_idx,
+				struct ath11k_hal_reg_capabilities_ext *param)
 {
 	struct wmi_hal_reg_capabilities_ext *ext_reg_cap;
 
@@ -407,11 +408,10 @@ static int ath11k_pull_service_ready_tlv(struct ath11k_base *ab,
 					 const void *evt_buf,
 					 struct ath11k_targ_cap *cap)
 {
-	struct wmi_service_ready_event *ev;
+	struct wmi_service_ready_event *ev = (struct wmi_service_ready_event *)evt_buf;
 
-	ev = (struct wmi_service_ready_event *)evt_buf;
 	if (!ev) {
-		ath11k_err(ab, "%s: failed by Null Param\n",
+		ath11k_err(ab, "%s: failed by NULL param\n",
 			   __func__);
 		return -EINVAL;
 	}
@@ -2460,7 +2460,7 @@ int ath11k_wmi_pdev_pktlog_disable(struct ath11k *ar)
 	return ret;
 }
 
-static inline void
+static void
 ath11k_fill_band_to_mac_param(struct ath11k_base  *soc,
 			      struct wmi_host_pdev_band_to_mac *band_to_mac)
 {
@@ -2574,7 +2574,7 @@ static int ath11k_init_cmd_send(struct ath11k_pdev_wmi *wmi,
 			      (param->num_band_to_mac * sizeof(*band_to_mac));
 
 	len = sizeof(*cmd) + TLV_HDR_SIZE + sizeof(*cfg) + hw_mode_len +
-		(sizeof(*host_mem_chunks) * WMI_MAX_MEM_REQS);
+	      (sizeof(*host_mem_chunks) * WMI_MAX_MEM_REQS);
 
 	skb = ath11k_wmi_alloc_skb(wmi->wmi_sc, len);
 	if (!skb)
@@ -2878,11 +2878,10 @@ static int ath11k_wmi_tlv_ext_hal_reg_caps(struct ath11k_base *soc,
 	}
 
 	for (i = 0; i < svc_rdy_ext->param.num_phy; i++) {
-		ret = ath11k_pull_reg_cap_svc_rdy_ext
-				(wmi_handle,
-				 svc_rdy_ext->soc_hal_reg_caps,
-				 svc_rdy_ext->ext_hal_reg_caps, i,
-				 &reg_cap);
+		ret = ath11k_pull_reg_cap_svc_rdy_ext(wmi_handle,
+						      svc_rdy_ext->soc_hal_reg_caps,
+						      svc_rdy_ext->ext_hal_reg_caps, i,
+						      &reg_cap);
 		if (ret) {
 			ath11k_warn(soc, "failed to extract reg cap %d\n", i);
 			return ret;
@@ -2900,6 +2899,7 @@ static int ath11k_wmi_tlv_ext_soc_hal_reg_caps_parse(struct ath11k_base *soc,
 {
 	struct ath11k_pdev_wmi *wmi_handle = &soc->wmi_sc.wmi[0];
 	struct wmi_tlv_svc_rdy_ext_parse *svc_rdy_ext = data;
+	u8 hw_mode_id = svc_rdy_ext->pref_hw_mode_caps.hw_mode_id;
 	u32 phy_id_map;
 	int ret;
 
@@ -2910,15 +2910,13 @@ static int ath11k_wmi_tlv_ext_soc_hal_reg_caps_parse(struct ath11k_base *soc,
 	phy_id_map = svc_rdy_ext->pref_hw_mode_caps.phy_id_map;
 
 	while (phy_id_map && soc->num_radios < MAX_RADIOS) {
-		ret = ath11k_pull_mac_phy_cap_service_ready_ext
-			(wmi_handle,
-			 svc_rdy_ext->hw_caps,
-			 svc_rdy_ext->hw_mode_caps,
-			 svc_rdy_ext->soc_hal_reg_caps,
-			 svc_rdy_ext->mac_phy_caps,
-			 svc_rdy_ext->pref_hw_mode_caps.hw_mode_id,
-			 soc->num_radios,
-			 &soc->pdevs[soc->num_radios]);
+		ret = ath11k_pull_mac_phy_cap_svc_ready_ext(wmi_handle,
+							    svc_rdy_ext->hw_caps,
+							    svc_rdy_ext->hw_mode_caps,
+							    svc_rdy_ext->soc_hal_reg_caps,
+							    svc_rdy_ext->mac_phy_caps,
+							    hw_mode_id, soc->num_radios,
+							    &soc->pdevs[soc->num_radios]);
 		if (ret) {
 			ath11k_warn(soc, "failed to extract mac caps, idx :%d\n",
 				    soc->num_radios);
@@ -2943,10 +2941,8 @@ static int ath11k_wmi_tlv_svc_rdy_ext_parse(struct ath11k_base *ab,
 
 	switch (tag) {
 	case WMI_TAG_SERVICE_READY_EXT_EVENT:
-		ret =
-		 ath11k_pull_service_ready_ext(wmi_handle,
-					       (struct wmi_service_ready_ext_event *)ptr,
-					       &svc_rdy_ext->param);
+		ret = ath11k_pull_svc_ready_ext(wmi_handle, ptr,
+						&svc_rdy_ext->param);
 		if (ret) {
 			ath11k_warn(ab, "unable to extract ext params\n");
 			return ret;
@@ -3140,20 +3136,15 @@ static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab,
 	reg_info->reg_dmn_pair = chan_list_event_hdr->domain_code;
 	if (chan_list_event_hdr->status_code == WMI_REG_SET_CC_STATUS_PASS)
 		reg_info->status_code = REG_SET_CC_STATUS_PASS;
-	else if (chan_list_event_hdr->status_code ==
-		 WMI_REG_CURRENT_ALPHA2_NOT_FOUND)
+	else if (chan_list_event_hdr->status_code == WMI_REG_CURRENT_ALPHA2_NOT_FOUND)
 		reg_info->status_code = REG_CURRENT_ALPHA2_NOT_FOUND;
-	else if (chan_list_event_hdr->status_code ==
-		 WMI_REG_INIT_ALPHA2_NOT_FOUND)
+	else if (chan_list_event_hdr->status_code == WMI_REG_INIT_ALPHA2_NOT_FOUND)
 		reg_info->status_code = REG_INIT_ALPHA2_NOT_FOUND;
-	else if (chan_list_event_hdr->status_code ==
-		 WMI_REG_SET_CC_CHANGE_NOT_ALLOWED)
+	else if (chan_list_event_hdr->status_code == WMI_REG_SET_CC_CHANGE_NOT_ALLOWED)
 		reg_info->status_code = REG_SET_CC_CHANGE_NOT_ALLOWED;
-	else if (chan_list_event_hdr->status_code ==
-		 WMI_REG_SET_CC_STATUS_NO_MEMORY)
+	else if (chan_list_event_hdr->status_code == WMI_REG_SET_CC_STATUS_NO_MEMORY)
 		reg_info->status_code = REG_SET_CC_STATUS_NO_MEMORY;
-	else if (chan_list_event_hdr->status_code ==
-		 WMI_REG_SET_CC_STATUS_FAIL)
+	else if (chan_list_event_hdr->status_code == WMI_REG_SET_CC_STATUS_FAIL)
 		reg_info->status_code = REG_SET_CC_STATUS_FAIL;
 
 	reg_info->min_bw_2g = chan_list_event_hdr->min_bw_2g;
@@ -3180,9 +3171,8 @@ static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab,
 						+ sizeof(struct wmi_tlv));
 
 	if (num_2g_reg_rules) {
-		reg_info->reg_rules_2g_ptr =
-			create_reg_rules_from_wmi(num_2g_reg_rules,
-						  wmi_reg_rule);
+		reg_info->reg_rules_2g_ptr = create_reg_rules_from_wmi(num_2g_reg_rules,
+								       wmi_reg_rule);
 		if (!reg_info->reg_rules_2g_ptr) {
 			kfree(tb);
 			ath11k_warn(ab, "Unable to Allocate memory for 2g rules\n");
@@ -3192,9 +3182,8 @@ static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab,
 
 	if (num_5g_reg_rules) {
 		wmi_reg_rule += num_2g_reg_rules;
-		reg_info->reg_rules_5g_ptr =
-			create_reg_rules_from_wmi(num_5g_reg_rules,
-						  wmi_reg_rule);
+		reg_info->reg_rules_5g_ptr = create_reg_rules_from_wmi(num_5g_reg_rules,
+								       wmi_reg_rule);
 		if (!reg_info->reg_rules_5g_ptr) {
 			kfree(tb);
 			ath11k_warn(ab, "Unable to Allocate memory for 5g rules\n");
@@ -3702,7 +3691,6 @@ static int ath11k_pull_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
 
 static int
 ath11k_pull_pdev_bss_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
-				  u32 len,
 				  struct wmi_pdev_bss_chan_info_event *bss_ch_info_ev)
 {
 	const void **tb;
@@ -3741,9 +3729,9 @@ static int ath11k_pull_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
 	return 0;
 }
 
-static int ath11k_pull_vdev_install_key_compl_ev(struct ath11k_base *ab, u8 *evt_buf,
-						 u32 len,
-						 struct wmi_vdev_install_key_complete_arg *install_key_compl)
+static int
+ath11k_pull_vdev_install_key_compl_ev(struct ath11k_base *ab, u8 *evt_buf, u32 len,
+				      struct wmi_vdev_install_key_complete_arg *arg)
 {
 	const void **tb;
 	const struct wmi_vdev_install_key_compl_event *ev;
@@ -3763,11 +3751,11 @@ static int ath11k_pull_vdev_install_key_compl_ev(struct ath11k_base *ab, u8 *evt
 		return -EPROTO;
 	}
 
-	install_key_compl->vdev_id = ev->vdev_id;
-	install_key_compl->macaddr = ev->peer_macaddr.addr;
-	install_key_compl->key_idx = ev->key_idx;
-	install_key_compl->key_flags = ev->key_flags;
-	install_key_compl->status = ev->status;
+	arg->vdev_id = ev->vdev_id;
+	arg->macaddr = ev->peer_macaddr.addr;
+	arg->key_idx = ev->key_idx;
+	arg->key_flags = ev->key_flags;
+	arg->status = ev->status;
 
 	kfree(tb);
 	return 0;
@@ -3879,24 +3867,19 @@ static void ath11k_wmi_pull_pdev_stats_rx(const struct wmi_pdev_stats_rx *src,
 	dst->num_tx_not_acked = src->num_tx_not_acked;
 
 	for (i = 0; i < ARRAY_SIZE(src->num_tx_frames); i++)
-		dst->num_tx_frames[i] =
-			src->num_tx_frames[i];
+		dst->num_tx_frames[i] = src->num_tx_frames[i];
 
 	for (i = 0; i < ARRAY_SIZE(src->num_tx_frames_retries); i++)
-		dst->num_tx_frames_retries[i] =
-			src->num_tx_frames_retries[i];
+		dst->num_tx_frames_retries[i] = src->num_tx_frames_retries[i];
 
 	for (i = 0; i < ARRAY_SIZE(src->num_tx_frames_failures); i++)
-		dst->num_tx_frames_failures[i] =
-			src->num_tx_frames_failures[i];
+		dst->num_tx_frames_failures[i] = src->num_tx_frames_failures[i];
 
 	for (i = 0; i < ARRAY_SIZE(src->tx_rate_history); i++)
-		dst->tx_rate_history[i] =
-			src->tx_rate_history[i];
+		dst->tx_rate_history[i] = src->tx_rate_history[i];
 
 	for (i = 0; i < ARRAY_SIZE(src->beacon_rssi_history); i++)
-		dst->beacon_rssi_history[i] =
-			src->beacon_rssi_history[i];
+		dst->beacon_rssi_history[i] = src->beacon_rssi_history[i];
 }
 
 static void
@@ -4399,14 +4382,14 @@ static size_t ath11k_wmi_fw_stats_num_bcn(struct list_head *head)
 	struct ath11k_vif *arvif = ath11k_mac_get_arvif(ar, bcn->vdev_id);
 	u8 *vdev_macaddr;
 
-	if (arvif) {
-		vdev_macaddr = arvif->vif->addr;
-	} else {
+	if (!arvif) {
 		ath11k_warn(ar->ab, "invalid vdev id %d in bcn stats",
 			    bcn->vdev_id);
 		return;
 	}
 
+	vdev_macaddr = arvif->vif->addr;
+
 	len += scnprintf(buf + len, buf_len - len, "%30s %u\n",
 			 "VDEV ID", bcn->vdev_id);
 	len += scnprintf(buf + len, buf_len - len, "%30s %pM\n",
@@ -4459,9 +4442,8 @@ void ath11k_wmi_fw_stats_fill(struct ath11k *ar,
 		len += scnprintf(buf + len, buf_len - len, "%30s\n\n",
 				 "=================");
 
-		list_for_each_entry(vdev, &fw_stats->vdevs, list) {
+		list_for_each_entry(vdev, &fw_stats->vdevs, list)
 			ath11k_wmi_fw_vdev_stats_fill(ar, vdev, buf, &len);
-		}
 	}
 
 	if (stats_id == WMI_REQUEST_BCN_STAT) {
@@ -4473,9 +4455,8 @@ void ath11k_wmi_fw_stats_fill(struct ath11k *ar,
 		len += scnprintf(buf + len, buf_len - len, "%30s\n\n",
 				 "===================");
 
-		list_for_each_entry(bcn, &fw_stats->bcn, list) {
+		list_for_each_entry(bcn, &fw_stats->bcn, list)
 			ath11k_wmi_fw_bcn_stats_fill(ar, bcn, buf, &len);
-		}
 	}
 
 	if (stats_id & WMI_REQUEST_PEER_STAT) {
@@ -4486,9 +4467,8 @@ void ath11k_wmi_fw_stats_fill(struct ath11k *ar,
 		len += scnprintf(buf + len, buf_len - len, "%30s\n\n",
 				 "=================");
 
-		list_for_each_entry(peer, &fw_stats->peers, list) {
+		list_for_each_entry(peer, &fw_stats->peers, list)
 			ath11k_wmi_fw_peer_stats_fill(peer, buf, &len);
-		}
 	}
 
 	if (stats_id & WMI_REQUEST_PEER_EXTD_STAT) {
@@ -4500,9 +4480,8 @@ void ath11k_wmi_fw_stats_fill(struct ath11k *ar,
 		len += scnprintf(buf + len, buf_len - len, "%30s\n\n",
 				 "======================");
 
-		list_for_each_entry(peer_extd, &fw_stats->peers_extd, list) {
+		list_for_each_entry(peer_extd, &fw_stats->peers_extd, list)
 			ath11k_wmi_fw_peer_extd_stats_fill(peer_extd, buf, &len);
-		}
 	}
 
 unlock:
@@ -4970,8 +4949,7 @@ static void ath11k_scan_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	struct ath11k *ar;
 	struct wmi_scan_event scan_ev = {0};
 
-	if (ath11k_pull_scan_ev(ab, evt_buf, len,
-				&scan_ev) != 0) {
+	if (ath11k_pull_scan_ev(ab, evt_buf, len, &scan_ev) != 0) {
 		ath11k_warn(ab, "failed to extract scan event");
 		return;
 	}
@@ -5000,8 +4978,7 @@ static void ath11k_scan_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 
 	ath11k_dbg(ab, ATH11K_DBG_WMI,
 		   "scan event %s type %d reason %d freq %d req_id %d scan_id %d vdev_id %d state %s (%d)\n",
-		   ath11k_wmi_event_scan_type_str(scan_ev.event_type,
-						  scan_ev.reason),
+		   ath11k_wmi_event_scan_type_str(scan_ev.event_type, scan_ev.reason),
 		   scan_ev.event_type, scan_ev.reason, scan_ev.channel_freq,
 		   scan_ev.scan_req_id, scan_ev.scan_id, scan_ev.vdev_id,
 		   ath11k_scan_state_str(ar->scan.state), ar->scan.state);
@@ -5306,8 +5283,7 @@ static void ath11k_vdev_install_key_compl_event(struct ath11k_base *ab, u8 *evt_
 
 	ar->install_key_status = 0;
 
-	if (install_key_compl.status !=
-		WMI_VDEV_INSTALL_KEY_COMPL_STATUS_SUCCESS) {
+	if (install_key_compl.status != WMI_VDEV_INSTALL_KEY_COMPL_STATUS_SUCCESS) {
 		ath11k_warn(ab, "install key failed for %pM status %d\n",
 			    install_key_compl.macaddr, install_key_compl.status);
 		ar->install_key_status = install_key_compl.status;
@@ -5697,7 +5673,7 @@ static int ath11k_connect_pdev_htc_service(struct ath11k_base *sc,
 	int ret;
 	int i;
 
-	arg_len = (sizeof(u32) * ut_cmd.num_args);
+	arg_len = sizeof(u32) * ut_cmd.num_args;
 	buf_len = sizeof(ut_cmd) + arg_len + TLV_HDR_SIZE;
 
 	skb = ath11k_wmi_alloc_skb(wmi->wmi_sc, buf_len);
@@ -5705,10 +5681,8 @@ static int ath11k_connect_pdev_htc_service(struct ath11k_base *sc,
 		return -ENOMEM;
 
 	cmd = (struct wmi_unit_test_cmd *)skb->data;
-	cmd->tlv_header =
-		FIELD_PREP(WMI_TLV_TAG,
-			   WMI_TAG_UNIT_TEST_CMD) |
-		FIELD_PREP(WMI_TLV_LEN, sizeof(ut_cmd) - TLV_HDR_SIZE);
+	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_UNIT_TEST_CMD) |
+			  FIELD_PREP(WMI_TLV_LEN, sizeof(ut_cmd) - TLV_HDR_SIZE);
 
 	cmd->vdev_id = ut_cmd.vdev_id;
 	cmd->module_id = ut_cmd.module_id;
@@ -5727,15 +5701,14 @@ static int ath11k_connect_pdev_htc_service(struct ath11k_base *sc,
 	for (i = 0; i < ut_cmd.num_args; i++)
 		ut_cmd_args[i] = test_args[i];
 
-	ret = ath11k_wmi_cmd_send(wmi, skb,
-				  WMI_UNIT_TEST_CMDID);
+	ret = ath11k_wmi_cmd_send(wmi, skb, WMI_UNIT_TEST_CMDID);
 
 	if (ret) {
-		ath11k_warn(ar->ab,
-			    "failed to send WMI_UNIT_TEST CMD :%d\n",
+		ath11k_warn(ar->ab, "failed to send WMI_UNIT_TEST CMD :%d\n",
 			    ret);
 		dev_kfree_skb(skb);
 	}
+
 	ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
 		   "WMI unit test : module %d vdev %d n_args %d token %d\n",
 		   cmd->module_id, cmd->vdev_id, cmd->num_args,
-- 
1.9.1


_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/4] ath11k/wmi: Remove unnecessary type casting
  2019-06-26 12:07 [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Vasanthakumar Thiagarajan
  2019-06-26 12:07 ` [PATCH 2/4] ath11k/wmi: Clean up few indentations in wmi Vasanthakumar Thiagarajan
@ 2019-06-26 12:07 ` Vasanthakumar Thiagarajan
  2019-06-26 12:07 ` [PATCH 4/4] ath11k/wmi: Clean up function parameter list in wmi event handlers Vasanthakumar Thiagarajan
  2019-06-27 11:13 ` [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Kalle Valo
  3 siblings, 0 replies; 5+ messages in thread
From: Vasanthakumar Thiagarajan @ 2019-06-26 12:07 UTC (permalink / raw
  To: ath11k

- Remove unnecessary type cast of void *
- Remove type casting in ether_addr_copy() and use u8 *mac_addr.addri
  directly.
- Remove the type cast in ath11k_wmi_vdev_install_key() with memcpy().

Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org>
---
 drivers/net/wireless/ath/ath11k/wmi.c | 58 +++++++++++++++++------------------
 1 file changed, 29 insertions(+), 29 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 6807ee5..713f8b3 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -604,7 +604,7 @@ int ath11k_wmi_vdev_create(struct ath11k *ar, u8 *macaddr,
 	cmd->vdev_subtype = param->subtype;
 	cmd->num_cfg_txrx_streams = WMI_NUM_SUPPORTED_BAND_MAX;
 	cmd->pdev_id = param->pdev_id;
-	ether_addr_copy((u8 *)&cmd->vdev_macaddr, macaddr);
+	ether_addr_copy(cmd->vdev_macaddr.addr, macaddr);
 
 	ptr = skb->data + sizeof(*cmd);
 	len = WMI_NUM_SUPPORTED_BAND_MAX * sizeof(*txrx_streams);
@@ -614,7 +614,7 @@ int ath11k_wmi_vdev_create(struct ath11k *ar, u8 *macaddr,
 		      FIELD_PREP(WMI_TLV_LEN, len);
 
 	ptr += TLV_HDR_SIZE;
-	txrx_streams = (void *)ptr;
+	txrx_streams = ptr;
 	len = sizeof(*txrx_streams);
 	txrx_streams->tlv_header =
 		FIELD_PREP(WMI_TLV_TAG, WMI_TAG_VDEV_TXRX_STREAMS) |
@@ -822,8 +822,8 @@ int ath11k_wmi_vdev_start(struct ath11k *ar, struct wmi_vdev_start_req_arg *arg,
 
 	cmd->flags |= WMI_VDEV_START_LDPC_RX_ENABLED;
 
-	ptr = (void *)skb->data + sizeof(*cmd);
-	chan = (struct wmi_channel *)ptr;
+	ptr = skb->data + sizeof(*cmd);
+	chan = ptr;
 
 	ath11k_wmi_put_wmi_channel(chan, arg);
 
@@ -910,7 +910,7 @@ int ath11k_wmi_send_peer_create_cmd(struct ath11k *ar,
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_PEER_CREATE_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, param->peer_addr);
+	ether_addr_copy(cmd->peer_macaddr.addr, param->peer_addr);
 	cmd->peer_type = param->peer_type;
 	cmd->vdev_id = param->vdev_id;
 
@@ -943,7 +943,7 @@ int ath11k_wmi_send_peer_delete_cmd(struct ath11k *ar,
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_PEER_DELETE_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, peer_addr);
+	ether_addr_copy(cmd->peer_macaddr.addr, peer_addr);
 	cmd->vdev_id = vdev_id;
 
 	ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
@@ -1049,7 +1049,7 @@ int ath11k_wmi_send_peer_flush_tids_cmd(struct ath11k *ar,
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_PEER_FLUSH_TIDS_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, peer_addr);
+	ether_addr_copy(cmd->peer_macaddr.addr, peer_addr);
 	cmd->peer_tid_bitmap = param->peer_tid_bitmap;
 	cmd->vdev_id = param->vdev_id;
 
@@ -1086,7 +1086,7 @@ int ath11k_wmi_peer_rx_reorder_queue_setup(struct ath11k *ar,
 				     WMI_TAG_REORDER_QUEUE_SETUP_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, (u8 *)addr);
+	ether_addr_copy(cmd->peer_macaddr.addr, addr);
 	cmd->vdev_id = vdev_id;
 	cmd->tid = tid;
 	cmd->queue_ptr_lo = lower_32_bits(paddr);
@@ -1128,7 +1128,7 @@ int ath11k_wmi_peer_rx_reorder_queue_setup(struct ath11k *ar,
 				     WMI_TAG_REORDER_QUEUE_REMOVE_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, param->peer_macaddr);
+	ether_addr_copy(cmd->peer_macaddr.addr, param->peer_macaddr);
 	cmd->vdev_id = param->vdev_id;
 	cmd->tid_mask = param->peer_tid_bitmap;
 
@@ -1294,7 +1294,7 @@ int ath11k_wmi_send_set_ap_ps_param_cmd(struct ath11k *ar, u8 *peer_addr,
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
 	cmd->vdev_id = param->vdev_id;
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, peer_addr);
+	ether_addr_copy(cmd->peer_macaddr.addr, peer_addr);
 	cmd->param = param->param;
 	cmd->value = param->value;
 
@@ -1552,7 +1552,7 @@ int ath11k_wmi_vdev_install_key(struct ath11k *ar,
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_VDEV_INSTALL_KEY_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 	cmd->vdev_id = arg->vdev_id;
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, arg->macaddr);
+	ether_addr_copy(cmd->peer_macaddr.addr, arg->macaddr);
 	cmd->key_idx = arg->key_idx;
 	cmd->key_flags = arg->key_flags;
 	cmd->key_cipher = arg->key_cipher;
@@ -1561,7 +1561,7 @@ int ath11k_wmi_vdev_install_key(struct ath11k *ar,
 	cmd->key_rxmic_len = arg->key_rxmic_len;
 
 	if (arg->key_rsc_counter)
-		memcpy((u8 *)&cmd->key_rsc_counter, (u8 *)&arg->key_rsc_counter,
+		memcpy(&cmd->key_rsc_counter, &arg->key_rsc_counter,
 		       sizeof(struct wmi_key_seq_counter));
 
 	tlv = (struct wmi_tlv *)(skb->data + sizeof(*cmd));
@@ -1692,7 +1692,7 @@ int ath11k_wmi_send_peer_assoc_cmd(struct ath11k *ar,
 
 	ptr = skb->data;
 
-	cmd = (struct wmi_peer_assoc_complete_cmd *)ptr;
+	cmd = ptr;
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG,
 				     WMI_TAG_PEER_ASSOC_COMPLETE_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
@@ -1704,7 +1704,7 @@ int ath11k_wmi_send_peer_assoc_cmd(struct ath11k *ar,
 
 	ath11k_wmi_copy_peer_flags(cmd, param);
 
-	ether_addr_copy((u8 *)&cmd->peer_macaddr, param->peer_mac);
+	ether_addr_copy(cmd->peer_macaddr.addr, param->peer_mac);
 
 	cmd->peer_rate_caps = param->peer_rate_caps;
 	cmd->peer_caps = param->peer_caps;
@@ -1752,7 +1752,7 @@ int ath11k_wmi_send_peer_assoc_cmd(struct ath11k *ar,
 	/* VHT Rates */
 	ptr += peer_ht_rates_align;
 
-	mcs = (struct wmi_vht_rate_set *)ptr;
+	mcs = ptr;
 
 	mcs->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_VHT_RATE_SET) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*mcs) - TLV_HDR_SIZE);
@@ -1784,7 +1784,7 @@ int ath11k_wmi_send_peer_assoc_cmd(struct ath11k *ar,
 
 	/* Loop through the HE rate set */
 	for (i = 0; i < param->peer_he_mcs_count; i++) {
-		he_mcs = (struct wmi_he_rate_set *)ptr;
+		he_mcs = ptr;
 		he_mcs->tlv_header = FIELD_PREP(WMI_TLV_TAG,
 						WMI_TAG_HE_RATE_SET) |
 				     FIELD_PREP(WMI_TLV_LEN,
@@ -1949,7 +1949,7 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
 
 	ptr = skb->data;
 
-	cmd = (struct wmi_start_scan_cmd *)ptr;
+	cmd = ptr;
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_START_SCAN_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
@@ -2001,7 +2001,7 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
 	ptr += TLV_HDR_SIZE;
 
 	if (params->num_ssids) {
-		ssid = (struct wmi_ssid *)ptr;
+		ssid = ptr;
 		for (i = 0; i < params->num_ssids; ++i) {
 			ssid->ssid_len = params->ssid[i].length;
 			memcpy(ssid->ssid, params->ssid[i].ssid,
@@ -2017,12 +2017,12 @@ int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
 		      FIELD_PREP(WMI_TLV_LEN, len);
 
 	ptr += TLV_HDR_SIZE;
-	bssid = (struct wmi_mac_addr *)ptr;
+	bssid = ptr;
 
 	if (params->num_bssid) {
 		for (i = 0; i < params->num_bssid; ++i) {
-			ether_addr_copy((u8 *)bssid,
-					(u8 *)&params->bssid_list[i]);
+			ether_addr_copy(bssid->addr,
+					params->bssid_list[i].addr);
 			bssid++;
 		}
 	}
@@ -2139,7 +2139,7 @@ int ath11k_wmi_send_scan_chan_list_cmd(struct ath11k *ar,
 	tchan_info = &chan_list->ch_param[0];
 
 	for (i = 0; i < chan_list->nallchans; ++i) {
-		chan_info = (struct wmi_channel *)ptr;
+		chan_info = ptr;
 		memset(chan_info, 0, sizeof(*chan_info));
 		len = sizeof(*chan_info);
 		chan_info->tlv_header = FIELD_PREP(WMI_TLV_TAG,
@@ -2331,7 +2331,7 @@ int ath11k_wmi_pdev_peer_pktlog_filter(struct ath11k *ar, u8 *addr, u8 enable)
 		      FIELD_PREP(WMI_TLV_LEN, 0);
 
 	ptr += TLV_HDR_SIZE;
-	info = (struct wmi_pdev_pktlog_filter_info *)ptr;
+	info = ptr;
 
 	ether_addr_copy(info->peer_macaddr.addr, addr);
 	info->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_PDEV_PEER_PKTLOG_FILTER_INFO) |
@@ -2586,7 +2586,7 @@ static int ath11k_init_cmd_send(struct ath11k_pdev_wmi *wmi,
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE);
 
 	ptr = skb->data + sizeof(*cmd);
-	cfg = (struct wmi_resource_config *)ptr;
+	cfg = ptr;
 
 	ath11k_wmi_copy_resource_config(cfg, param->res_cfg);
 
@@ -2594,7 +2594,7 @@ static int ath11k_init_cmd_send(struct ath11k_pdev_wmi *wmi,
 			  FIELD_PREP(WMI_TLV_LEN, sizeof(*cfg) - TLV_HDR_SIZE);
 
 	ptr += sizeof(*cfg);
-	host_mem_chunks = (struct wlan_host_mem_chunk *)(ptr + TLV_HDR_SIZE);
+	host_mem_chunks = ptr + TLV_HDR_SIZE;
 	len = sizeof(struct wlan_host_mem_chunk);
 
 	for (idx = 0; idx < param->num_mem_chunks; ++idx) {
@@ -3221,8 +3221,8 @@ static int ath11k_pull_peer_del_resp_ev(struct ath11k_base *ab, u8 *evt_buf, u32
 	memset(peer_del_resp, 0, sizeof(*peer_del_resp));
 
 	peer_del_resp->vdev_id = ev->vdev_id;
-	ether_addr_copy((u8 *)&peer_del_resp->peer_macaddr,
-			(u8 *)&ev->peer_macaddr);
+	ether_addr_copy(peer_del_resp->peer_macaddr.addr,
+			ev->peer_macaddr.addr);
 
 	kfree(tb);
 	return 0;
@@ -4631,7 +4631,7 @@ static int ath11k_wmi_tlv_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len,
 		ab->wlan_init_status = fixed_param->status;
 		rdy_parse->num_extra_mac_addr = fixed_param->num_extra_mac_addr;
 
-		ether_addr_copy(ab->mac_addr, (u8 *)&fixed_param->mac_addr);
+		ether_addr_copy(ab->mac_addr, fixed_param->mac_addr.addr);
 		ab->wmi_ready = true;
 		break;
 	case WMI_TAG_ARRAY_FIXED_STRUCT:
@@ -4643,7 +4643,7 @@ static int ath11k_wmi_tlv_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len,
 
 		for (i = 0; i < ab->num_radios; i++) {
 			pdev = &ab->pdevs[i];
-			ether_addr_copy(pdev->mac_addr, (u8 *)&addr_list[i]);
+			ether_addr_copy(pdev->mac_addr, addr_list[i].addr);
 		}
 		ab->pdevs_macaddr_valid = true;
 		break;
-- 
1.9.1


_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 4/4] ath11k/wmi: Clean up function parameter list in wmi event handlers
  2019-06-26 12:07 [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Vasanthakumar Thiagarajan
  2019-06-26 12:07 ` [PATCH 2/4] ath11k/wmi: Clean up few indentations in wmi Vasanthakumar Thiagarajan
  2019-06-26 12:07 ` [PATCH 3/4] ath11k/wmi: Remove unnecessary type casting Vasanthakumar Thiagarajan
@ 2019-06-26 12:07 ` Vasanthakumar Thiagarajan
  2019-06-27 11:13 ` [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Kalle Valo
  3 siblings, 0 replies; 5+ messages in thread
From: Vasanthakumar Thiagarajan @ 2019-06-26 12:07 UTC (permalink / raw
  To: ath11k

Instead of passing skb->data and skb->len to the wmi event handlers
pass skb itself and retrieve data and len from inside the handlers from
skb.

Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org>
---
 drivers/net/wireless/ath/ath11k/debug.c |   4 +-
 drivers/net/wireless/ath/ath11k/debug.h |   7 +-
 drivers/net/wireless/ath/ath11k/wmi.c   | 212 +++++++++++++++-----------------
 drivers/net/wireless/ath/ath11k/wmi.h   |   2 +-
 4 files changed, 103 insertions(+), 122 deletions(-)

diff --git a/drivers/net/wireless/ath/ath11k/debug.c b/drivers/net/wireless/ath/ath11k/debug.c
index 6aa260c..76cbd22 100644
--- a/drivers/net/wireless/ath/ath11k/debug.c
+++ b/drivers/net/wireless/ath/ath11k/debug.c
@@ -166,7 +166,7 @@ static void ath11k_debug_fw_stats_reset(struct ath11k *ar)
 	spin_unlock_bh(&ar->data_lock);
 }
 
-void ath11k_debug_fw_stats_process(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+void ath11k_debug_fw_stats_process(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct ath11k_fw_stats stats = {};
 	struct ath11k *ar;
@@ -184,7 +184,7 @@ void ath11k_debug_fw_stats_process(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	INIT_LIST_HEAD(&stats.bcn);
 	INIT_LIST_HEAD(&stats.peers_extd);
 
-	ret = ath11k_wmi_pull_fw_stats(ab, evt_buf, len, &stats);
+	ret = ath11k_wmi_pull_fw_stats(ab, skb, &stats);
 	if (ret) {
 		ath11k_warn(ab, "failed to pull fw stats: %d\n", ret);
 		goto free;
diff --git a/drivers/net/wireless/ath/ath11k/debug.h b/drivers/net/wireless/ath/ath11k/debug.h
index d0c69c4..e73a4f7 100644
--- a/drivers/net/wireless/ath/ath11k/debug.h
+++ b/drivers/net/wireless/ath/ath11k/debug.h
@@ -136,8 +136,7 @@ static inline void ath11k_dbg_dump(struct ath11k_base *ab,
 void ath11k_debug_unregister(struct ath11k *ar);
 void ath11k_dbg_htt_ext_stats_handler(struct ath11k_base *ab,
 				      struct sk_buff *skb);
-void ath11k_debug_fw_stats_process(struct ath11k_base *ab, u8 *evt_buf,
-				   u32 len);
+void ath11k_debug_fw_stats_process(struct ath11k_base *ab, struct sk_buff *skb);
 
 void ath11k_debug_fw_stats_init(struct ath11k *ar);
 int ath11k_dbg_htt_stats_req(struct ath11k *ar);
@@ -191,8 +190,8 @@ static inline void ath11k_dbg_htt_ext_stats_handler(struct ath11k_base *ab,
 {
 }
 
-static inline void ath11k_debug_fw_stats_process(struct ath11k_base *ab, u8 *evt_buf,
-						 u32 len)
+static inline void ath11k_debug_fw_stats_process(struct ath11k_base *ab,
+						 struct sk_buff *skb)
 {
 }
 
diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 713f8b3..1de2299 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -258,9 +258,8 @@ static int ath11k_pull_svc_ready_ext(struct ath11k_pdev_wmi *wmi_handle,
 				     const void *ptr,
 				     struct ath11k_service_ext_param *param)
 {
-	struct wmi_service_ready_ext_event *ev;
+	const struct wmi_service_ready_ext_event *ev = ptr;
 
-	ev = (struct wmi_service_ready_ext_event *)ptr;
 	if (!ev)
 		return -EINVAL;
 
@@ -408,7 +407,7 @@ static int ath11k_pull_service_ready_tlv(struct ath11k_base *ab,
 					 const void *evt_buf,
 					 struct ath11k_targ_cap *cap)
 {
-	struct wmi_service_ready_event *ev = (struct wmi_service_ready_event *)evt_buf;
+	const struct wmi_service_ready_event *ev = evt_buf;
 
 	if (!ev) {
 		ath11k_err(ab, "%s: failed by NULL param\n",
@@ -488,12 +487,12 @@ static int ath11k_wmi_tlv_svc_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len
 	return 0;
 }
 
-static int ath11k_service_ready_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static int ath11k_service_ready_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_tlv_svc_ready_parse svc_ready = { };
 	int ret;
 
-	ret = ath11k_wmi_tlv_iter(ab, evt_buf, len,
+	ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len,
 				  ath11k_wmi_tlv_svc_rdy_parse,
 				  &svc_ready);
 	if (ret) {
@@ -1360,7 +1359,7 @@ int ath11k_send_crash_inject_cmd(struct ath11k_pdev_wmi *wmi_handle,
 	if (!skb)
 		return -ENOMEM;
 
-	cmd = (void *)skb->data;
+	cmd = (struct wmi_force_fw_hang_cmd *)skb->data;
 	cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_FORCE_FW_HANG_CMD) |
 			  FIELD_PREP(WMI_TLV_LEN, len - TLV_HDR_SIZE);
 
@@ -2324,7 +2323,7 @@ int ath11k_wmi_pdev_peer_pktlog_filter(struct ath11k *ar, u8 *addr, u8 enable)
 	cmd->num_mac = 1;
 	cmd->enable = enable;
 
-	ptr = (void *)skb->data + sizeof(*cmd);
+	ptr = skb->data + sizeof(*cmd);
 
 	tlv = ptr;
 	tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_STRUCT) |
@@ -3000,12 +2999,12 @@ static int ath11k_wmi_tlv_svc_rdy_ext_parse(struct ath11k_base *ab,
 }
 
 static int ath11k_service_ready_ext_event(struct ath11k_base *ab,
-					  u8 *evt_buf, u32 len)
+					  struct sk_buff *skb)
 {
 	struct wmi_tlv_svc_rdy_ext_parse svc_rdy_ext = { };
 	int ret;
 
-	ret = ath11k_wmi_tlv_iter(ab, evt_buf, len,
+	ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len,
 				  ath11k_wmi_tlv_svc_rdy_ext_parse,
 				  &svc_rdy_ext);
 	if (ret) {
@@ -3016,14 +3015,14 @@ static int ath11k_service_ready_ext_event(struct ath11k_base *ab,
 	return 0;
 }
 
-static int ath11k_pull_vdev_start_resp_tlv(struct ath11k_base *ab, u8 *evt_buf, u32 len,
+static int ath11k_pull_vdev_start_resp_tlv(struct ath11k_base *ab, struct sk_buff *skb,
 					   struct wmi_vdev_start_resp_event *vdev_rsp)
 {
 	const void **tb;
 	const struct wmi_vdev_start_resp_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3091,9 +3090,8 @@ static int ath11k_pull_vdev_start_resp_tlv(struct ath11k_base *ab, u8 *evt_buf,
 }
 
 static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab,
-					       u8 *evt_buf,
-					       struct cur_regulatory_info *reg_info,
-					       u32 len)
+					       struct sk_buff *skb,
+					       struct cur_regulatory_info *reg_info)
 {
 	const void **tb;
 	const struct wmi_reg_chan_list_cc_event *chan_list_event_hdr;
@@ -3103,7 +3101,7 @@ static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab,
 
 	ath11k_dbg(ab, ATH11K_DBG_WMI, "processing regulatory channel list\n");
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3197,14 +3195,14 @@ static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab,
 	return 0;
 }
 
-static int ath11k_pull_peer_del_resp_ev(struct ath11k_base *ab, u8 *evt_buf, u32 len,
+static int ath11k_pull_peer_del_resp_ev(struct ath11k_base *ab, struct sk_buff *skb,
 					struct wmi_peer_delete_resp_event *peer_del_resp)
 {
 	const void **tb;
 	const struct wmi_peer_delete_resp_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3257,14 +3255,14 @@ static int ath11k_pull_bcn_tx_status_ev(struct ath11k_base *ab, void *evt_buf,
 	return 0;
 }
 
-static int ath11k_pull_vdev_stopped_param_tlv(struct ath11k_base *ab, u8 *evt_buf,
-					      u32 len, u32 *vdev_id)
+static int ath11k_pull_vdev_stopped_param_tlv(struct ath11k_base *ab, struct sk_buff *skb,
+					      u32 *vdev_id)
 {
 	const void **tb;
 	const struct wmi_vdev_stopped_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3372,14 +3370,14 @@ static int wmi_process_mgmt_tx_comp(struct ath11k *ar, u32 desc_id,
 }
 
 static int ath11k_pull_mgmt_tx_compl_param_tlv(struct ath11k_base *ab,
-					       u8 *evt_buf, u32 len,
+					       struct sk_buff *skb,
 					       struct wmi_mgmt_tx_compl_event *param)
 {
 	const void **tb;
 	const struct wmi_mgmt_tx_compl_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3543,14 +3541,14 @@ static void ath11k_wmi_event_scan_foreign_chan(struct ath11k *ar, u32 freq)
 	}
 }
 
-static int ath11k_pull_scan_ev(struct ath11k_base *ab, u8 *evt_buf,
-			       u32 len, struct wmi_scan_event *scan_evt_param)
+static int ath11k_pull_scan_ev(struct ath11k_base *ab, struct sk_buff *skb,
+			       struct wmi_scan_event *scan_evt_param)
 {
 	const void **tb;
 	const struct wmi_scan_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3576,14 +3574,14 @@ static int ath11k_pull_scan_ev(struct ath11k_base *ab, u8 *evt_buf,
 	return 0;
 }
 
-static int ath11k_pull_peer_sta_kickout_ev(struct ath11k_base *ab, u8 *evt_buf,
-					   u32 len, struct wmi_peer_sta_kickout_arg *arg)
+static int ath11k_pull_peer_sta_kickout_ev(struct ath11k_base *ab, struct sk_buff *skb,
+					   struct wmi_peer_sta_kickout_arg *arg)
 {
 	const void **tb;
 	const struct wmi_peer_sta_kickout_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3603,14 +3601,14 @@ static int ath11k_pull_peer_sta_kickout_ev(struct ath11k_base *ab, u8 *evt_buf,
 	return 0;
 }
 
-static int ath11k_pull_roam_ev(struct ath11k_base *ab, u8 *evt_buf,
-			       u32 len, struct wmi_roam_event *roam_ev)
+static int ath11k_pull_roam_ev(struct ath11k_base *ab, struct sk_buff *skb,
+			       struct wmi_roam_event *roam_ev)
 {
 	const void **tb;
 	const struct wmi_roam_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3690,14 +3688,14 @@ static int ath11k_pull_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
 }
 
 static int
-ath11k_pull_pdev_bss_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
+ath11k_pull_pdev_bss_chan_info_ev(struct ath11k_base *ab, struct sk_buff *skb,
 				  struct wmi_pdev_bss_chan_info_event *bss_ch_info_ev)
 {
 	const void **tb;
 	const struct wmi_pdev_bss_chan_info_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3730,14 +3728,14 @@ static int ath11k_pull_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
 }
 
 static int
-ath11k_pull_vdev_install_key_compl_ev(struct ath11k_base *ab, u8 *evt_buf, u32 len,
+ath11k_pull_vdev_install_key_compl_ev(struct ath11k_base *ab, struct sk_buff *skb,
 				      struct wmi_vdev_install_key_complete_arg *arg)
 {
 	const void **tb;
 	const struct wmi_vdev_install_key_compl_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3761,15 +3759,14 @@ static int ath11k_pull_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf,
 	return 0;
 }
 
-static int ath11k_pull_peer_assoc_conf_ev(struct ath11k_base *ab, u8 *evt_buf,
-					  u32 len,
+static int ath11k_pull_peer_assoc_conf_ev(struct ath11k_base *ab, struct sk_buff *skb,
 					  struct wmi_peer_assoc_conf_arg *peer_assoc_conf)
 {
 	const void **tb;
 	const struct wmi_peer_assoc_conf_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -3914,15 +3911,16 @@ static void ath11k_wmi_pull_pdev_stats_rx(const struct wmi_pdev_stats_rx *src,
 	dst->rx_mc_bc_cnt = src->rx_mc_bc_cnt;
 }
 
-int ath11k_wmi_pull_fw_stats(struct ath11k_base *ab, u8 *evt_buf, u32 len,
+int ath11k_wmi_pull_fw_stats(struct ath11k_base *ab, struct sk_buff *skb,
 			     struct ath11k_fw_stats *stats)
 {
 	const void **tb;
 	const struct wmi_stats_event *ev;
 	const void *data;
 	int i, ret;
+	u32 len = skb->len;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -4510,7 +4508,7 @@ static bool ath11k_reg_is_world_alpha(char *alpha)
 	return alpha[0] == '0' && alpha[1] == '0';
 }
 
-static int ath11k_reg_chan_list_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static int ath11k_reg_chan_list_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct cur_regulatory_info *reg_info = NULL;
 	struct ieee80211_regdomain *regd = NULL;
@@ -4524,7 +4522,7 @@ static int ath11k_reg_chan_list_event(struct ath11k_base *ab, u8 *evt_buf, u32 l
 		goto fallback;
 	}
 
-	ret = ath11k_pull_reg_chan_list_update_ev(ab, evt_buf, reg_info, len);
+	ret = ath11k_pull_reg_chan_list_update_ev(ab, skb, reg_info);
 	if (ret) {
 		ath11k_warn(ab, "failed to extract regulatory info from received event\n");
 		goto fallback;
@@ -4654,12 +4652,12 @@ static int ath11k_wmi_tlv_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len,
 	return 0;
 }
 
-static int ath11k_ready_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static int ath11k_ready_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_tlv_rdy_parse rdy_parse = { };
 	int ret;
 
-	ret = ath11k_wmi_tlv_iter(ab, evt_buf, len,
+	ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len,
 				  ath11k_wmi_tlv_rdy_parse, &rdy_parse);
 	if (ret) {
 		ath11k_warn(ab, "failed to parse tlv %d\n", ret);
@@ -4670,12 +4668,11 @@ static int ath11k_ready_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	return 0;
 }
 
-static void ath11k_peer_delete_resp_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_peer_delete_resp_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_peer_delete_resp_event peer_del_resp;
 
-	if (ath11k_pull_peer_del_resp_ev(ab, evt_buf, len,
-					 &peer_del_resp) != 0) {
+	if (ath11k_pull_peer_del_resp_ev(ab, skb, &peer_del_resp) != 0) {
 		ath11k_warn(ab, "failed to extract peer delete resp");
 		return;
 	}
@@ -4701,14 +4698,13 @@ static inline const char *ath11k_wmi_vdev_resp_print(u32 vdev_resp_status)
 	}
 }
 
-static void ath11k_vdev_start_resp_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_vdev_start_resp_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_vdev_start_resp_event vdev_start_resp;
 	struct ath11k *ar;
 	u32 status;
 
-	if (ath11k_pull_vdev_start_resp_tlv(ab, evt_buf, len,
-					    &vdev_start_resp) != 0) {
+	if (ath11k_pull_vdev_start_resp_tlv(ab, skb, &vdev_start_resp) != 0) {
 		ath11k_warn(ab, "failed to extract vdev start resp");
 		return;
 	}
@@ -4740,24 +4736,23 @@ static void ath11k_vdev_start_resp_event(struct ath11k_base *ab, u8 *evt_buf, u3
 		   vdev_start_resp.vdev_id);
 }
 
-static void ath11k_bcn_tx_status_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_bcn_tx_status_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	u32 vdev_id, tx_status;
 
-	if (ath11k_pull_bcn_tx_status_ev(ab, evt_buf, len,
+	if (ath11k_pull_bcn_tx_status_ev(ab, skb->data, skb->len,
 					 &vdev_id, &tx_status) != 0) {
 		ath11k_warn(ab, "failed to extract bcn tx status");
 		return;
 	}
 }
 
-static void ath11k_vdev_stopped_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_vdev_stopped_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct ath11k *ar;
 	u32 vdev_id = 0;
 
-	if (ath11k_pull_vdev_stopped_param_tlv(ab, evt_buf, len,
-					       &vdev_id) != 0) {
+	if (ath11k_pull_vdev_stopped_param_tlv(ab, skb, &vdev_id) != 0) {
 		ath11k_warn(ab, "failed to extract vdev stopped event");
 		return;
 	}
@@ -4894,8 +4889,7 @@ static void ath11k_mgmt_tx_compl_event(struct ath11k_base *ab, struct sk_buff *s
 	struct wmi_mgmt_tx_compl_event tx_compl_param = {0};
 	struct ath11k *ar;
 
-	if (ath11k_pull_mgmt_tx_compl_param_tlv(ab, skb->data, skb->len,
-						&tx_compl_param) != 0) {
+	if (ath11k_pull_mgmt_tx_compl_param_tlv(ab, skb, &tx_compl_param) != 0) {
 		ath11k_warn(ab, "failed to extract mgmt tx compl event");
 		return;
 	}
@@ -4944,12 +4938,12 @@ static struct ath11k *ath11k_get_ar_on_scan_abort(struct ath11k_base *ab,
 	return NULL;
 }
 
-static void ath11k_scan_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_scan_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct ath11k *ar;
 	struct wmi_scan_event scan_ev = {0};
 
-	if (ath11k_pull_scan_ev(ab, evt_buf, len, &scan_ev) != 0) {
+	if (ath11k_pull_scan_ev(ab, skb, &scan_ev) != 0) {
 		ath11k_warn(ab, "failed to extract scan event");
 		return;
 	}
@@ -5013,14 +5007,14 @@ static void ath11k_scan_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	rcu_read_unlock();
 }
 
-static void ath11k_peer_sta_kickout_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_peer_sta_kickout_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_peer_sta_kickout_arg arg = {};
 	struct ieee80211_sta *sta;
 	struct ath11k_peer *peer;
 	struct ath11k *ar;
 
-	if (ath11k_pull_peer_sta_kickout_ev(ab, evt_buf, len, &arg) != 0) {
+	if (ath11k_pull_peer_sta_kickout_ev(ab, skb, &arg) != 0) {
 		ath11k_warn(ab, "failed to extract peer sta kickout event");
 		return;
 	}
@@ -5062,12 +5056,12 @@ static void ath11k_peer_sta_kickout_event(struct ath11k_base *ab, u8 *evt_buf, u
 	rcu_read_unlock();
 }
 
-static void ath11k_roam_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_roam_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_roam_event roam_ev = {};
 	struct ath11k *ar;
 
-	if (ath11k_pull_roam_ev(ab, evt_buf, len, &roam_ev) != 0) {
+	if (ath11k_pull_roam_ev(ab, skb, &roam_ev) != 0) {
 		ath11k_warn(ab, "failed to extract roam event");
 		return;
 	}
@@ -5108,7 +5102,7 @@ static void ath11k_roam_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	rcu_read_unlock();
 }
 
-static void ath11k_chan_info_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_chan_info_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_chan_info_event ch_info_ev = {0};
 	struct ath11k *ar;
@@ -5117,7 +5111,7 @@ static void ath11k_chan_info_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	/* HW channel counters frequency value in hertz */
 	u32 cc_freq_hz = ab->cc_freq_hz;
 
-	if (ath11k_pull_chan_info_ev(ab, evt_buf, len, &ch_info_ev) != 0) {
+	if (ath11k_pull_chan_info_ev(ab, skb->data, skb->len, &ch_info_ev) != 0) {
 		ath11k_warn(ab, "failed to extract chan info event");
 		return;
 	}
@@ -5182,7 +5176,7 @@ static void ath11k_chan_info_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 }
 
 static void
-ath11k_pdev_bss_chan_info_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+ath11k_pdev_bss_chan_info_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_pdev_bss_chan_info_event bss_ch_info_ev = {};
 	struct survey_info *survey;
@@ -5191,8 +5185,7 @@ static void ath11k_chan_info_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	u64 busy, total, tx, rx, rx_bss;
 	int idx;
 
-	if (ath11k_pull_pdev_bss_chan_info_ev(ab, evt_buf, len,
-					      &bss_ch_info_ev) != 0) {
+	if (ath11k_pull_pdev_bss_chan_info_ev(ab, skb, &bss_ch_info_ev) != 0) {
 		ath11k_warn(ab, "failed to extract pdev bss chan info event");
 		return;
 	}
@@ -5255,14 +5248,13 @@ static void ath11k_chan_info_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
 	rcu_read_unlock();
 }
 
-static void ath11k_vdev_install_key_compl_event(struct ath11k_base *ab, u8 *evt_buf,
-						u32 len)
+static void ath11k_vdev_install_key_compl_event(struct ath11k_base *ab,
+						struct sk_buff *skb)
 {
 	struct wmi_vdev_install_key_complete_arg install_key_compl = {0};
 	struct ath11k *ar;
 
-	if (ath11k_pull_vdev_install_key_compl_ev(ab, evt_buf, len,
-						  &install_key_compl) != 0) {
+	if (ath11k_pull_vdev_install_key_compl_ev(ab, skb, &install_key_compl) != 0) {
 		ath11k_warn(ab, "failed to extract install key compl event");
 		return;
 	}
@@ -5293,15 +5285,14 @@ static void ath11k_vdev_install_key_compl_event(struct ath11k_base *ab, u8 *evt_
 	rcu_read_unlock();
 }
 
-static void ath11k_service_available_event(struct ath11k_base *ab, u8 *evt_buf,
-					   u32 len)
+static void ath11k_service_available_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	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);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -5337,13 +5328,12 @@ static void ath11k_service_available_event(struct ath11k_base *ab, u8 *evt_buf,
 	kfree(tb);
 }
 
-static void ath11k_peer_assoc_conf_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_peer_assoc_conf_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_peer_assoc_conf_arg peer_assoc_conf = {0};
 	struct ath11k *ar;
 
-	if (ath11k_pull_peer_assoc_conf_ev(ab, evt_buf, len,
-					   &peer_assoc_conf) != 0) {
+	if (ath11k_pull_peer_assoc_conf_ev(ab, skb, &peer_assoc_conf) != 0) {
 		ath11k_warn(ab, "failed to extract peer assoc conf event");
 		return;
 	}
@@ -5363,22 +5353,22 @@ static void ath11k_peer_assoc_conf_event(struct ath11k_base *ab, u8 *evt_buf, u3
 	complete(&ar->peer_assoc_done);
 }
 
-static void ath11k_update_stats_event(struct ath11k_base *ab, u8 *evt_buf, u32 len)
+static void ath11k_update_stats_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
-	ath11k_debug_fw_stats_process(ab, evt_buf, len);
+	ath11k_debug_fw_stats_process(ab, skb);
 }
 
 /* PDEV_CTL_FAILSAFE_CHECK_EVENT is received from FW when the frequency scanned
  * is not part of BDF CTL(Conformance test limits) table entries.
  */
-static void ath11k_pdev_ctl_failsafe_check_event(struct ath11k_base *ab, u8 *evt_buf,
-						 u32 len)
+static void ath11k_pdev_ctl_failsafe_check_event(struct ath11k_base *ab,
+						 struct sk_buff *skb)
 {
 	const void **tb;
 	const struct wmi_pdev_ctl_failsafe_chk_event *ev;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -5436,15 +5426,14 @@ static void ath11k_pdev_ctl_failsafe_check_event(struct ath11k_base *ab, u8 *evt
 
 static void
 ath11k_wmi_pdev_csa_switch_count_status_event(struct ath11k_base *ab,
-					      u8 *evt_buf,
-					      u32 len)
+					      struct sk_buff *skb)
 {
 	const void **tb;
 	const struct wmi_pdev_csa_switch_ev *ev;
 	const u32 *vdev_ids;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -5471,16 +5460,14 @@ static void ath11k_pdev_ctl_failsafe_check_event(struct ath11k_base *ab, u8 *evt
 }
 
 static void
-ath11k_wmi_pdev_dfs_radar_detected_event(struct ath11k_base *ab,
-					 u8 *evt_buf,
-					 u32 len)
+ath11k_wmi_pdev_dfs_radar_detected_event(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	const void **tb;
 	const struct wmi_pdev_radar_ev *ev;
 	struct ath11k *ar;
 	int ret;
 
-	tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC);
+	tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
 	if (IS_ERR(tb)) {
 		ret = PTR_ERR(tb);
 		ath11k_warn(ab, "failed to parse tlv: %d\n", ret);
@@ -5525,8 +5512,6 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
 {
 	struct wmi_cmd_hdr *cmd_hdr;
 	enum wmi_tlv_event_id id;
-	u8 *data;
-	u32 len;
 
 	cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
 	id = FIELD_GET(WMI_CMD_HDR_CMD_ID, (cmd_hdr->cmd_id));
@@ -5534,34 +5519,31 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
 	if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
 		goto out;
 
-	data = (u8 *)skb->data;
-	len = skb->len;
-
 	switch (id) {
 		/* Process all the WMI events here */
 	case WMI_SERVICE_READY_EVENTID:
-		ath11k_service_ready_event(ab, data, len);
+		ath11k_service_ready_event(ab, skb);
 		break;
 	case WMI_SERVICE_READY_EXT_EVENTID:
-		ath11k_service_ready_ext_event(ab, data, len);
+		ath11k_service_ready_ext_event(ab, skb);
 		break;
 	case WMI_REG_CHAN_LIST_CC_EVENTID:
-		ath11k_reg_chan_list_event(ab, data, len);
+		ath11k_reg_chan_list_event(ab, skb);
 		break;
 	case WMI_READY_EVENTID:
-		ath11k_ready_event(ab, data, len);
+		ath11k_ready_event(ab, skb);
 		break;
 	case WMI_PEER_DELETE_RESP_EVENTID:
-		ath11k_peer_delete_resp_event(ab, data, len);
+		ath11k_peer_delete_resp_event(ab, skb);
 		break;
 	case WMI_VDEV_START_RESP_EVENTID:
-		ath11k_vdev_start_resp_event(ab, data, len);
+		ath11k_vdev_start_resp_event(ab, skb);
 		break;
 	case WMI_OFFLOAD_BCN_TX_STATUS_EVENTID:
-		ath11k_bcn_tx_status_event(ab, data, len);
+		ath11k_bcn_tx_status_event(ab, skb);
 		break;
 	case WMI_VDEV_STOPPED_EVENTID:
-		ath11k_vdev_stopped_event(ab, data, len);
+		ath11k_vdev_stopped_event(ab, skb);
 		break;
 	case WMI_MGMT_RX_EVENTID:
 		ath11k_mgmt_rx_event(ab, skb);
@@ -5571,37 +5553,37 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
 		ath11k_mgmt_tx_compl_event(ab, skb);
 		break;
 	case WMI_SCAN_EVENTID:
-		ath11k_scan_event(ab, data, len);
+		ath11k_scan_event(ab, skb);
 		break;
 	case WMI_PEER_STA_KICKOUT_EVENTID:
-		ath11k_peer_sta_kickout_event(ab, data, len);
+		ath11k_peer_sta_kickout_event(ab, skb);
 		break;
 	case WMI_ROAM_EVENTID:
-		ath11k_roam_event(ab, data, len);
+		ath11k_roam_event(ab, skb);
 		break;
 	case WMI_CHAN_INFO_EVENTID:
-		ath11k_chan_info_event(ab, data, len);
+		ath11k_chan_info_event(ab, skb);
 		break;
 	case WMI_PDEV_BSS_CHAN_INFO_EVENTID:
-		ath11k_pdev_bss_chan_info_event(ab, data, len);
+		ath11k_pdev_bss_chan_info_event(ab, skb);
 		break;
 	case WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID:
-		ath11k_vdev_install_key_compl_event(ab, data, len);
+		ath11k_vdev_install_key_compl_event(ab, skb);
 		break;
 	case WMI_SERVICE_AVAILABLE_EVENTID:
-		ath11k_service_available_event(ab, data, len);
+		ath11k_service_available_event(ab, skb);
 		break;
 	case WMI_PEER_ASSOC_CONF_EVENTID:
-		ath11k_peer_assoc_conf_event(ab, data, len);
+		ath11k_peer_assoc_conf_event(ab, skb);
 		break;
 	case WMI_UPDATE_STATS_EVENTID:
-		ath11k_update_stats_event(ab, data, len);
+		ath11k_update_stats_event(ab, skb);
 		break;
 	case WMI_PDEV_CTL_FAILSAFE_CHECK_EVENTID:
-		ath11k_pdev_ctl_failsafe_check_event(ab, data, len);
+		ath11k_pdev_ctl_failsafe_check_event(ab, skb);
 		break;
 	case WMI_PDEV_CSA_SWITCH_COUNT_STATUS_EVENTID:
-		ath11k_wmi_pdev_csa_switch_count_status_event(ab, data, len);
+		ath11k_wmi_pdev_csa_switch_count_status_event(ab, skb);
 		break;
 	/* add Unsupported events here */
 	case WMI_TBTTOFFSET_EXT_UPDATE_EVENTID:
@@ -5610,7 +5592,7 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
 			   "ignoring unsupported event 0x%x\n", id);
 		break;
 	case WMI_PDEV_DFS_RADAR_DETECTION_EVENTID:
-		ath11k_wmi_pdev_dfs_radar_detected_event(ab, data, len);
+		ath11k_wmi_pdev_dfs_radar_detected_event(ab, skb);
 		break;
 	/* TODO: Add remaining events */
 	default:
diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
index 248326e..e6566f7 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -4703,7 +4703,7 @@ int ath11k_wmi_send_bcn_offload_control_cmd(struct ath11k *ar,
 				 struct rx_reorder_queue_remove_params *param);
 int ath11k_wmi_send_pdev_set_regdomain(struct ath11k *ar,
 				       struct pdev_set_regdomain_params *param);
-int ath11k_wmi_pull_fw_stats(struct ath11k_base *ab, u8 *evt_buf, u32 len,
+int ath11k_wmi_pull_fw_stats(struct ath11k_base *ab, struct sk_buff *skb,
 			     struct ath11k_fw_stats *stats);
 size_t ath11k_wmi_fw_stats_num_peers(struct list_head *head);
 size_t ath11k_wmi_fw_stats_num_peers_extd(struct list_head *head);
-- 
1.9.1


_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction
  2019-06-26 12:07 [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Vasanthakumar Thiagarajan
                   ` (2 preceding siblings ...)
  2019-06-26 12:07 ` [PATCH 4/4] ath11k/wmi: Clean up function parameter list in wmi event handlers Vasanthakumar Thiagarajan
@ 2019-06-27 11:13 ` Kalle Valo
  3 siblings, 0 replies; 5+ messages in thread
From: Kalle Valo @ 2019-06-27 11:13 UTC (permalink / raw
  To: Vasanthakumar Thiagarajan; +Cc: ath11k

Vasanthakumar Thiagarajan <vthiagar@codeaurora.org> wrote:

> There is going to be only one version of WMI TLV.
> 
> Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@codeaurora.org>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

4 patches applied to ath11k-bringup branch of ath.git, thanks.

5cbfcf7e1e73 ath11k/wmi: Remove wmi service abstraction
fcafe58d61d3 ath11k/wmi: Clean up few indentations in wmi
3e3dd4c0b842 ath11k/wmi: Remove unnecessary type casting
eed27be604a2 ath11k/wmi: Clean up function parameter list in wmi event handlers

-- 
https://patchwork.kernel.org/patch/11017539/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-06-27 11:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-26 12:07 [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Vasanthakumar Thiagarajan
2019-06-26 12:07 ` [PATCH 2/4] ath11k/wmi: Clean up few indentations in wmi Vasanthakumar Thiagarajan
2019-06-26 12:07 ` [PATCH 3/4] ath11k/wmi: Remove unnecessary type casting Vasanthakumar Thiagarajan
2019-06-26 12:07 ` [PATCH 4/4] ath11k/wmi: Clean up function parameter list in wmi event handlers Vasanthakumar Thiagarajan
2019-06-27 11:13 ` [PATCH 1/4] ath11k/wmi: Remove wmi service abstraction Kalle Valo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.