qcacld-3.0: Add vendor command API for EPCS
Add vendor command API to set EPCS (Emergency Preparedness Communications Service) capability and trigger EPCS function enable or disable. Change-Id: I2ffe4d268731c57dd6e3ddfe0586d4dcb77dc611 CRs-Fixed: 3511170
This commit is contained in:

committed by
Rahul Choudhary

orang tua
1c77981358
melakukan
fe32c542b7
@@ -139,6 +139,36 @@ enum t2lm_negotiation_support {
|
||||
T2LM_NEGOTIATION_MAX = T2LM_NEGOTIATION_LAST - 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum wlan_epcs_capability - EPCS capability
|
||||
* @WLAN_EPCS_CAP_DISABLED: EPCS capability disable
|
||||
* @WLAN_EPCS_CAP_ENABLE: EPCS capability enable
|
||||
* @WLAN_EPCS_CAP_LAST: last value in enum
|
||||
* @WLAN_EPCS_CAP_MAX: max value supported
|
||||
*/
|
||||
enum wlan_epcs_capability {
|
||||
WLAN_EPCS_CAP_DISABLED = 0,
|
||||
WLAN_EPCS_CAP_ENABLE = 1,
|
||||
/* keep this last */
|
||||
WLAN_EPCS_CAP_LAST,
|
||||
WLAN_EPCS_CAP_MAX = WLAN_EPCS_CAP_LAST - 1,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum wlan_epcs_frame - EPCS frame type
|
||||
* @WLAN_EPCS_FRAME_TEARDOWN: EPCS teardown frame
|
||||
* @WLAN_EPCS_FRAME_REQUEST: EPCS request frame
|
||||
* @WLAN_EPCS_FRAME_LAST: last value in enum
|
||||
* @WLAN_EPCS_FRAME_MAX: max value supported
|
||||
*/
|
||||
enum wlan_epcs_frame {
|
||||
WLAN_EPCS_FRAME_TEARDOWN = 0,
|
||||
WLAN_EPCS_FRAME_REQUEST = 1,
|
||||
/* keep this last */
|
||||
WLAN_EPCS_FRAME_LAST,
|
||||
WLAN_EPCS_FRAME_MAX = WLAN_EPCS_FRAME_LAST - 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* pmfSaQueryMaxRetries - Control PMF SA query retries for SAP
|
||||
* @Min: 0
|
||||
|
@@ -206,6 +206,8 @@
|
||||
#include "wlan_mlo_mgr_roam.h"
|
||||
#include "wlan_hdd_mlo.h"
|
||||
#include <wlan_psoc_mlme_ucfg_api.h>
|
||||
#include "wlan_epcs_api.h"
|
||||
#include "wlan_mlo_epcs_ucfg_api.h"
|
||||
#include <wlan_ll_sap_ucfg_api.h>
|
||||
|
||||
/*
|
||||
@@ -8223,6 +8225,10 @@ const struct nla_policy wlan_hdd_wifi_config_policy[
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_SIMULTANEOUS_LINKS] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EPCS_CAPABILITY] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EPCS_FUNCTION] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_NUM_LINKS] = {
|
||||
.type = NLA_U8},
|
||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MODE] = {
|
||||
@@ -10978,6 +10984,81 @@ hdd_test_config_emlsr_action_mode(struct hdd_adapter *adapter,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_set_epcs_capability() - Set EPCS capability enable or not
|
||||
* @link_info: link info pointer
|
||||
* @attr: pointer to nla attr
|
||||
*
|
||||
* Return: 0 on success, negative on failure
|
||||
*/
|
||||
static int hdd_set_epcs_capability(struct wlan_hdd_link_info *link_info,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
uint8_t cfg_val;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
|
||||
if (!vdev)
|
||||
return -EINVAL;
|
||||
|
||||
cfg_val = nla_get_u8(attr);
|
||||
hdd_debug("Configure EPCS capability %s(%d)",
|
||||
cfg_val ? "Enable" : "Disable", cfg_val);
|
||||
if (cfg_val < WLAN_EPCS_CAP_DISABLED ||
|
||||
cfg_val > WLAN_EPCS_CAP_ENABLE) {
|
||||
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ucfg_epcs_set_config(vdev, cfg_val);
|
||||
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_trigger_epcs_function() - Trigger EPCS function to enable or disable
|
||||
* @link_info: link info pointer
|
||||
* @attr: pointer to nla attr
|
||||
*
|
||||
* Return: 0 on success, negative on failure
|
||||
*/
|
||||
static int hdd_trigger_epcs_function(struct wlan_hdd_link_info *link_info,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
uint8_t cfg_val;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
enum wlan_epcs_evt event;
|
||||
int status = -EINVAL;
|
||||
|
||||
vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
|
||||
if (!vdev)
|
||||
return status;
|
||||
|
||||
cfg_val = nla_get_u8(attr);
|
||||
hdd_debug("Trigger EPCS %d", cfg_val);
|
||||
|
||||
switch (cfg_val) {
|
||||
/* enable EPCS function to send request frame */
|
||||
case WLAN_EPCS_FRAME_REQUEST:
|
||||
event = WLAN_EPCS_EV_ACTION_FRAME_TX_REQ;
|
||||
break;
|
||||
/* disable EPCS function to send teardown frame */
|
||||
case WLAN_EPCS_FRAME_TEARDOWN:
|
||||
event = WLAN_EPCS_EV_ACTION_FRAME_TX_TEARDOWN;
|
||||
break;
|
||||
default:
|
||||
goto rel_ref;
|
||||
}
|
||||
|
||||
ucfg_epcs_deliver_cmd(vdev, event);
|
||||
status = 0;
|
||||
|
||||
rel_ref:
|
||||
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_ID);
|
||||
return status;
|
||||
}
|
||||
#else
|
||||
static inline int
|
||||
hdd_test_config_emlsr_mode(struct hdd_context *hdd_ctx, bool cfg_val)
|
||||
@@ -11208,6 +11289,20 @@ int hdd_set_emlsr_mode(struct wlan_hdd_link_info *link_info,
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
hdd_set_epcs_capability(struct wlan_hdd_link_info *link_info,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int
|
||||
hdd_trigger_epcs_function(struct wlan_hdd_link_info *link_info,
|
||||
const struct nlattr *attr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -11341,6 +11436,10 @@ static const struct independent_setters independent_setters[] = {
|
||||
hdd_set_wfc_state},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_SIMULTANEOUS_LINKS,
|
||||
hdd_set_eht_max_simultaneous_links},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EPCS_CAPABILITY,
|
||||
hdd_set_epcs_capability},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EPCS_FUNCTION,
|
||||
hdd_trigger_epcs_function},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MAX_NUM_LINKS,
|
||||
hdd_set_eht_max_num_links},
|
||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_EHT_MLO_MODE,
|
||||
|
Reference in New Issue
Block a user