Browse Source

qcacmn: Add get channel width from phy mode API

Add get channel width from phy mode API which will be used by
ndp schedule update event.

Change-Id: I13d00c0b818eb0da434c8a5372b2ab7b6693f22a
CRs-Fixed: 2216801
Naveen Rawat 7 years ago
parent
commit
caca8b01fd
3 changed files with 60 additions and 0 deletions
  1. 9 0
      wmi/inc/wmi_unified_api.h
  2. 5 0
      wmi/inc/wmi_unified_param.h
  3. 46 0
      wmi/src/wmi_unified_api.c

+ 9 - 0
wmi/inc/wmi_unified_api.h

@@ -2242,4 +2242,13 @@ QDF_STATUS wmi_unified_offload_11k_cmd(void *wmi_hdl,
 QDF_STATUS wmi_unified_invoke_neighbor_report_cmd(void *wmi_hdl,
 			struct wmi_invoke_neighbor_report_params *params);
 
+/* wmi_get_ch_width_from_phy_mode() - convert phy mode to channel width
+ * @wmi_hdl: wmi handle
+ * @phymode: phy mode
+ *
+ * Return: wmi channel width
+ */
+wmi_host_channel_width wmi_get_ch_width_from_phy_mode(void *wmi_hdl,
+					WMI_HOST_WLAN_PHY_MODE phymode);
+
 #endif /* _WMI_UNIFIED_API_H_ */

+ 5 - 0
wmi/inc/wmi_unified_param.h

@@ -404,6 +404,11 @@ typedef void *ol_scn_t;
 typedef int (*wmi_unified_event_handler)(ol_scn_t scn_handle,
 		 uint8_t *event_buf, uint32_t len);
 
+/**
+ * @WMI_HOST_WLAN_PHY_MODE: Host based enum ID for corresponding in
+ * WLAN_PHY_MODE. This should be consistent with WLAN_PHY_MODE always to avoid
+ * breaking the WMI
+ */
 typedef enum {
 	WMI_HOST_MODE_11A	= 0,   /* 11a Mode */
 	WMI_HOST_MODE_11G	= 1,   /* 11b/g Mode */

+ 46 - 0
wmi/src/wmi_unified_api.c

@@ -28,6 +28,38 @@
 #include "wmi_unified_param.h"
 #include "qdf_module.h"
 
+static const wmi_host_channel_width mode_to_width[WMI_HOST_MODE_MAX] = {
+	[WMI_HOST_MODE_11A]           = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11G]           = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11B]           = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11GONLY]       = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11NA_HT20]     = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11NG_HT20]     = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11AC_VHT20]    = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11AC_VHT20_2G] = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11NA_HT40]     = WMI_HOST_CHAN_WIDTH_40,
+	[WMI_HOST_MODE_11NG_HT40]     = WMI_HOST_CHAN_WIDTH_40,
+	[WMI_HOST_MODE_11AC_VHT40]    = WMI_HOST_CHAN_WIDTH_40,
+	[WMI_HOST_MODE_11AC_VHT40_2G] = WMI_HOST_CHAN_WIDTH_40,
+	[WMI_HOST_MODE_11AC_VHT80]    = WMI_HOST_CHAN_WIDTH_80,
+	[WMI_HOST_MODE_11AC_VHT80_2G] = WMI_HOST_CHAN_WIDTH_80,
+#if CONFIG_160MHZ_SUPPORT
+	[WMI_HOST_MODE_11AC_VHT80_80] = WMI_HOST_CHAN_WIDTH_80P80,
+	[WMI_HOST_MODE_11AC_VHT160]   = WMI_HOST_CHAN_WIDTH_160,
+#endif
+
+#if SUPPORT_11AX
+	[WMI_HOST_MODE_11AX_HE20]     = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11AX_HE40]     = WMI_HOST_CHAN_WIDTH_40,
+	[WMI_HOST_MODE_11AX_HE80]     = WMI_HOST_CHAN_WIDTH_80,
+	[WMI_HOST_MODE_11AX_HE80_80]  = WMI_HOST_CHAN_WIDTH_80P80,
+	[WMI_HOST_MODE_11AX_HE160]    = WMI_HOST_CHAN_WIDTH_160,
+	[WMI_HOST_MODE_11AX_HE20_2G]  = WMI_HOST_CHAN_WIDTH_20,
+	[WMI_HOST_MODE_11AX_HE40_2G]  = WMI_HOST_CHAN_WIDTH_40,
+	[WMI_HOST_MODE_11AX_HE80_2G]  = WMI_HOST_CHAN_WIDTH_80,
+#endif
+};
+
 /**
  * wmi_unified_vdev_create_send() - send VDEV create command to fw
  * @wmi_handle: wmi handle
@@ -7436,3 +7468,17 @@ QDF_STATUS wmi_unified_extract_obss_color_collision_info(void *wmi_hdl,
 
 	return QDF_STATUS_E_FAILURE;
 }
+
+wmi_host_channel_width wmi_get_ch_width_from_phy_mode(void *wmi_hdl,
+					WMI_HOST_WLAN_PHY_MODE phymode)
+{
+	/*
+	 * this API does translation between host only strcutres, hence
+	 * does not need separate TLV, non-TLV definitions
+	 */
+
+	if (phymode >= WMI_HOST_MODE_11A && phymode < WMI_HOST_MODE_MAX)
+		return mode_to_width[phymode];
+	else
+		return WMI_HOST_CHAN_WIDTH_20;
+}