qcacld-3.0: Add FW offload INI items (2)

Add the following fw param ini items to the fw offload component

CFG_ENABLE_SMART_CHAINMASK - gEnableSmartChainmask
CFG_ENABLE_FW_RTS_PROFILE - gEnableRTSProfiles
CFG_ENABLE_FW_DEBUG_LOG_LEVEL - gFwDebugLogLevel
CFG_ENABLE_FW_LOG_TYPE - gFwDebugLogType
CFG_RA_FILTER_ENABLE - gRAFilterEnable
CFG_SET_TSF_GPIO_PIN - gtsf_gpio_pin
CFG_DHCP_SERVER_OFFLOAD_SUPPORT - gEnableDeauthToDisassocMap
CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT - gDHCPMaxNumClients

Change-Id: I296e095cf2a7b83856e1ab777c7dbdcc005ee96a
CRs-Fixed: 2316269
This commit is contained in:
Sourav Mohapatra
2018-09-12 10:03:51 +05:30
committed by nshrivas
parent 5f19357a4b
commit b6740f6150
5 changed files with 547 additions and 1 deletions

View File

@@ -121,6 +121,14 @@ struct wlan_fwol_ie_whitelist {
* @lower_brssi_thresh: Lower BRSSI threshold
* @enable_dtim_1chrx: Enable/disable DTIM 1 CHRX
* @alternative_chainmask_enabled: Alternate chainmask
* @smart_chainmask_enabled: Enable/disable chainmask
* @get_rts_profile: Set the RTS profile
* @enable_fw_log_level: Set the FW log level
* @enable_fw_log_type: Set the FW log type
* @is_rate_limit_enabled: Enable/disable RA rate limited
* @tsf_gpio_pin: TSF GPIO Pin config
* @enable_dhcp_server_offload: DHCP Offload is enabled or not
* @dhcp_max_num_clients: Max number of DHCP client supported
*/
struct wlan_fwol_cfg {
/* Add CFG and INI items here */
@@ -136,6 +144,20 @@ struct wlan_fwol_cfg {
uint16_t lower_brssi_thresh;
bool enable_dtim_1chrx;
bool alternative_chainmask_enabled;
bool smart_chainmask_enabled;
uint16_t get_rts_profile;
uint16_t enable_fw_log_level;
uint16_t enable_fw_log_type;
#ifdef FEATURE_WLAN_RA_FILTERING
bool is_rate_limit_enabled;
#endif
#ifdef WLAN_FEATURE_TSF
uint32_t tsf_gpio_pin;
#endif
#ifdef DHCP_SERVER_OFFLOAD
bool enable_dhcp_server_offload;
uint32_t dhcp_max_num_clients;
#endif
};
/**

View File

@@ -91,6 +91,70 @@ fwol_init_ie_whiltelist_in_cfg(struct wlan_objmgr_psoc *psoc,
whitelist->ie_bitmap_7 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP7);
}
/**
* ucfg_fwol_fetch_dhcp_server_settings: Populate the enable_dhcp_server_offload
* and dhcp_max_num_clients from cfg
* @psoc: The global psoc handler
* @fwol_cfg: The cfg structure
*
* Return: none
*/
#ifdef DHCP_SERVER_OFFLOAD
static void ucfg_fwol_fetch_dhcp_server_settings(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_cfg *fwol_cfg)
{
fwol_cfg->enable_dhcp_server_offload =
cfg_get(psoc, CFG_DHCP_SERVER_OFFLOAD_SUPPORT);
fwol_cfg->dhcp_max_num_clients =
cfg_get(psoc, CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT);
}
#else
static void ucfg_fwol_fetch_dhcp_server_settings(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_cfg *fwol_cfg)
{
}
#endif
/**
* ucfg_fwol_fetch_tsf_gpio_pin: Populate the tsf_gpio_pin from cfg
* @psoc: The global psoc handler
* @fwol_cfg: The cfg structure
*
* Return: none
*/
#ifdef WLAN_FEATURE_TSF
static void ucfg_fwol_fetch_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_cfg *fwol_cfg)
{
fwol_cfg->tsf_gpio_pin = cfg_get(psoc, CFG_SET_TSF_GPIO_PIN);
}
#else
static void ucfg_fwol_fetch_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_cfg *fwol_cfg)
{
}
#endif
/**
* ucfg_fwol_fetch_ra_filter: Populate the RA filter enabled or not from cfg
* @psoc: The global psoc handler
* @fwol_cfg: The cfg structure
*
* Return: none
*/
#ifdef FEATURE_WLAN_RA_FILTERING
static void ucfg_fwol_fetch_ra_filter(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_cfg *fwol_cfg)
{
fwol_cfg->is_rate_limit_enabled = cfg_get(psoc, CFG_RA_FILTER_ENABLE);
}
#else
static void ucfg_fwol_fetch_ra_filter(struct wlan_objmgr_psoc *psoc,
struct wlan_fwol_cfg *fwol_cfg)
{
}
#endif
QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
@@ -119,6 +183,15 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
fwol_cfg->enable_dtim_1chrx = cfg_get(psoc, CFG_DTIM_1CHRX_ENABLE);
fwol_cfg->alternative_chainmask_enabled =
cfg_get(psoc, CFG_ENABLE_COEX_ALT_CHAINMASK);
fwol_cfg->smart_chainmask_enabled =
cfg_get(psoc, CFG_ENABLE_SMART_CHAINMASK);
fwol_cfg->get_rts_profile = cfg_get(psoc, CFG_ENABLE_FW_RTS_PROFILE);
fwol_cfg->enable_fw_log_level =
cfg_get(psoc, CFG_ENABLE_FW_DEBUG_LOG_LEVEL);
fwol_cfg->enable_fw_log_type = cfg_get(psoc, CFG_ENABLE_FW_LOG_TYPE);
ucfg_fwol_fetch_ra_filter(psoc, fwol_cfg);
ucfg_fwol_fetch_tsf_gpio_pin(psoc, fwol_cfg);
ucfg_fwol_fetch_dhcp_server_settings(psoc, fwol_cfg);
return status;
}

View File

@@ -233,8 +233,215 @@
0, \
"Enable Co-Ex Alternative Chainmask")
/*
* <ini>
* gEnableSmartChainmask - Enable Smart Chainmask
* @Min: 0
* @Max: 1
* @Default: 0
*
* This ini is used to enable/disable the Smart Chainmask feature via
* the WMI_PDEV_PARAM_SMART_CHAINMASK_SCHEME firmware parameter.
*
* Related: None
*
* Supported Feature: STA
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_ENABLE_SMART_CHAINMASK CFG_INI_BOOL( \
"gEnableSmartChainmask", \
0, \
"Enable/disable the Smart Chainmask feature")
/*
* <ini>
* gEnableRTSProfiles - It will use configuring different RTS profiles
* @Min: 0
* @Max: 66
* @Default: 33
*
* This ini used for configuring different RTS profiles
* to firmware.
* Following are the valid values for the rts profile:
* RTSCTS_DISABLED 0
* NOT_ALLOWED 1
* NOT_ALLOWED 2
* RTSCTS_DISABLED 16
* RTSCTS_ENABLED_4_SECOND_RATESERIES 17
* CTS2SELF_ENABLED_4_SECOND_RATESERIES 18
* RTSCTS_DISABLED 32
* RTSCTS_ENABLED_4_SWRETRIES 33
* CTS2SELF_ENABLED_4_SWRETRIES 34
* NOT_ALLOWED 48
* NOT_ALLOWED 49
* NOT_ALLOWED 50
* RTSCTS_DISABLED 64
* RTSCTS_ENABLED_4_ALL_RATESERIES 65
* CTS2SELF_ENABLED_4_ALL_RATESERIES 66
*
* Related: None
*
* Supported Feature: STA
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_ENABLE_FW_RTS_PROFILE CFG_INI_INT( \
"gEnableRTSProfiles", \
0, \
66, \
33, \
CFG_VALUE_OR_DEFAULT, \
"It is used to configure different RTS profiles")
/* <ini>
* gFwDebugLogLevel: Takes values from enum DBGLOG_LOG_LVL,
* make default value as DBGLOG_WARN to enable error and
* warning logs by default.
* @Min: 0
* @Max: 255
* @Default: 3
*
* Related: None
*
* Supported Features: Debugging
*
* Usage: Internal
*
* </ini>
*/
#define CFG_ENABLE_FW_DEBUG_LOG_LEVEL CFG_INI_INT( \
"gFwDebugLogLevel", \
0, \
255, \
3, \
CFG_VALUE_OR_DEFAULT, \
"enable error and warning logs by default")
/* <ini>
* gFwDebugLogType: takes values from enum dbglog_process_t,
* make default value as DBGLOG_PROCESS_NET_RAW to give the
* logs to net link since cnss_diag service is started at boot
* time by default.
* @Min: 0
* @Max: 255
* @Default: 3
*
* Related: None
*
* Supported Features: Debugging
*
* Usage: Internal
*
* </ini>
*/
#define CFG_ENABLE_FW_LOG_TYPE CFG_INI_INT( \
"gFwDebugLogType", \
0, \
255, \
3, \
CFG_VALUE_OR_DEFAULT, \
"Default value to be given to the net link cnss_diag service")
#ifdef FEATURE_WLAN_RA_FILTERING
/* <ini>
* gRAFilterEnable
* @Min: 0
* @Max: 1
* @Default: 1
*
* Related: None
*
* Usage: Internal
*
* </ini>
*/
#define CFG_RA_FILTER_ENABLE CFG_INI_BOOL( \
"gRAFilterEnable", \
1, \
"Enable RA Filter")
#else
#define CFG_RA_FILTER_ENABLE
#endif
/* <ini>
* gtsf_gpio_pin
* @Min: 0
* @Max: 254
* @Default: 255
*
* GPIO pin to toggle when capture tsf
*
* Related: None
*
* Usage: Internal
*
* </ini>
*/
#define CFG_SET_TSF_GPIO_PIN CFG_INI_INT( \
"gtsf_gpio_pin", \
0, \
254, \
255, \
CFG_VALUE_OR_DEFAULT, \
"GPIO pin to toggle when capture tsf")
#ifdef DHCP_SERVER_OFFLOAD
/* <ini>
* gEnableDeauthToDisassocMap
* @Min: 0
* @Max: 1
* @Default: 0
*
* DHCP Server offload support
*
* Related: None
*
* Usage: Internal
*
* </ini>
*/
#define CFG_DHCP_SERVER_OFFLOAD_SUPPORT CFG_INI_BOOL( \
"gEnableDeauthToDisassocMap", \
0, \
"DHCP Server offload support")
/* <ini>
* gDHCPMaxNumClients
* @Min: 1
* @Max: 8
* @Default: 8
*
* Number of DHCP server offload clients
*
* Related: None
*
* Usage: Internal
*
* </ini>
*/
#define CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT CFG_INI_INT( \
"gDHCPMaxNumClients", \
1, \
8, \
8, \
CFG_VALUE_OR_DEFAULT, \
"Number of DHCP server offload clients")
#define CFG_FWOL_DHCP \
CFG(CFG_DHCP_SERVER_OFFLOAD_SUPPORT) \
CFG(CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT)
#else
#define CFG_FWOL_DHCP
#endif
#define CFG_FWOL_GENERIC_ALL \
CFG_FWOL_DHCP \
CFG(CFG_ENABLE_ANI) \
CFG(CFG_SET_RTS_FOR_SIFS_BURSTING) \
CFG(CFG_MAX_MPDUS_IN_AMPDU) \
@@ -243,6 +450,12 @@
CFG(CFG_UPPER_BRSSI_THRESH) \
CFG(CFG_LOWER_BRSSI_THRESH) \
CFG(CFG_DTIM_1CHRX_ENABLE) \
CFG(CFG_ENABLE_COEX_ALT_CHAINMASK)
CFG(CFG_ENABLE_COEX_ALT_CHAINMASK) \
CFG(CFG_ENABLE_SMART_CHAINMASK) \
CFG(CFG_ENABLE_FW_RTS_PROFILE) \
CFG(CFG_ENABLE_FW_DEBUG_LOG_LEVEL) \
CFG(CFG_ENABLE_FW_LOG_TYPE) \
CFG(CFG_RA_FILTER_ENABLE) \
CFG(CFG_SET_TSF_GPIO_PIN)
#endif

View File

@@ -209,4 +209,92 @@ QDF_STATUS
ucfg_get_alternative_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
bool *alternative_chainmask_enabled);
/**
* ucfg_get_smart_chainmask_enabled() - Assigns smart_chainmask_enabled value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_get_smart_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
bool *smart_chainmask_enabled);
/**
* ucfg_fwol_get_rts_profile() - Assigns get_rts_profile value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_get_rts_profile(struct wlan_objmgr_psoc *psoc,
uint16_t *get_rts_profile);
/**
* ucfg_fwol_get_enable_fw_log_level() - Assigns enable_fw_log_level value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc *psoc,
uint16_t *enable_fw_log_level);
/**
* ucfg_fwol_get_enable_fw_log_type() - Assigns enable_fw_log_type value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc,
uint16_t *enable_fw_log_type);
#ifdef FEATURE_WLAN_RA_FILTERING
/**
* ucfg_fwol_set_is_rate_limit_enabled() - Sets the is_rate_limit_enabled value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
bool is_rate_limit_enabled);
/**
* ucfg_fwol_get_is_rate_limit_enabled() - Assigns is_rate_limit_enabled value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
bool *is_rate_limit_enabled);
#endif /* FEATURE_WLAN_RA_FILTERING */
/**
* ucfg_fwol_get_tsf_gpio_pin() - Assigns tsf_gpio_pin value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
uint32_t *tsf_gpio_pin);
#ifdef DHCP_SERVER_OFFLOAD
/**
* ucfg_fwol_get_enable_dhcp_server_offload()-Assign enable_dhcp_server_offload
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS
ucfg_fwol_get_enable_dhcp_server_offload(struct wlan_objmgr_psoc *psoc,
bool *enable_dhcp_server_offload);
/**
* ucfg_fwol_get_dhcp_max_num_clients() - Assigns dhcp_max_num_clients value
* @psoc: pointer to the psoc object
*
* Return: QDF Status
*/
QDF_STATUS ucfg_fwol_get_dhcp_max_num_clients(struct wlan_objmgr_psoc *psoc,
uint32_t *dhcp_max_num_clients);
#endif
#endif /* _WLAN_FWOL_UCFG_API_H_ */

View File

@@ -389,3 +389,153 @@ ucfg_get_alternative_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
fwol_obj->cfg.alternative_chainmask_enabled;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_get_smart_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
bool *smart_chainmask_enabled)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*smart_chainmask_enabled =
fwol_obj->cfg.smart_chainmask_enabled;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_fwol_get_rts_profile(struct wlan_objmgr_psoc *psoc,
uint16_t *get_rts_profile)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*get_rts_profile = fwol_obj->cfg.get_rts_profile;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc *psoc,
uint16_t *enable_fw_log_level)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*enable_fw_log_level = fwol_obj->cfg.enable_fw_log_level;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc,
uint16_t *enable_fw_log_type)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*enable_fw_log_type = fwol_obj->cfg.enable_fw_log_type;
return QDF_STATUS_SUCCESS;
}
#ifdef FEATURE_WLAN_RA_FILTERING
QDF_STATUS ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
bool is_rate_limit_enabled)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
fwol_obj->cfg.is_rate_limit_enabled = is_rate_limit_enabled;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
bool *is_rate_limit_enabled)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*is_rate_limit_enabled = fwol_obj->cfg.is_rate_limit_enabled;
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef WLAN_FEATURE_TSF
QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
uint32_t *tsf_gpio_pin)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*tsf_gpio_pin = fwol_obj->cfg.tsf_gpio_pin;
return QDF_STATUS_SUCCESS;
}
#else
QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
uint32_t *tsf_gpio_pin)
{
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef DHCP_SERVER_OFFLOAD
QDF_STATUS
ucfg_fwol_get_enable_dhcp_server_offload(struct wlan_objmgr_psoc *psoc,
bool *enable_dhcp_server_offload)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*enable_dhcp_server_offload = fwol_obj->cfg.enable_dhcp_server_offload;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS ucfg_fwol_get_dhcp_max_num_clients(struct wlan_objmgr_psoc *psoc,
uint32_t *dhcp_max_num_clients)
{
struct wlan_fwol_psoc_obj *fwol_obj;
fwol_obj = fwol_get_psoc_obj(psoc);
if (!fwol_obj) {
fwol_err("Failed to get FWOL obj");
return QDF_STATUS_E_FAILURE;
}
*dhcp_max_num_clients = fwol_obj->cfg.dhcp_max_num_clients;
return QDF_STATUS_SUCCESS;
}
#endif