qcacmn: iot_sim add support for drop operation

Adding support for iot_sim drop operation.
Drop operation will be handled in Rx direction.

Change-Id: If2e1c9663a69fcd16715cdd1d28639a388ea1c0c
CRs-Fixed: 2686309
Šī revīzija ir iekļauta:
nakul kachhwaha
2020-05-15 12:47:26 +05:30
revīziju iesūtīja nshrivas
vecāks cb709cad18
revīzija c5cdd1eaaf
12 mainīti faili ar 577 papildinājumiem un 97 dzēšanām

Parādīt failu

@@ -191,7 +191,9 @@ QDF_STATUS iot_sim_mgmt_tx_update(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_NULL_VALUE;
}
if (rx_ops->iot_sim_rx_ops.iot_sim_cmd_handler) {
status = rx_ops->iot_sim_rx_ops.iot_sim_cmd_handler(vdev, buf);
status = rx_ops->iot_sim_rx_ops.iot_sim_cmd_handler(vdev,
buf,
true);
if (QDF_IS_STATUS_ERROR(status))
mgmt_txrx_err("iot_sim_cmd_handler returned failure");
}

Parādīt failu

@@ -908,6 +908,63 @@ mgmt_txrx_get_frm_type(uint8_t mgmt_subtype, uint8_t *mpdu_data_ptr)
return frm_type;
}
#ifdef WLAN_IOT_SIM_SUPPORT
static QDF_STATUS simulation_frame_update(struct wlan_objmgr_psoc *psoc,
qdf_nbuf_t buf,
struct mgmt_rx_event_params *rx_param)
{
uint8_t *addr = NULL;
struct wlan_objmgr_vdev *vdev = NULL;
uint8_t pdevid = 0;
wlan_objmgr_ref_dbgid dbgid;
struct wlan_lmac_if_rx_ops *rx_ops = NULL;
struct wlan_objmgr_pdev *pdev;
struct ieee80211_frame *wh;
u_int8_t *data;
QDF_STATUS status = QDF_STATUS_SUCCESS;
rx_ops = wlan_psoc_get_lmac_if_rxops(psoc);
if (rx_ops && rx_ops->iot_sim_rx_ops.iot_sim_cmd_handler) {
data = (uint8_t *)qdf_nbuf_data(buf);
wh = (struct ieee80211_frame *)data;
addr = (uint8_t *)wh->i_addr3;
pdevid = rx_param->pdev_id;
dbgid = WLAN_IOT_SIM_ID;
if (qdf_is_macaddr_broadcast((struct qdf_mac_addr *)addr)) {
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdevid,
dbgid);
if (pdev) {
vdev = wlan_objmgr_pdev_get_first_vdev(pdev,
dbgid);
wlan_objmgr_pdev_release_ref(pdev, dbgid);
}
} else
vdev = wlan_objmgr_get_vdev_by_macaddr_from_psoc(psoc,
pdevid,
addr,
dbgid);
if (vdev) {
status = rx_ops->iot_sim_rx_ops.
iot_sim_cmd_handler(vdev, buf, false);
if (status == QDF_STATUS_E_NULL_VALUE) {
wlan_objmgr_vdev_release_ref(vdev, dbgid);
mgmt_txrx_debug("iot_sim:Pkt processed at RX");
return status;
}
wlan_objmgr_vdev_release_ref(vdev, dbgid);
}
}
return status;
}
#else
static QDF_STATUS simulation_frame_update(struct wlan_objmgr_psoc *psoc,
qdf_nbuf_t buf,
struct mgmt_rx_event_params *rx_param)
{
return QDF_STATUS_SUCCESS;
}
#endif
/**
* wlan_mgmt_txrx_rx_handler_list_copy() - copies rx handler list
* @rx_handler: pointer to rx handler list
@@ -1084,6 +1141,9 @@ QDF_STATUS tgt_mgmt_txrx_rx_frame_handler(
WLAN_SEQ_SEQ_SHIFT), mgmt_rx_params->rssi,
mgmt_rx_params->tsf_delta);
if (simulation_frame_update(psoc, buf, mgmt_rx_params))
return QDF_STATUS_E_FAILURE;
mgmt_txrx_psoc_ctx = (struct mgmt_txrx_priv_psoc_context *)
wlan_objmgr_psoc_get_comp_private_obj(psoc,
WLAN_UMAC_COMP_MGMT_TXRX);