qcacmn: Add support for chan_nf noise floor

Add function for extract_nfcal_power_ev_param and
register wmi_pdev_nfcal_power_all_channels_event_id event
to support noise floor in HK.

Change-Id: I6eef823b507be94c65df026664244eec7fc07e24
CRs-Fixed: 2157972
This commit is contained in:
nobelj
2018-01-25 16:35:36 -08:00
committed by Nitesh Shrivastav
parent 1848acda2b
commit 92d5175130
6 changed files with 120 additions and 36 deletions

View File

@@ -1424,7 +1424,8 @@ uint8_t *wmi_extract_dbglog_data_len(void *wmi_hdl,
QDF_STATUS wmi_send_ext_resource_config(void *wmi_hdl,
wmi_host_ext_resource_config *ext_cfg);
QDF_STATUS wmi_unified_nf_dbr_dbm_info_get_cmd_send(void *wmi_hdl);
QDF_STATUS wmi_unified_nf_dbr_dbm_info_get_cmd_send(void *wmi_hdl,
uint8_t mac_id);
QDF_STATUS wmi_unified_packet_power_info_get_cmd_send(void *wmi_hdl,
struct packet_power_info_params *param);

View File

@@ -287,8 +287,8 @@
#define WMI_HOST_TPC_RATE_MAX 160
#define WMI_HOST_TPC_TX_NUM_CHAIN 4
#define WMI_HOST_RXG_CAL_CHAN_MAX 4
#define WMI_HOST_MAX_NUM_CHAINS 4
#define WMI_HOST_RXG_CAL_CHAN_MAX 8
#define WMI_HOST_MAX_NUM_CHAINS 8
#define WMI_MAX_NUM_OF_RATE_THRESH 4
#define WMI_HOST_PDEV_MAX_VDEVS 17
@@ -6317,31 +6317,24 @@ typedef struct {
/**
* struct wmi_host_pdev_nfcal_power_all_channels_event - NF cal event data
* @nfdBr:
* chan0: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* chan1: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* chan2: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* chan3: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* @nfdBr:
* chan0: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* chan1: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* chan2: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* chan3: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3},
* @freqNum: frequency number
* @nfdbr:
* chan[0 ~ 7]: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3,
* NFCalPower_chain4, NFCalPower_chain5,
* NFCalPower_chain6, NFCalPower_chain7},
* @nfdbm:
* chan[0 ~ 7]: {NFCalPower_chain0, NFCalPower_chain1,
* NFCalPower_chain2, NFCalPower_chain3,
* NFCalPower_chain4, NFCalPower_chain5,
* NFCalPower_chain6, NFCalPower_chain7},
* @freqnum:
* chan[0 ~ 7]: frequency number
* @pdev_id: pdev_id
*/
typedef struct {
int8_t nfdBr[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
int8_t nfdBm[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
uint32_t freqNum[WMI_HOST_RXG_CAL_CHAN_MAX];
int8_t nfdbr[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
int8_t nfdbm[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
uint32_t freqnum[WMI_HOST_RXG_CAL_CHAN_MAX];
uint32_t pdev_id;
} wmi_host_pdev_nfcal_power_all_channels_event;

View File

@@ -1053,7 +1053,8 @@ uint8_t* (*extract_dbglog_data_len)(wmi_unified_t wmi_handle, void *evt_buf,
QDF_STATUS (*send_ext_resource_config)(wmi_unified_t wmi_handle,
wmi_host_ext_resource_config *ext_cfg);
QDF_STATUS (*send_nf_dbr_dbm_info_get_cmd)(wmi_unified_t wmi_handle);
QDF_STATUS (*send_nf_dbr_dbm_info_get_cmd)(wmi_unified_t wmi_handle,
uint8_t mac_id);
QDF_STATUS (*send_packet_power_info_get_cmd)(wmi_unified_t wmi_handle,
struct packet_power_info_params *param);

View File

@@ -4881,15 +4881,17 @@ QDF_STATUS wmi_send_ext_resource_config(void *wmi_hdl,
/**
* wmi_unified_nf_dbr_dbm_info_get_cmd_send() - WMI request nf info function
* @param wmi_handle : handle to WMI.
* @mac_id: mac_id
*
* @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/
QDF_STATUS wmi_unified_nf_dbr_dbm_info_get_cmd_send(void *wmi_hdl)
QDF_STATUS wmi_unified_nf_dbr_dbm_info_get_cmd_send(void *wmi_hdl,
uint8_t mac_id)
{
wmi_unified_t wmi = (wmi_unified_t) wmi_hdl;
if (wmi->ops->send_nf_dbr_dbm_info_get_cmd)
return wmi->ops->send_nf_dbr_dbm_info_get_cmd(wmi);
return wmi->ops->send_nf_dbr_dbm_info_get_cmd(wmi, mac_id);
return QDF_STATUS_E_FAILURE;
}

View File

@@ -4592,11 +4592,12 @@ send_periodic_chan_stats_config_cmd_non_tlv(wmi_unified_t wmi_handle,
/**
* send_nf_dbr_dbm_info_get_cmd_non_tlv() - send request to get nf to fw
* @wmi_handle: wmi handle
* @mac_id: radio context
*
* Return: 0 for success or error code
*/
static QDF_STATUS
send_nf_dbr_dbm_info_get_cmd_non_tlv(wmi_unified_t wmi_handle)
send_nf_dbr_dbm_info_get_cmd_non_tlv(wmi_unified_t wmi_handle, uint8_t mac_id)
{
wmi_buf_t wmibuf;
@@ -6597,9 +6598,17 @@ static QDF_STATUS extract_nfcal_power_ev_param_non_tlv(wmi_unified_t wmi_handle,
wmi_pdev_nfcal_power_all_channels_event *event =
(wmi_pdev_nfcal_power_all_channels_event *)evt_buf;
qdf_mem_copy(param->nfdBr, event->nfdBr, sizeof(param->nfdBr));
qdf_mem_copy(param->nfdBm, event->nfdBm, sizeof(param->nfdBm));
qdf_mem_copy(param->freqNum, event->freqNum, sizeof(param->freqNum));
if ((sizeof(event->nfdBr) == sizeof(param->nfdbr)) &&
(sizeof(event->nfdBm) == sizeof(param->nfdbm)) &&
(sizeof(event->freqNum) == sizeof(param->freqnum))) {
qdf_mem_copy(param->nfdbr, event->nfdBr, sizeof(param->nfdbr));
qdf_mem_copy(param->nfdbm, event->nfdBm, sizeof(param->nfdbm));
qdf_mem_copy(param->freqnum, event->freqNum,
sizeof(param->freqnum));
} else {
WMI_LOGE("%s: %d Failed copy out of bound memory!\n", __func__, __LINE__);
return QDF_STATUS_E_RESOURCES;
}
param->pdev_id = WMI_NON_TLV_DEFAULT_PDEV_ID;

View File

@@ -12477,20 +12477,30 @@ send_periodic_chan_stats_config_cmd_tlv(wmi_unified_t wmi_handle,
/**
* send_nf_dbr_dbm_info_get_cmd_tlv() - send request to get nf to fw
* @wmi_handle: wmi handle
* @mac_id: radio context
*
* Return: 0 for success or error code
*/
static QDF_STATUS
send_nf_dbr_dbm_info_get_cmd_tlv(wmi_unified_t wmi_handle)
send_nf_dbr_dbm_info_get_cmd_tlv(wmi_unified_t wmi_handle, uint8_t mac_id)
{
wmi_buf_t buf;
QDF_STATUS ret;
wmi_pdev_get_nfcal_power_fixed_param *cmd;
int32_t len = sizeof(*cmd);
buf = wmi_buf_alloc(wmi_handle, 0);
buf = wmi_buf_alloc(wmi_handle, len);
if (buf == NULL)
return QDF_STATUS_E_NOMEM;
ret = wmi_unified_cmd_send(wmi_handle, buf, 0,
cmd = (wmi_pdev_get_nfcal_power_fixed_param *)wmi_buf_data(buf);
WMITLV_SET_HDR(&cmd->tlv_header,
WMITLV_TAG_STRUC_wmi_pdev_get_nfcal_power_fixed_param,
WMITLV_GET_STRUCT_TLVLEN
(wmi_pdev_get_nfcal_power_fixed_param));
cmd->pdev_id = wmi_handle->ops->convert_pdev_id_host_to_target(mac_id);
ret = wmi_unified_cmd_send(wmi_handle, buf, len,
WMI_PDEV_GET_NFCAL_POWER_CMDID);
if (ret != 0) {
WMI_LOGE("Sending get nfcal power cmd failed\n");
@@ -20572,6 +20582,72 @@ static QDF_STATUS extract_pdev_tpc_ev_param_tlv(wmi_unified_t wmi_handle,
return QDF_STATUS_SUCCESS;
}
/**
* extract_nfcal_power_ev_param_tlv() - extract noise floor calibration
* power param from event
* @wmi_handle: wmi handle
* @param evt_buf: pointer to event buffer
* @param param: Pointer to hold nf cal power param
*
* Return: 0 for success or error code
*/
static QDF_STATUS
extract_nfcal_power_ev_param_tlv(wmi_unified_t wmi_handle,
void *evt_buf,
wmi_host_pdev_nfcal_power_all_channels_event *param)
{
WMI_PDEV_NFCAL_POWER_ALL_CHANNELS_EVENTID_param_tlvs *param_buf;
wmi_pdev_nfcal_power_all_channels_event_fixed_param *event;
wmi_pdev_nfcal_power_all_channels_nfdBr *ch_nfdbr;
wmi_pdev_nfcal_power_all_channels_nfdBm *ch_nfdbm;
wmi_pdev_nfcal_power_all_channels_freqNum *ch_freqnum;
uint32_t i;
param_buf =
(WMI_PDEV_NFCAL_POWER_ALL_CHANNELS_EVENTID_param_tlvs *)evt_buf;
event = param_buf->fixed_param;
ch_nfdbr = param_buf->nfdbr;
ch_nfdbm = param_buf->nfdbm;
ch_freqnum = param_buf->freqnum;
WMI_LOGD("pdev_id[%x], num_nfdbr[%d], num_nfdbm[%d] num_freqnum[%d]\n",
event->pdev_id, param_buf->num_nfdbr,
param_buf->num_nfdbm, param_buf->num_freqnum);
if (param_buf->num_nfdbr >
WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS) {
WMI_LOGE("invalid number of nfdBr");
return QDF_STATUS_E_FAILURE;
}
if (param_buf->num_nfdbm >
WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS) {
WMI_LOGE("invalid number of nfdBm");
return QDF_STATUS_E_FAILURE;
}
if (param_buf->num_freqnum > WMI_HOST_RXG_CAL_CHAN_MAX) {
WMI_LOGE("invalid number of freqNum");
return QDF_STATUS_E_FAILURE;
}
for (i = 0; i < param_buf->num_nfdbr; i++) {
param->nfdbr[i] = (int8_t)ch_nfdbr->nfdBr;
param->nfdbm[i] = (int8_t)ch_nfdbm->nfdBm;
ch_nfdbr++;
ch_nfdbm++;
}
for (i = 0; i < param_buf->num_freqnum; i++) {
param->freqnum[i] = ch_freqnum->freqNum;
ch_freqnum++;
}
param->pdev_id = event->pdev_id;
return QDF_STATUS_SUCCESS;
}
#ifdef BIG_ENDIAN_HOST
/**
@@ -22502,6 +22578,7 @@ struct wmi_ops tlv_ops = {
.extract_pdev_tpc_ev_param = extract_pdev_tpc_ev_param_tlv,
.extract_pdev_tpc_config_ev_param =
extract_pdev_tpc_config_ev_param_tlv,
.extract_nfcal_power_ev_param = extract_nfcal_power_ev_param_tlv,
.extract_wds_addr_event = extract_wds_addr_event_tlv,
.extract_peer_sta_ps_statechange_ev =
extract_peer_sta_ps_statechange_ev_tlv,
@@ -22631,7 +22708,8 @@ static void populate_tlv_events_id(uint32_t *event_ids)
WMI_OFFLOAD_PROB_RESP_TX_STATUS_EVENTID;
event_ids[wmi_mgmt_tx_completion_event_id] =
WMI_MGMT_TX_COMPLETION_EVENTID;
event_ids[wmi_pdev_nfcal_power_all_channels_event_id] =
WMI_PDEV_NFCAL_POWER_ALL_CHANNELS_EVENTID;
event_ids[wmi_tx_delba_complete_event_id] =
WMI_TX_DELBA_COMPLETE_EVENTID;
event_ids[wmi_tx_addba_complete_event_id] =