summaryrefslogtreecommitdiff
path: root/umac
diff options
context:
space:
mode:
authorAbhijit Pradhan <abhijit@codeaurora.org>2018-02-02 20:35:34 +0530
committersnandini <snandini@codeaurora.org>2018-02-07 03:07:51 -0800
commit3373194c4e3b377720eaeb32be73a04ddaf851b5 (patch)
tree7c9827b9ffd5879e74f4cc6b75fce2f7796314db /umac
parent7dd49fec1745729fb72a508a15f79c4b4da06d4e (diff)
downloadqca-wfi-host-cmn-3373194c4e3b377720eaeb32be73a04ddaf851b5.tar.gz
qcacmn: Define channel structure per vdev
Save BSS and desired channel information per vdev to access it across all the modules. Change-Id: I7729e0ae902643d0a2c61184b9ddc2babd07179e CRs-Fixed: 2166359
Diffstat (limited to 'umac')
-rw-r--r--umac/cmn_services/inc/wlan_cmn.h48
-rw-r--r--umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h19
-rw-r--r--umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c29
3 files changed, 93 insertions, 3 deletions
diff --git a/umac/cmn_services/inc/wlan_cmn.h b/umac/cmn_services/inc/wlan_cmn.h
index d54e01e00..02ccca92a 100644
--- a/umac/cmn_services/inc/wlan_cmn.h
+++ b/umac/cmn_services/inc/wlan_cmn.h
@@ -310,6 +310,17 @@ typedef enum {
* @WLAN_PHYMODE_11AC_VHT80: 5Ghz, VHT80
* @WLAN_PHYMODE_11AC_VHT160: 5Ghz, VHT160
* @WLAN_PHYMODE_11AC_VHT80_80: 5Ghz, VHT80_80
+ * @WLAN_PHYMODE_11AXA_HE20: 5GHz, HE20
+ * @WLAN_PHYMODE_11AXG_HE20: 2GHz, HE20
+ * @WLAN_PHYMODE_11AXA_HE40PLUS: 5GHz, HE40 (ext ch +1)
+ * @WLAN_PHYMODE_11AXA_HE40MINUS:5GHz, HE40 (ext ch -1)
+ * @WLAN_PHYMODE_11AXG_HE40PLUS: 2GHz, HE40 (ext ch +1)
+ * @WLAN_PHYMODE_11AXG_HE40MINUS:2GHz, HE40 (ext ch -1)
+ * @WLAN_PHYMODE_11AXA_HE40: 5GHz, HE40
+ * @WLAN_PHYMODE_11AXG_HE40: 2GHz, HE40
+ * @WLAN_PHYMODE_11AXA_HE80: 5GHz, HE80
+ * @WLAN_PHYMODE_11AXA_HE160: 5GHz, HE160
+ * @WLAN_PHYMODE_11AXA_HE80_80: 5GHz, HE80_80
*/
enum wlan_phymode {
WLAN_PHYMODE_AUTO = 0,
@@ -331,9 +342,44 @@ enum wlan_phymode {
WLAN_PHYMODE_11AC_VHT80 = 16,
WLAN_PHYMODE_11AC_VHT160 = 17,
WLAN_PHYMODE_11AC_VHT80_80 = 18,
+ WLAN_PHYMODE_11AXA_HE20 = 19,
+ WLAN_PHYMODE_11AXG_HE20 = 20,
+ WLAN_PHYMODE_11AXA_HE40PLUS = 21,
+ WLAN_PHYMODE_11AXA_HE40MINUS = 22,
+ WLAN_PHYMODE_11AXG_HE40PLUS = 23,
+ WLAN_PHYMODE_11AXG_HE40MINUS = 24,
+ WLAN_PHYMODE_11AXA_HE40 = 25,
+ WLAN_PHYMODE_11AXG_HE40 = 26,
+ WLAN_PHYMODE_11AXA_HE80 = 27,
+ WLAN_PHYMODE_11AXA_HE160 = 28,
+ WLAN_PHYMODE_11AXA_HE80_80 = 29,
};
-#define WLAN_PHYMODE_MAX (WLAN_PHYMODE_11AC_VHT80_80 + 1)
+#define WLAN_PHYMODE_MAX (WLAN_PHYMODE_11AXA_HE80_80 + 1)
+
+/**
+ * enum wlan_phy_ch_width - channel width
+ * @WLAN_CH_WIDTH_20MHZ: 20 mhz width
+ * @WLAN_CH_WIDTH_40MHZ: 40 mhz width
+ * @WLAN_CH_WIDTH_80MHZ: 80 mhz width
+ * @WLAN_CH_WIDTH_160MHZ: 160 mhz width
+ * @WLAN_CH_WIDTH_80P80HZ: 80+80 mhz width
+ * @WLAN_CH_WIDTH_5MHZ: 5 mhz width
+ * @WLAN_CH_WIDTH_10MHZ: 10 mhz width
+ * @WLAN_CH_WIDTH_INVALID: invalid width
+ * @WLAN_CH_WIDTH_MAX: max possible width
+ */
+enum wlan_phy_ch_width {
+ WLAN_CH_WIDTH_20MHZ = 0,
+ WLAN_CH_WIDTH_40MHZ,
+ WLAN_CH_WIDTH_80MHZ,
+ WLAN_CH_WIDTH_160MHZ,
+ WLAN_CH_WIDTH_80P80MHZ,
+ WLAN_CH_WIDTH_5MHZ,
+ WLAN_CH_WIDTH_10MHZ,
+ WLAN_CH_WIDTH_INVALID,
+ WLAN_CH_WIDTH_MAX
+};
/**
* enum wifi_traffic_ac - access category type
diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h
index 8b3938077..7f4a97398 100644
--- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h
+++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h
@@ -259,9 +259,26 @@ struct wlan_vdev_create_params {
/**
* struct wlan_channel - channel structure
+ * @ch_freq: Channel in Mhz.
+ * @ch_ieee: IEEE channel number.
+ * @ch_flags: Channel flags.
+ * @ch_flagext: Channel extension flags.
+ * @ch_maxpower: Maximum tx power in dBm.
+ * @ch_freq_seg1: Channel Center frequeny for VHT80/160 and HE80/160.
+ * @ch_freq_seg2: Second channel Center frequency applicable for 80+80MHz mode.
+ * @ch_width: Channel width.
+ * @ch_phymode: Channel phymode.
*/
struct wlan_channel {
-
+ uint16_t ch_freq;
+ uint8_t ch_ieee;
+ uint64_t ch_flags;
+ uint16_t ch_flagext;
+ int8_t ch_maxpower;
+ uint8_t ch_freq_seg1;
+ uint8_t ch_freq_seg2;
+ enum wlan_phy_ch_width ch_width;
+ enum wlan_phymode ch_phymode;
};
/**
diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c
index 09d152a11..262d64da2 100644
--- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c
+++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c
@@ -104,6 +104,9 @@ static QDF_STATUS wlan_objmgr_vdev_obj_free(struct wlan_objmgr_vdev *vdev)
return QDF_STATUS_E_FAILURE;
qdf_spinlock_destroy(&vdev->vdev_lock);
+
+ qdf_mem_free(vdev->vdev_mlme.bss_chan);
+ qdf_mem_free(vdev->vdev_mlme.des_chan);
qdf_mem_free(vdev);
return QDF_STATUS_SUCCESS;
@@ -140,11 +143,33 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
return NULL;
}
vdev->obj_state = WLAN_OBJ_STATE_ALLOCATED;
+
+ vdev->vdev_mlme.bss_chan = (struct wlan_channel *)qdf_mem_malloc(
+ sizeof(struct wlan_channel));
+ if (vdev->vdev_mlme.bss_chan == NULL) {
+ QDF_TRACE(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_ERROR,
+ "%s:bss_chan is NULL", __func__);
+ qdf_mem_free(vdev);
+ return NULL;
+ }
+
+ vdev->vdev_mlme.des_chan = (struct wlan_channel *)qdf_mem_malloc(
+ sizeof(struct wlan_channel));
+ if (vdev->vdev_mlme.des_chan == NULL) {
+ QDF_TRACE(QDF_MODULE_ID_MLME, QDF_TRACE_LEVEL_ERROR,
+ "%s:des_chan is NULL", __func__);
+ qdf_mem_free(vdev->vdev_mlme.bss_chan);
+ qdf_mem_free(vdev);
+ return NULL;
+ }
+
/* Attach VDEV to PSOC VDEV's list */
if (wlan_objmgr_psoc_vdev_attach(psoc, vdev) !=
QDF_STATUS_SUCCESS) {
obj_mgr_err("psoc vdev attach failed for vdev-id:%d",
vdev->vdev_objmgr.vdev_id);
+ qdf_mem_free(vdev->vdev_mlme.bss_chan);
+ qdf_mem_free(vdev->vdev_mlme.des_chan);
qdf_mem_free(vdev);
return NULL;
}
@@ -156,6 +181,8 @@ struct wlan_objmgr_vdev *wlan_objmgr_vdev_obj_create(
obj_mgr_err("pdev vdev attach failed for vdev-id:%d",
vdev->vdev_objmgr.vdev_id);
wlan_objmgr_psoc_vdev_detach(psoc, vdev);
+ qdf_mem_free(vdev->vdev_mlme.bss_chan);
+ qdf_mem_free(vdev->vdev_mlme.des_chan);
qdf_mem_free(vdev);
return NULL;
}
@@ -257,7 +284,7 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
WLAN_OBJMGR_BUG(0);
}
- /* Invoke registered create handlers */
+ /* Invoke registered destroy handlers */
for (id = 0; id < WLAN_UMAC_MAX_COMPONENTS; id++) {
handler = g_umac_glb_obj->vdev_destroy_handler[id];
arg = g_umac_glb_obj->vdev_destroy_handler_arg[id];