diff options
author | Abhijit Pradhan <abhijit@codeaurora.org> | 2018-02-02 20:35:34 +0530 |
---|---|---|
committer | snandini <snandini@codeaurora.org> | 2018-02-07 03:07:51 -0800 |
commit | 3373194c4e3b377720eaeb32be73a04ddaf851b5 (patch) | |
tree | 7c9827b9ffd5879e74f4cc6b75fce2f7796314db /umac | |
parent | 7dd49fec1745729fb72a508a15f79c4b4da06d4e (diff) | |
download | qca-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.h | 48 | ||||
-rw-r--r-- | umac/cmn_services/obj_mgr/inc/wlan_objmgr_vdev_obj.h | 19 | ||||
-rw-r--r-- | umac/cmn_services/obj_mgr/src/wlan_objmgr_vdev_obj.c | 29 |
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]; |