qcacmn: Add TLV extraction APIs for WIN specific WMI events
Converged FW has few left-over WIN specfic WMI events that need to be implemented in TLV method. WMI Extraction APIs implemented through this change - WMI_PDEV_CHANNEL_HOPPING_EVENTID WMI_PDEV_TPC_EVENTID WMI_WDS_PEER_EVENTID WMI_PEER_STA_PS_STATECHG_EVENTID WMI_INST_RSSI_STATS_EVENTID Change-Id: I7d312e40023fb10f71953b34d16b10ddf2a82f9c CRs-Fixed: 1115239
This commit is contained in:

committed by
qcabuildsw

parent
02c3b547fc
commit
d3ab1004fe
@@ -14492,20 +14492,6 @@ static QDF_STATUS extract_pdev_utf_event_tlv(wmi_unified_t wmi_handle,
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
/**
|
||||
* extract_channel_hopping_event_tlv() - extract channel hopping param
|
||||
* from event
|
||||
* @wmi_handle: wmi handle
|
||||
* @param evt_buf: pointer to event buffer
|
||||
* @param ch_hopping: Pointer to hold channel hopping param
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS for success or error code
|
||||
*/
|
||||
static QDF_STATUS extract_channel_hopping_event_tlv(wmi_unified_t wmi_handle,
|
||||
void *evt_buf, wmi_host_pdev_channel_hopping_event *chan_info)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract_service_ready_ext_tlv() - extract basic extended service ready params
|
||||
@@ -15069,6 +15055,179 @@ static uint16_t wmi_set_htc_tx_tag_tlv(wmi_unified_t wmi_handle,
|
||||
return htc_tx_tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract_channel_hopping_event_tlv() - extract channel hopping param
|
||||
* from event
|
||||
* @wmi_handle: wmi handle
|
||||
* @param evt_buf: pointer to event buffer
|
||||
* @param ch_hopping: Pointer to hold channel hopping param
|
||||
*
|
||||
* @return QDF_STATUS_SUCCESS on success and -ve on failure.
|
||||
*/
|
||||
static QDF_STATUS extract_channel_hopping_event_tlv(
|
||||
wmi_unified_t wmi_handle, void *evt_buf,
|
||||
wmi_host_pdev_channel_hopping_event *ch_hopping)
|
||||
{
|
||||
WMI_PDEV_CHANNEL_HOPPING_EVENTID_param_tlvs *param_buf;
|
||||
wmi_pdev_channel_hopping_event_fixed_param *event;
|
||||
|
||||
param_buf = (WMI_PDEV_CHANNEL_HOPPING_EVENTID_param_tlvs *)evt_buf;
|
||||
event = (wmi_pdev_channel_hopping_event_fixed_param *)
|
||||
param_buf->fixed_param;
|
||||
|
||||
ch_hopping->noise_floor_report_iter = event->noise_floor_report_iter;
|
||||
ch_hopping->noise_floor_total_iter = event->noise_floor_total_iter;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract_pdev_tpc_ev_param_tlv() - extract tpc param from event
|
||||
* @wmi_handle: wmi handle
|
||||
* @param evt_buf: pointer to event buffer
|
||||
* @param param: Pointer to hold tpc param
|
||||
*
|
||||
* @return QDF_STATUS_SUCCESS on success and -ve on failure.
|
||||
*/
|
||||
static QDF_STATUS extract_pdev_tpc_ev_param_tlv(wmi_unified_t wmi_handle,
|
||||
void *evt_buf,
|
||||
wmi_host_pdev_tpc_event *param)
|
||||
{
|
||||
WMI_PDEV_TPC_EVENTID_param_tlvs *param_buf;
|
||||
wmi_pdev_tpc_event_fixed_param *event;
|
||||
|
||||
param_buf = (WMI_PDEV_TPC_EVENTID_param_tlvs *)evt_buf;
|
||||
event = (wmi_pdev_tpc_event_fixed_param *)param_buf->fixed_param;
|
||||
|
||||
qdf_mem_copy(param->tpc, param_buf->tpc, sizeof(param->tpc));
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
#ifdef BIG_ENDIAN_HOST
|
||||
/**
|
||||
* wds_addr_ev_conv_data_be() - LE to BE conversion of wds addr event
|
||||
* @param data_len - data length
|
||||
* @param data - pointer to data
|
||||
*
|
||||
* Return: QDF_STATUS - success or error status
|
||||
*/
|
||||
static QDF_STATUS wds_addr_ev_conv_data_be(uint16_t data_len, uint8_t *ev)
|
||||
{
|
||||
uint8_t *datap = (uint8_t *)ev;
|
||||
/* Skip swapping the first word */
|
||||
datap += sizeof(uint32_t);
|
||||
for (i = 0; i < ((data_len / sizeof(uint32_t))-1);
|
||||
i++, datap += sizeof(uint32_t)) {
|
||||
*(uint32_t *)datap = qdf_le32_to_cpu(*(uint32_t *)datap);
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#else
|
||||
/**
|
||||
* wds_addr_ev_conv_data_be() - Dummy operation for LE platforms
|
||||
* @param data_len - data length
|
||||
* @param data - pointer to data
|
||||
*
|
||||
* Return: QDF_STATUS - success or error status
|
||||
*/
|
||||
static QDF_STATUS wds_addr_ev_conv_data_be(uint32_t data_len, uint8_t *ev)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* extract_wds_addr_event_tlv() - extract wds address from event
|
||||
* @wmi_handle: wmi handle
|
||||
* @param evt_buf: pointer to event buffer
|
||||
* @param wds_ev: Pointer to hold wds address
|
||||
*
|
||||
* @return QDF_STATUS_SUCCESS on success and -ve on failure.
|
||||
*/
|
||||
static QDF_STATUS extract_wds_addr_event_tlv(wmi_unified_t wmi_handle,
|
||||
void *evt_buf,
|
||||
uint16_t len, wds_addr_event_t *wds_ev)
|
||||
{
|
||||
WMI_WDS_PEER_EVENTID_param_tlvs *param_buf;
|
||||
wmi_wds_addr_event_fixed_param *ev;
|
||||
int i;
|
||||
|
||||
param_buf = (WMI_WDS_PEER_EVENTID_param_tlvs *)evt_buf;
|
||||
ev = (wmi_wds_addr_event_fixed_param *)param_buf->fixed_param;
|
||||
|
||||
if (wds_addr_ev_conv_data_be(len, (uint8_t *)ev) != QDF_STATUS_SUCCESS)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
qdf_mem_copy(wds_ev->event_type, ev->event_type,
|
||||
sizeof(wds_ev->event_type));
|
||||
for (i = 0; i < 4; i++) {
|
||||
wds_ev->peer_mac[i] =
|
||||
((u_int8_t *)&(ev->peer_mac.mac_addr31to0))[i];
|
||||
wds_ev->dest_mac[i] =
|
||||
((u_int8_t *)&(ev->dest_mac.mac_addr31to0))[i];
|
||||
}
|
||||
for (i = 0; i < 2; i++) {
|
||||
wds_ev->peer_mac[4+i] =
|
||||
((u_int8_t *)&(ev->peer_mac.mac_addr47to32))[i];
|
||||
wds_ev->dest_mac[4+i] =
|
||||
((u_int8_t *)&(ev->dest_mac.mac_addr47to32))[i];
|
||||
}
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract_peer_sta_ps_statechange_ev_tlv() - extract peer sta ps state
|
||||
* from event
|
||||
* @wmi_handle: wmi handle
|
||||
* @param evt_buf: pointer to event buffer
|
||||
* @param ev: Pointer to hold peer param and ps state
|
||||
*
|
||||
* @return QDF_STATUS_SUCCESS on success and -ve on failure.
|
||||
*/
|
||||
static QDF_STATUS extract_peer_sta_ps_statechange_ev_tlv(wmi_unified_t wmi_handle,
|
||||
void *evt_buf, wmi_host_peer_sta_ps_statechange_event *ev)
|
||||
{
|
||||
WMI_PEER_STA_PS_STATECHG_EVENTID_param_tlvs *param_buf;
|
||||
wmi_peer_sta_ps_statechange_event_fixed_param *event;
|
||||
|
||||
param_buf = (WMI_PEER_STA_PS_STATECHG_EVENTID_param_tlvs *)evt_buf;
|
||||
event = (wmi_peer_sta_ps_statechange_event_fixed_param *)
|
||||
param_buf->fixed_param;
|
||||
|
||||
WMI_MAC_ADDR_TO_CHAR_ARRAY(&event->peer_macaddr, ev->peer_macaddr);
|
||||
ev->peer_ps_state = event->peer_ps_state;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* extract_inst_rssi_stats_event_tlv() - extract inst rssi stats from event
|
||||
* @wmi_handle: wmi handle
|
||||
* @param evt_buf: pointer to event buffer
|
||||
* @param inst_rssi_resp: Pointer to hold inst rssi response
|
||||
*
|
||||
* @return QDF_STATUS_SUCCESS on success and -ve on failure.
|
||||
*/
|
||||
static QDF_STATUS extract_inst_rssi_stats_event_tlv(
|
||||
wmi_unified_t wmi_handle, void *evt_buf,
|
||||
wmi_host_inst_stats_resp *inst_rssi_resp)
|
||||
{
|
||||
WMI_INST_RSSI_STATS_EVENTID_param_tlvs *param_buf;
|
||||
wmi_inst_rssi_stats_resp_fixed_param *event;
|
||||
|
||||
param_buf = (WMI_INST_RSSI_STATS_EVENTID_param_tlvs *)evt_buf;
|
||||
event = (wmi_inst_rssi_stats_resp_fixed_param *)param_buf->fixed_param;
|
||||
|
||||
qdf_mem_copy(&(inst_rssi_resp->peer_macaddr),
|
||||
&(event->peer_macaddr), sizeof(wmi_mac_addr));
|
||||
inst_rssi_resp->iRSSI = event->iRSSI;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
struct wmi_ops tlv_ops = {
|
||||
.send_vdev_create_cmd = send_vdev_create_cmd_tlv,
|
||||
.send_vdev_delete_cmd = send_vdev_delete_cmd_tlv,
|
||||
@@ -15379,6 +15538,11 @@ struct wmi_ops tlv_ops = {
|
||||
.is_management_record = is_management_record_tlv,
|
||||
.extract_pdev_csa_switch_count_status =
|
||||
extract_pdev_csa_switch_count_status_tlv,
|
||||
.extract_pdev_tpc_ev_param = extract_pdev_tpc_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,
|
||||
.extract_inst_rssi_stats_event = extract_inst_rssi_stats_event_tlv,
|
||||
};
|
||||
|
||||
#ifndef CONFIG_MCL
|
||||
|
Reference in New Issue
Block a user