qcacmn: Add 6ghz support functions

Add API to know whether 6ghz is supported. Also add API to know
whether an operating class is 6ghz operating class.

Change-Id: I75747502c0033e31d119e58a2254b220646bba10
CRs-Fixed: 2556998
This commit is contained in:
Amar Singhal
2019-10-30 15:43:37 -07:00
committed by nshrivas
parent 499d20b63b
commit 5fbd62d6e3
14 changed files with 176 additions and 12 deletions

View File

@@ -186,6 +186,8 @@ static int init_deinit_service_ready_event_handler(ol_scn_t scn_handle,
goto exit;
target_if_reg_set_offloaded_info(psoc);
target_if_reg_set_6ghz_info(psoc);
if (wmi_service_enabled(wmi_handle, wmi_service_ext_msg)) {
target_if_debug("Wait for EXT message");
} else {

View File

@@ -50,9 +50,16 @@ QDF_STATUS target_if_register_regulatory_tx_ops(
*/
QDF_STATUS target_if_reg_set_offloaded_info(struct wlan_objmgr_psoc *psoc);
/**
* target_if_reg_set_6ghz_info() - populate 6ghz enablement info
* @psoc: psoc pointer
* Return: Success or Failure
*/
QDF_STATUS target_if_reg_set_6ghz_info(struct wlan_objmgr_psoc *psoc);
/**
* target_if_regulatory_get_rx_ops() - Get regdb rx ops
* @psoc: Pointer to psoc object
* @psoc: pointer to psoc object
*
* Return: Reg rx_ops
*/

View File

@@ -68,6 +68,22 @@ static bool tgt_if_regulatory_is_regdb_offloaded(struct wlan_objmgr_psoc *psoc)
return wmi_service_enabled(wmi_handle, wmi_service_regulatory_db);
}
/**
* tgt_if_regulatory_is_6ghz_supported() - Check if 6ghz is supported
* @psoc: Pointer to psoc
*
* Return: true if regdb if offloaded, else false
*/
static bool tgt_if_regulatory_is_6ghz_supported(struct wlan_objmgr_psoc *psoc)
{
wmi_unified_t wmi_handle = get_wmi_unified_hdl_from_psoc(psoc);
if (!wmi_handle)
return false;
return wmi_service_enabled(wmi_handle, wmi_service_6ghz_support);
}
/**
* tgt_if_regulatory_is_there_serv_ready_extn() - Check for service ready
* extension
@@ -120,6 +136,24 @@ QDF_STATUS target_if_reg_set_offloaded_info(struct wlan_objmgr_psoc *psoc)
return QDF_STATUS_SUCCESS;
}
QDF_STATUS target_if_reg_set_6ghz_info(struct wlan_objmgr_psoc *psoc)
{
struct wlan_lmac_if_reg_rx_ops *reg_rx_ops;
reg_rx_ops = target_if_regulatory_get_rx_ops(psoc);
if (!reg_rx_ops) {
target_if_err("reg_rx_ops is NULL");
return QDF_STATUS_E_FAILURE;
}
if (reg_rx_ops->reg_set_6ghz_supported)
reg_rx_ops->reg_set_6ghz_supported(
psoc,
tgt_if_regulatory_is_6ghz_supported(psoc));
return QDF_STATUS_SUCCESS;
}
/**
* tgt_reg_chan_list_update_handler() - Channel list update handler
* @handle: scn handle

View File

@@ -970,6 +970,8 @@ struct wlan_lmac_if_reg_rx_ops {
bool val);
QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
bool val);
QDF_STATUS (*reg_set_6ghz_supported)(struct wlan_objmgr_psoc *psoc,
bool val);
QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev,
enum dfs_reg *dfs_reg);
QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc,

View File

@@ -291,6 +291,9 @@ static void wlan_lmac_if_umac_reg_rx_ops_register(
rx_ops->reg_rx_ops.reg_set_11d_offloaded =
tgt_reg_set_11d_offloaded;
rx_ops->reg_rx_ops.reg_set_6ghz_supported =
tgt_reg_set_6ghz_supported;
rx_ops->reg_rx_ops.get_dfs_region =
wlan_reg_get_dfs_region;

View File

@@ -89,10 +89,12 @@ struct chan_change_cbk_entry {
* @world_country_pending: In this array, element[phy_id] is true if any world
* country update is pending for pdev (phy_id).
* @ignore_fw_reg_offload_ind: Ignore FW reg offload indication
* @six_ghz_supported: whether 6ghz is supported
*/
struct wlan_regulatory_psoc_priv_obj {
struct mas_chan_params mas_chan_params[PSOC_MAX_PHY_REG_CAP];
bool offload_enabled;
bool six_ghz_supported;
uint8_t num_phy;
char cur_country[REG_ALPHA2_LEN + 1];
char def_country[REG_ALPHA2_LEN + 1];

View File

@@ -3433,3 +3433,45 @@ bool reg_get_ignore_fw_reg_offload_ind(struct wlan_objmgr_psoc *psoc)
return psoc_reg->ignore_fw_reg_offload_ind;
}
QDF_STATUS reg_set_6ghz_supported(struct wlan_objmgr_psoc *psoc, bool val)
{
struct wlan_regulatory_psoc_priv_obj *psoc_priv_obj;
psoc_priv_obj = reg_get_psoc_obj(psoc);
if (!IS_VALID_PSOC_REG_OBJ(psoc_priv_obj)) {
reg_err("psoc reg component is NULL");
return QDF_STATUS_E_FAILURE;
}
psoc_priv_obj->six_ghz_supported = val;
return QDF_STATUS_SUCCESS;
}
bool reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev, uint8_t op_class)
{
return ((op_class >= MIN_6GHZ_OPER_CLASS) &&
(op_class <= MAX_6GHZ_OPER_CLASS));
}
bool reg_is_6ghz_supported(struct wlan_objmgr_pdev *pdev)
{
struct wlan_regulatory_psoc_priv_obj *psoc_priv_obj;
struct wlan_objmgr_psoc *psoc;
psoc = wlan_pdev_get_psoc(pdev);
if (!psoc) {
reg_err_rl("psoc is NULL");
return false;
}
psoc_priv_obj = reg_get_psoc_obj(psoc);
if (!IS_VALID_PSOC_REG_OBJ(psoc_priv_obj)) {
reg_err("psoc reg component is NULL");
return false;
}
return psoc_priv_obj->six_ghz_supported;
}

View File

@@ -102,6 +102,8 @@
/* EEPROM setting is a country code */
#define COUNTRY_ERD_FLAG 0x8000
#define MIN_6GHZ_OPER_CLASS 131
#define MAX_6GHZ_OPER_CLASS 135
extern const struct chan_map *channel_map;
extern const struct chan_map channel_map_us[];
@@ -928,4 +930,29 @@ QDF_STATUS reg_set_ignore_fw_reg_offload_ind(struct wlan_objmgr_psoc *psoc);
*/
bool reg_get_ignore_fw_reg_offload_ind(struct wlan_objmgr_psoc *psoc);
/**
* reg_set_6ghz_supported() - Set if 6ghz is supported
*
* @psoc: Pointer to psoc
* @val: value
*/
QDF_STATUS reg_set_6ghz_supported(struct wlan_objmgr_psoc *psoc,
bool val);
/**
* reg_is_6ghz_op_class() - Check whether 6ghz oper class
*
* @pdev: Pointer to pdev
* @op_class: oper class
*/
bool reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev,
uint8_t op_class);
/**
* reg_is_6ghz_supported() - Whether 6ghz is supported
*
* @pdev: pointer to pdev
*/
bool reg_is_6ghz_supported(struct wlan_objmgr_pdev *pdev);
#endif

View File

@@ -1089,21 +1089,21 @@ bool wlan_reg_is_disable_for_freq(struct wlan_objmgr_pdev *pdev, uint16_t freq);
enum reg_wifi_band wlan_reg_freq_to_band(uint16_t freq);
/**
* wlan_reg_min_chan_freq () - minimum channel frequency supported
* wlan_reg_min_chan_freq() - Minimum channel frequency supported
*
* Return: frequency
*/
uint16_t wlan_reg_min_chan_freq(void);
/**
* wlan_reg_max_chan_freq () - Checks chan state f
* wlan_reg_max_chan_freq() - Return max. frequency
*
* Return: frequency
*/
uint16_t wlan_reg_max_chan_freq(void);
/**
* wlan_reg_freq_width_to_chan_op_class () - get op class from freq
* wlan_reg_freq_width_to_chan_op_class() -Get op class from freq
* @pdev: pdev ptr
* @freq: channel frequency
* @chan_width: channel width
@@ -1123,7 +1123,7 @@ void wlan_reg_freq_width_to_chan_op_class(struct wlan_objmgr_pdev *pdev,
uint8_t *chan_num);
/**
* wlan_reg_freq_to_chan_and_op_class () - converts freq to oper class
* wlan_reg_freq_to_chan_and_op_class() - Converts freq to oper class
* @pdev: pdev ptr
* @freq: channel frequency
* @global_tbl_lookup: whether to look up global table
@@ -1143,7 +1143,7 @@ void wlan_reg_freq_to_chan_op_class(struct wlan_objmgr_pdev *pdev,
#endif /*CONFIG_CHAN_FREQ_API */
/**
* wlan_reg_get_op_class_width () - get operating class chan width
* wlan_reg_get_op_class_width() - Get operating class chan width
* @pdev: pdev ptr
* @freq: channel frequency
* @global_tbl_lookup: whether to look up global table
@@ -1156,4 +1156,22 @@ uint16_t wlan_reg_get_op_class_width(struct wlan_objmgr_pdev *pdev,
uint8_t op_class,
bool global_tbl_lookup);
/**
* wlan_reg_is_6ghz_op_class() - Whether 6ghz oper class
* @pdev: pdev ptr
* @op_class: operating class
*
* Return: bool
*/
bool wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev,
uint8_t op_class);
/**
* wlan_reg_is_6ghz_supported() - Whether 6ghz is supported
* @pdev: pdev ptr
*
* Return: bool
*/
bool wlan_reg_is_6ghz_supported(struct wlan_objmgr_pdev *pdev);
#endif

View File

@@ -69,9 +69,16 @@ QDF_STATUS tgt_reg_process_ch_avoid_event(struct wlan_objmgr_psoc *psoc,
/**
* tgt_reg_ignore_fw_reg_offload_ind() - Check whether regdb offload indication
* from FW needs to be ignored.
*
* @psoc: Pointer to psoc
*/
bool tgt_reg_ignore_fw_reg_offload_ind(struct wlan_objmgr_psoc *psoc);
/**
* tgt_reg_set_6ghz_supported() - Whether 6ghz is supported by the chip
* @psoc: Pointer to psoc
* @val: value
*/
QDF_STATUS tgt_reg_set_6ghz_supported(struct wlan_objmgr_psoc *psoc,
bool val);
#endif

View File

@@ -1012,3 +1012,14 @@ uint16_t wlan_reg_get_op_class_width(struct wlan_objmgr_pdev *pdev,
return reg_get_op_class_width(pdev, op_class,
global_tbl_lookup);
}
bool wlan_reg_is_6ghz_op_class(struct wlan_objmgr_pdev *pdev,
uint8_t op_class)
{
return reg_is_6ghz_op_class(pdev, op_class);
}
bool wlan_reg_is_6ghz_supported(struct wlan_objmgr_pdev *pdev)
{
return reg_is_6ghz_supported(pdev);
}

View File

@@ -75,3 +75,9 @@ bool tgt_reg_ignore_fw_reg_offload_ind(struct wlan_objmgr_psoc *psoc)
{
return reg_get_ignore_fw_reg_offload_ind(psoc);
}
QDF_STATUS tgt_reg_set_6ghz_supported(struct wlan_objmgr_psoc *psoc,
bool val)
{
return reg_set_6ghz_supported(psoc, val);
}

View File

@@ -5022,6 +5022,7 @@ typedef enum {
wmi_service_sae_roam_support,
wmi_service_owe_roam_support,
wmi_service_ext2_msg,
wmi_service_6ghz_support,
wmi_services_max,
} wmi_conv_service_ids;
#define WMI_SERVICE_UNAVAILABLE 0xFFFF

View File

@@ -13069,6 +13069,8 @@ static void populate_tlv_service(uint32_t *wmi_service)
WMI_SERVICE_WPA3_SAE_ROAM_SUPPORT;
wmi_service[wmi_service_owe_roam_support] =
WMI_SERVICE_WPA3_OWE_ROAM_SUPPORT;
wmi_service[wmi_service_6ghz_support] =
WMI_SERVICE_6GHZ_SUPPORT;
}
/**