qcacmn: Populate spectral capability and send via cfg80211
Populate Spectral capability structure with scaling parameters from extended service ready event parameters. Send the spectral caps via cf80211 interface. CRs-Fixed: 2379652 Change-Id: Id0372bdd40843c2101df32d2e71920027a24909f
This commit is contained in:

committed by
nshrivas

parent
ac0ddecb36
commit
d4b7e3b572
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -550,7 +550,7 @@ int wlan_cfg80211_spectral_scan_get_cap(struct wiphy *wiphy,
|
|||||||
|
|
||||||
wlan_spectral_get_cap(pdev, &spectral_cap);
|
wlan_spectral_get_cap(pdev, &spectral_cap);
|
||||||
|
|
||||||
skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, 5 * sizeof(u32) +
|
skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, 10 * sizeof(u32) +
|
||||||
NLA_HDRLEN + NLMSG_HDRLEN);
|
NLA_HDRLEN + NLMSG_HDRLEN);
|
||||||
if (!skb) {
|
if (!skb) {
|
||||||
qdf_print(" reply skb alloc failed");
|
qdf_print(" reply skb alloc failed");
|
||||||
@@ -585,6 +585,38 @@ int wlan_cfg80211_spectral_scan_get_cap(struct wiphy *wiphy,
|
|||||||
spectral_cap.hw_gen))
|
spectral_cap.hw_gen))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
if (spectral_cap.is_scaling_params_populated) {
|
||||||
|
if (nla_put_u16(
|
||||||
|
skb,
|
||||||
|
QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_FORMULA_ID,
|
||||||
|
spectral_cap.formula_id))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (nla_put_u16(
|
||||||
|
skb,
|
||||||
|
QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_LOW_LEVEL_OFFSET,
|
||||||
|
spectral_cap.low_level_offset))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (nla_put_u16(
|
||||||
|
skb,
|
||||||
|
QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_HIGH_LEVEL_OFFSET,
|
||||||
|
spectral_cap.high_level_offset))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (nla_put_u16(
|
||||||
|
skb,
|
||||||
|
QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_RSSI_THR,
|
||||||
|
spectral_cap.rssi_thr))
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (nla_put_u8(
|
||||||
|
skb,
|
||||||
|
QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CAP_DEFAULT_AGC_MAX_GAIN,
|
||||||
|
spectral_cap.default_agc_max_gain))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
qal_devcfg_send_response((qdf_nbuf_t)skb);
|
qal_devcfg_send_response((qdf_nbuf_t)skb);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2017-2018 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2011, 2017-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -105,6 +105,12 @@ enum spectral_cap_hw_gen {
|
|||||||
* @spectral_cap: Spectral capability
|
* @spectral_cap: Spectral capability
|
||||||
* @advncd_spectral_cap: Advanced spectral capability
|
* @advncd_spectral_cap: Advanced spectral capability
|
||||||
* @hw_gen: Spectral hw generation as defined in spectral_cap_hw_gen
|
* @hw_gen: Spectral hw generation as defined in spectral_cap_hw_gen
|
||||||
|
* @is_scaling_params_populated: indicates whether scaling params is populated
|
||||||
|
* @formula_id: formula_id
|
||||||
|
* @low_level_offset: low_level_offset
|
||||||
|
* @high_level_offset: high_level_offset
|
||||||
|
* @rssi_thr: rssi_thr
|
||||||
|
* @default_agc_max_gain: default_agc_max_gain
|
||||||
*/
|
*/
|
||||||
struct spectral_caps {
|
struct spectral_caps {
|
||||||
uint8_t phydiag_cap;
|
uint8_t phydiag_cap;
|
||||||
@@ -112,6 +118,12 @@ struct spectral_caps {
|
|||||||
uint8_t spectral_cap;
|
uint8_t spectral_cap;
|
||||||
uint8_t advncd_spectral_cap;
|
uint8_t advncd_spectral_cap;
|
||||||
uint32_t hw_gen;
|
uint32_t hw_gen;
|
||||||
|
bool is_scaling_params_populated;
|
||||||
|
uint16_t formula_id;
|
||||||
|
int16_t low_level_offset;
|
||||||
|
int16_t high_level_offset;
|
||||||
|
int16_t rssi_thr;
|
||||||
|
uint8_t default_agc_max_gain;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SPECTRAL_IOCTL_PARAM_NOVAL (65535)
|
#define SPECTRAL_IOCTL_PARAM_NOVAL (65535)
|
||||||
|
@@ -1286,6 +1286,25 @@ static inline struct wlan_psoc_host_dbr_ring_caps
|
|||||||
|
|
||||||
return psoc_info->info.dbr_ring_cap;
|
return psoc_info->info.dbr_ring_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_psoc_get_spectral_scaling_params() - get Spectral scaling params
|
||||||
|
* @psoc_info: pointer to structure target_psoc_info
|
||||||
|
*
|
||||||
|
* API to get Spectral scaling params
|
||||||
|
*
|
||||||
|
* Return: structure pointer to wlan_psoc_host_spectral_scaling_params
|
||||||
|
*/
|
||||||
|
static inline struct wlan_psoc_host_spectral_scaling_params
|
||||||
|
*target_psoc_get_spectral_scaling_params(
|
||||||
|
struct target_psoc_info *psoc_info)
|
||||||
|
{
|
||||||
|
if (!psoc_info)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return psoc_info->info.scaling_params;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* target_psoc_get_mem_chunks() - get mem_chunks
|
* target_psoc_get_mem_chunks() - get mem_chunks
|
||||||
* @psoc_info: pointer to structure target_psoc_info
|
* @psoc_info: pointer to structure target_psoc_info
|
||||||
|
@@ -1267,13 +1267,37 @@ target_if_spectral_get_macaddr(void *arg, char *addr)
|
|||||||
*
|
*
|
||||||
* This is a workaround.
|
* This is a workaround.
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
void
|
QDF_STATUS
|
||||||
target_if_init_spectral_capability(struct target_if_spectral *spectral)
|
target_if_init_spectral_capability(struct target_if_spectral *spectral)
|
||||||
{
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
struct wlan_objmgr_pdev *pdev;
|
||||||
|
struct wlan_psoc_host_spectral_scaling_params *scaling_params;
|
||||||
|
uint8_t num_bin_scaling_params, param_idx, pdev_id;
|
||||||
|
struct target_psoc_info *tgt_psoc_info;
|
||||||
|
struct wlan_psoc_host_service_ext_param *ext_svc_param;
|
||||||
struct spectral_caps *pcap = &spectral->capability;
|
struct spectral_caps *pcap = &spectral->capability;
|
||||||
|
|
||||||
|
pdev = spectral->pdev_obj;
|
||||||
|
psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
if (!psoc) {
|
||||||
|
spectral_err("psoc is null");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
tgt_psoc_info = wlan_psoc_get_tgt_if_handle(psoc);
|
||||||
|
if (!tgt_psoc_info) {
|
||||||
|
spectral_err("target_psoc_info is null");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ext_svc_param = target_psoc_get_service_ext_param(tgt_psoc_info);
|
||||||
|
num_bin_scaling_params = ext_svc_param->num_bin_scaling_params;
|
||||||
|
scaling_params = target_psoc_get_spectral_scaling_params(tgt_psoc_info);
|
||||||
|
pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev);
|
||||||
|
|
||||||
/* XXX : Workaround: Set Spectral capability */
|
/* XXX : Workaround: Set Spectral capability */
|
||||||
pcap = &spectral->capability;
|
pcap = &spectral->capability;
|
||||||
pcap->phydiag_cap = 1;
|
pcap->phydiag_cap = 1;
|
||||||
@@ -1281,6 +1305,23 @@ target_if_init_spectral_capability(struct target_if_spectral *spectral)
|
|||||||
pcap->spectral_cap = 1;
|
pcap->spectral_cap = 1;
|
||||||
pcap->advncd_spectral_cap = 1;
|
pcap->advncd_spectral_cap = 1;
|
||||||
pcap->hw_gen = spectral->spectral_gen;
|
pcap->hw_gen = spectral->spectral_gen;
|
||||||
|
|
||||||
|
for (param_idx = 0; param_idx < num_bin_scaling_params; param_idx++) {
|
||||||
|
if (scaling_params[param_idx].pdev_id == pdev_id) {
|
||||||
|
pcap->is_scaling_params_populated = true;
|
||||||
|
pcap->formula_id = scaling_params[param_idx].formula_id;
|
||||||
|
pcap->low_level_offset =
|
||||||
|
scaling_params[param_idx].low_level_offset;
|
||||||
|
pcap->high_level_offset =
|
||||||
|
scaling_params[param_idx].high_level_offset;
|
||||||
|
pcap->rssi_thr = scaling_params[param_idx].rssi_thr;
|
||||||
|
pcap->default_agc_max_gain =
|
||||||
|
scaling_params[param_idx].default_agc_max_gain;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef QCA_SUPPORT_SPECTRAL_SIMULATION
|
#ifdef QCA_SUPPORT_SPECTRAL_SIMULATION
|
||||||
@@ -1925,7 +1966,11 @@ target_if_pdev_spectral_init(struct wlan_objmgr_pdev *pdev)
|
|||||||
|
|
||||||
spectral->params_valid = false;
|
spectral->params_valid = false;
|
||||||
/* Init spectral capability */
|
/* Init spectral capability */
|
||||||
target_if_init_spectral_capability(spectral);
|
if (target_if_init_spectral_capability(spectral) !=
|
||||||
|
QDF_STATUS_SUCCESS) {
|
||||||
|
qdf_mem_free(spectral);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (target_if_spectral_attach_simulation(spectral) < 0)
|
if (target_if_spectral_attach_simulation(spectral) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@@ -1762,9 +1762,10 @@ uint32_t target_if_spectral_sops_get_params(
|
|||||||
*
|
*
|
||||||
* This is a workaround.
|
* This is a workaround.
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
void target_if_init_spectral_capability(struct target_if_spectral *spectral);
|
QDF_STATUS
|
||||||
|
target_if_init_spectral_capability(struct target_if_spectral *spectral);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* target_if_start_spectral_scan() - Start spectral scan
|
* target_if_start_spectral_scan() - Start spectral scan
|
||||||
|
@@ -1303,6 +1303,22 @@ QDF_STATUS wmi_extract_dbr_ring_cap_service_ready_ext(
|
|||||||
uint8_t *evt_buf, uint8_t idx,
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
struct wlan_psoc_host_dbr_ring_caps *param);
|
struct wlan_psoc_host_dbr_ring_caps *param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wmi_extract_spectral_scaling_params_service_ready_ext: Extract Spectral
|
||||||
|
* scaling params received through
|
||||||
|
* extended service ready event
|
||||||
|
* @wmi_hdl: WMI handle
|
||||||
|
* @evt_buf: Event buffer
|
||||||
|
* @idx: Index
|
||||||
|
* @param: Pointer to Spectral scaling params
|
||||||
|
*
|
||||||
|
* Return: QDF status of operation
|
||||||
|
*/
|
||||||
|
QDF_STATUS wmi_extract_spectral_scaling_params_service_ready_ext(
|
||||||
|
void *wmi_hdl,
|
||||||
|
uint8_t *evt_buf, uint8_t idx,
|
||||||
|
struct wlan_psoc_host_spectral_scaling_params *param);
|
||||||
|
|
||||||
QDF_STATUS wmi_extract_pdev_utf_event(void *wmi_hdl,
|
QDF_STATUS wmi_extract_pdev_utf_event(void *wmi_hdl,
|
||||||
uint8_t *evt_buf,
|
uint8_t *evt_buf,
|
||||||
struct wmi_host_pdev_utf_event *param);
|
struct wmi_host_pdev_utf_event *param);
|
||||||
|
@@ -38,22 +38,6 @@ typedef struct wmi_unified *wmi_unified_t;
|
|||||||
QDF_STATUS wmi_unified_dbr_ring_cfg(void *wmi_hdl,
|
QDF_STATUS wmi_unified_dbr_ring_cfg(void *wmi_hdl,
|
||||||
struct direct_buf_rx_cfg_req *cfg);
|
struct direct_buf_rx_cfg_req *cfg);
|
||||||
|
|
||||||
/**
|
|
||||||
* wmi_extract_spectral_scaling_params_service_ready_ext: Extract Spectral
|
|
||||||
* scaling params received through
|
|
||||||
* extended service ready event
|
|
||||||
* @wmi_hdl: WMI handle
|
|
||||||
* @evt_buf: Event buffer
|
|
||||||
* @idx: Index
|
|
||||||
* @param: Pointer to Spectral scaling params
|
|
||||||
*
|
|
||||||
* Return: QDF status of operation
|
|
||||||
*/
|
|
||||||
QDF_STATUS wmi_extract_spectral_scaling_params_service_ready_ext(
|
|
||||||
void *wmi_hdl,
|
|
||||||
uint8_t *evt_buf, uint8_t idx,
|
|
||||||
struct wlan_psoc_host_spectral_scaling_params *param);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wmi_extract_dbr_buf_release_fixed : Extract direct buffer rx fixed param
|
* wmi_extract_dbr_buf_release_fixed : Extract direct buffer rx fixed param
|
||||||
* from buffer release event
|
* from buffer release event
|
||||||
|
Reference in New Issue
Block a user