From bf9efa756115ee58fdf213ed1c48b6c108d7ff87 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Mon, 21 May 2018 04:51:47 -0400 Subject: [PATCH] qcacmn: Extract Hw mode Id and band info Extract/Save the Hw mode ID and Mac0 band info to hw mode list. This helps to identify the 2x2 5G + 1x1 2G and 2x2 2G + 1x1 5G. Change-Id: I0682337b1a80c1b502c3307e0847aaa99479d2d3 CRs-Fixed: 2256152 --- .../inc/wlan_policy_mgr_public_struct.h | 6 ++- .../policy_mgr/src/wlan_policy_mgr_action.c | 11 +++-- .../policy_mgr/src/wlan_policy_mgr_core.c | 12 +++-- .../src/wlan_policy_mgr_get_set_utils.c | 41 ++++++++++------- .../policy_mgr/src/wlan_policy_mgr_i.h | 45 ++++++++++++++----- 5 files changed, 78 insertions(+), 37 deletions(-) diff --git a/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h b/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h index 2d7f61042574..8706c61a8c72 100644 --- a/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h +++ b/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_public_struct.h @@ -855,8 +855,9 @@ struct policy_mgr_conc_connection_info { * @mac1_rx_ss: MAC1 Rx spatial stream * @mac0_bw: MAC0 bandwidth * @mac1_bw: MAC1 bandwidth - * @dbs_cap: DBS capabality - * @agile_dfs_cap: Agile DFS capabality + * @mac0_band_cap: mac0 band (5g/2g) capability + * @dbs_cap: DBS capability + * @agile_dfs_cap: Agile DFS capability */ struct policy_mgr_hw_mode_params { uint8_t mac0_tx_ss; @@ -865,6 +866,7 @@ struct policy_mgr_hw_mode_params { uint8_t mac1_rx_ss; uint8_t mac0_bw; uint8_t mac1_bw; + uint8_t mac0_band_cap; uint8_t dbs_cap; uint8_t agile_dfs_cap; uint8_t sbs_cap; diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c index bb0beae7bd30..95e126bada3c 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c @@ -72,12 +72,15 @@ void policy_mgr_hw_mode_transition_cb(uint32_t old_hw_mode_index, return; } - policy_mgr_debug("MAC0: TxSS:%d, RxSS:%d, Bw:%d", - hw_mode.mac0_tx_ss, hw_mode.mac0_rx_ss, hw_mode.mac0_bw); + policy_mgr_debug("MAC0: TxSS:%d, RxSS:%d, Bw:%d band_cap:%d", + hw_mode.mac0_tx_ss, hw_mode.mac0_rx_ss, + hw_mode.mac0_bw, hw_mode.mac0_band_cap); policy_mgr_debug("MAC1: TxSS:%d, RxSS:%d, Bw:%d", - hw_mode.mac1_tx_ss, hw_mode.mac1_rx_ss, hw_mode.mac1_bw); + hw_mode.mac1_tx_ss, hw_mode.mac1_rx_ss, + hw_mode.mac1_bw); policy_mgr_debug("DBS:%d, Agile DFS:%d, SBS:%d", - hw_mode.dbs_cap, hw_mode.agile_dfs_cap, hw_mode.sbs_cap); + hw_mode.dbs_cap, hw_mode.agile_dfs_cap, + hw_mode.sbs_cap); /* update pm_conc_connection_list */ policy_mgr_update_hw_mode_conn_info(context, num_vdev_mac_entries, diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c index ee1ac42303b2..930cfe033d08 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c @@ -477,6 +477,7 @@ QDF_STATUS policy_mgr_get_hw_mode_from_idx( hw_mode->mac1_tx_ss = POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_GET(param); hw_mode->mac1_rx_ss = POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_GET(param); hw_mode->mac1_bw = POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_GET(param); + hw_mode->mac0_band_cap = POLICY_MGR_HW_MODE_MAC0_BAND_GET(param); hw_mode->dbs_cap = POLICY_MGR_HW_MODE_DBS_MODE_GET(param); hw_mode->agile_dfs_cap = POLICY_MGR_HW_MODE_AGILE_DFS_GET(param); hw_mode->sbs_cap = POLICY_MGR_HW_MODE_SBS_MODE_GET(param); @@ -815,12 +816,15 @@ void policy_mgr_pdev_set_hw_mode_cb(uint32_t status, return; } - policy_mgr_debug("MAC0: TxSS:%d, RxSS:%d, Bw:%d", - hw_mode.mac0_tx_ss, hw_mode.mac0_rx_ss, hw_mode.mac0_bw); + policy_mgr_debug("MAC0: TxSS:%d, RxSS:%d, Bw:%d, band_cap %d", + hw_mode.mac0_tx_ss, hw_mode.mac0_rx_ss, + hw_mode.mac0_bw, hw_mode.mac0_band_cap); policy_mgr_debug("MAC1: TxSS:%d, RxSS:%d, Bw:%d", - hw_mode.mac1_tx_ss, hw_mode.mac1_rx_ss, hw_mode.mac1_bw); + hw_mode.mac1_tx_ss, hw_mode.mac1_rx_ss, + hw_mode.mac1_bw); policy_mgr_debug("DBS:%d, Agile DFS:%d, SBS:%d", - hw_mode.dbs_cap, hw_mode.agile_dfs_cap, hw_mode.sbs_cap); + hw_mode.dbs_cap, hw_mode.agile_dfs_cap, + hw_mode.sbs_cap); /* update pm_conc_connection_list */ policy_mgr_update_hw_mode_conn_info(context, num_vdev_mac_entries, diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c index 3a6e71a6c835..281a6845590e 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c @@ -154,6 +154,7 @@ static void policy_mgr_get_hw_mode_params( info->mac_bw = policy_mgr_map_wmi_channel_width_to_hw_mode_bw( QDF_MAX(caps->max_bw_supported_2G, caps->max_bw_supported_5G)); + info->mac_band_cap = caps->supported_bands; } /** @@ -162,7 +163,8 @@ static void policy_mgr_get_hw_mode_params( * @wma_handle: pointer to wma global structure * @mac0_ss_bw_info: TX-RX streams, BW for MAC0 * @mac1_ss_bw_info: TX-RX streams, BW for MAC1 - * @pos: refers to hw_mode_index + * @pos: refers to hw_mode_list array index + * @hw_mode_id: hw mode id value used by firmware * @dbs_mode: dbs_mode for the dbs_hw_mode * @sbs_mode: sbs_mode for the sbs_hw_mode * @@ -174,7 +176,7 @@ static void policy_mgr_get_hw_mode_params( static void policy_mgr_set_hw_mode_params(struct wlan_objmgr_psoc *psoc, struct policy_mgr_mac_ss_bw_info mac0_ss_bw_info, struct policy_mgr_mac_ss_bw_info mac1_ss_bw_info, - uint32_t pos, uint32_t dbs_mode, + uint32_t pos, uint32_t hw_mode_id, uint32_t dbs_mode, uint32_t sbs_mode) { struct policy_mgr_psoc_priv_obj *pm_ctx; @@ -212,6 +214,12 @@ static void policy_mgr_set_hw_mode_params(struct wlan_objmgr_psoc *psoc, POLICY_MGR_HW_MODE_SBS_MODE_SET( pm_ctx->hw_mode.hw_mode_list[pos], sbs_mode); + POLICY_MGR_HW_MODE_MAC0_BAND_SET( + pm_ctx->hw_mode.hw_mode_list[pos], + mac0_ss_bw_info.mac_band_cap); + POLICY_MGR_HW_MODE_ID_SET( + pm_ctx->hw_mode.hw_mode_list[pos], + hw_mode_id); } QDF_STATUS policy_mgr_update_hw_mode_list(struct wlan_objmgr_psoc *psoc, @@ -287,7 +295,8 @@ QDF_STATUS policy_mgr_update_hw_mode_list(struct wlan_objmgr_psoc *psoc, /* Updating HW mode list */ policy_mgr_set_hw_mode_params(psoc, mac0_ss_bw_info, - mac1_ss_bw_info, i, dbs_mode, sbs_mode); + mac1_ss_bw_info, i, tmp->hw_mode_id, dbs_mode, + sbs_mode); } return QDF_STATUS_SUCCESS; } @@ -331,19 +340,21 @@ void policy_mgr_dump_dbs_hw_mode(struct wlan_objmgr_psoc *psoc) for (i = 0; i < pm_ctx->num_dbs_hw_modes; i++) { param = pm_ctx->hw_mode.hw_mode_list[i]; - policy_mgr_debug("[%d]-MAC0: tx_ss:%d rx_ss:%d bw_idx:%d", - i, - POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_GET(param), - POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_GET(param), - POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_GET(param)); + policy_mgr_debug("[%d]-MAC0: tx_ss:%d rx_ss:%d bw_idx:%d band_cap:%d", + i, + POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_GET(param), + POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_GET(param), + POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_GET(param), + POLICY_MGR_HW_MODE_MAC0_BAND_GET(param)); policy_mgr_debug("[%d]-MAC1: tx_ss:%d rx_ss:%d bw_idx:%d", - i, - POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_GET(param), - POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_GET(param), - POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_GET(param)); - policy_mgr_debug("[%d] DBS:%d SBS:%d", i, - POLICY_MGR_HW_MODE_DBS_MODE_GET(param), - POLICY_MGR_HW_MODE_SBS_MODE_GET(param)); + i, + POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_GET(param), + POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_GET(param), + POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_GET(param)); + policy_mgr_debug("[%d] DBS:%d SBS:%d hw_mode_id:%d", i, + POLICY_MGR_HW_MODE_DBS_MODE_GET(param), + POLICY_MGR_HW_MODE_SBS_MODE_GET(param), + POLICY_MGR_HW_MODE_ID_GET(param)); } } diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h index 41c9cc40d200..32d2cbfeb620 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h @@ -57,6 +57,8 @@ #define POLICY_MGR_HW_MODE_DBS_MODE_BITPOS (7) #define POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS (6) #define POLICY_MGR_HW_MODE_SBS_MODE_BITPOS (5) +#define POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS (3) +#define POLICY_MGR_HW_MODE_ID_BITPOS (0) #define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_MASK \ (0xf << POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS) @@ -76,6 +78,10 @@ (0x1 << POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS) #define POLICY_MGR_HW_MODE_SBS_MODE_MASK \ (0x1 << POLICY_MGR_HW_MODE_SBS_MODE_BITPOS) +#define POLICY_MGR_HW_MODE_MAC0_BAND_MASK \ + (0x3 << POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS) +#define POLICY_MGR_HW_MODE_ID_MASK \ + (0x7 << POLICY_MGR_HW_MODE_ID_BITPOS) #define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_SET(hw_mode, value) \ WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS,\ @@ -104,34 +110,46 @@ #define POLICY_MGR_HW_MODE_SBS_MODE_SET(hw_mode, value) \ WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_SBS_MODE_BITPOS,\ 1, value) +#define POLICY_MGR_HW_MODE_MAC0_BAND_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS,\ + 2, value) +#define POLICY_MGR_HW_MODE_ID_SET(hw_mode, value) \ + WMI_SET_BITS(hw_mode, POLICY_MGR_HW_MODE_ID_BITPOS,\ + 3, value) #define POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_MASK) >> \ POLICY_MGR_HW_MODE_MAC0_TX_STREAMS_BITPOS) #define POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_MASK) >> \ POLICY_MGR_HW_MODE_MAC0_RX_STREAMS_BITPOS) #define POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_MASK) >> \ POLICY_MGR_HW_MODE_MAC1_TX_STREAMS_BITPOS) #define POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_MASK) >> \ POLICY_MGR_HW_MODE_MAC1_RX_STREAMS_BITPOS) #define POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_MASK) >> \ POLICY_MGR_HW_MODE_MAC0_BANDWIDTH_BITPOS) #define POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_MASK) >> \ POLICY_MGR_HW_MODE_MAC1_BANDWIDTH_BITPOS) #define POLICY_MGR_HW_MODE_DBS_MODE_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_DBS_MODE_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_DBS_MODE_MASK) >> \ POLICY_MGR_HW_MODE_DBS_MODE_BITPOS) #define POLICY_MGR_HW_MODE_AGILE_DFS_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_AGILE_DFS_MODE_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_AGILE_DFS_MODE_MASK) >> \ POLICY_MGR_HW_MODE_AGILE_DFS_MODE_BITPOS) #define POLICY_MGR_HW_MODE_SBS_MODE_GET(hw_mode) \ - ((hw_mode & POLICY_MGR_HW_MODE_SBS_MODE_MASK) >> \ + (((hw_mode) & POLICY_MGR_HW_MODE_SBS_MODE_MASK) >> \ POLICY_MGR_HW_MODE_SBS_MODE_BITPOS) +#define POLICY_MGR_HW_MODE_MAC0_BAND_GET(hw_mode) \ + (((hw_mode) & POLICY_MGR_HW_MODE_MAC0_BAND_MASK) >> \ + POLICY_MGR_HW_MODE_MAC0_BAND_BITPOS) +#define POLICY_MGR_HW_MODE_ID_GET(hw_mode) \ + (((hw_mode) & POLICY_MGR_HW_MODE_ID_MASK) >> \ + POLICY_MGR_HW_MODE_ID_BITPOS) #define POLICY_MGR_DEFAULT_HW_MODE_INDEX 0xFFFF @@ -273,14 +291,17 @@ struct policy_mgr_psoc_priv_obj { /** * struct policy_mgr_mac_ss_bw_info - hw_mode_list PHY/MAC params for each MAC - * @mac_tx_stream: Max TX stream - * @mac_rx_stream: Max RX stream - * @mac_bw: Max bandwidth + * @mac_tx_stream: Max TX stream number supported on MAC + * @mac_rx_stream: Max RX stream number supported on MAC + * @mac_bw: Max bandwidth(wmi_channel_width enum type) + * @mac_band_cap: supported Band bit map(WLAN_2G_CAPABILITY = 0x1, + * WLAN_5G_CAPABILITY = 0x2) */ struct policy_mgr_mac_ss_bw_info { uint32_t mac_tx_stream; uint32_t mac_rx_stream; uint32_t mac_bw; + uint32_t mac_band_cap; }; struct policy_mgr_psoc_priv_obj *policy_mgr_get_context(