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
このコミットが含まれているのは:
Abhijit Pradhan
2018-02-02 20:35:34 +05:30
committed by snandini
コミット 3373194c4e
3個のファイルの変更93行の追加3行の削除

ファイルの表示

@@ -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

ファイルの表示

@@ -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;
};
/**

ファイルの表示

@@ -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];