diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index fcd3e5e320..48d0b837bb 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -36,6 +36,7 @@ #ifndef CONFIG_WIN #include #endif /* CONFIG_WIN */ +#include #ifndef OL_TXRX_NUM_LOCAL_PEER_IDS #define OL_TXRX_NUM_LOCAL_PEER_IDS 33 /* default */ @@ -310,10 +311,12 @@ typedef QDF_STATUS(*ol_txrx_rx_fp)(void *osif_dev, qdf_nbuf_t msdu_list); * @osif_dev - the virtual device's OS shim object * @list_head - poniter to head of receive packet queue to decap * @list_tail - poniter to tail of receive packet queue to decap + * @peer - Peer handler */ typedef QDF_STATUS(*ol_txrx_rsim_rx_decap_fp)(void *osif_dev, qdf_nbuf_t *list_head, - qdf_nbuf_t *list_tail); + qdf_nbuf_t *list_tail, + struct cdp_peer *peer); /* ol_txrx_rx_fp - external tx free function to read per packet stats and * free tx buffer externally diff --git a/dp/inc/cdp_txrx_ctrl.h b/dp/inc/cdp_txrx_ctrl.h index 18585e456a..571e5dd13c 100644 --- a/dp/inc/cdp_txrx_ctrl.h +++ b/dp/inc/cdp_txrx_ctrl.h @@ -236,7 +236,7 @@ cdp_get_pdev_reo_dest(ol_txrx_soc_handle soc, struct cdp_pdev *pdev) */ static inline void cdp_peer_authorize(ol_txrx_soc_handle soc, - struct ol_txrx_peer_t *peer, u_int32_t authorize) + struct cdp_peer *peer, u_int32_t authorize) { if (soc->ops->ctrl_ops->txrx_peer_authorize) return soc->ops->ctrl_ops->txrx_peer_authorize @@ -381,7 +381,7 @@ static inline void cdp_txrx_set_vdev_param(ol_txrx_soc_handle soc, static inline void cdp_peer_set_nawds(ol_txrx_soc_handle soc, - struct ol_txrx_peer_t *peer, uint8_t value) + struct cdp_peer *peer, uint8_t value) { if (soc->ops->ctrl_ops->txrx_peer_set_nawds) return soc->ops->ctrl_ops->txrx_peer_set_nawds @@ -450,4 +450,32 @@ cdp_wdi_event_unsub(ol_txrx_soc_handle soc, (pdev, event_cb_sub, event); return 0; } + +/** + * @brief Get security type from the from peer. + * @details + * This function gets the Security information from the peer handler. + * The security information is got from the rx descriptor and filled in + * to the peer handler. + * + * @param soc - pointer to the soc + * @param peer - peer handler + * @param sec_idx - mcast or ucast frame type. + * @return - int + */ +static inline int +cdp_get_sec_type(ol_txrx_soc_handle soc, struct cdp_peer *peer, uint8_t sec_idx) +{ + if (!soc || !soc->ops || !soc->ops->ctrl_ops) { + QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL, + "%s invalid instance", __func__); + return A_ERROR; + } + + if (soc->ops->ctrl_ops->txrx_get_sec_type) + return soc->ops->ctrl_ops->txrx_get_sec_type + (peer, sec_idx); + return A_ERROR; + +} #endif diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index c88fff7908..755cef0ad4 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -309,7 +309,7 @@ struct cdp_ctrl_ops { * @return none */ void - (*txrx_peer_authorize)(void *peer, + (*txrx_peer_authorize)(struct cdp_peer *peer, u_int32_t authorize); bool @@ -378,7 +378,7 @@ struct cdp_ctrl_ops { void (*txrx_set_vdev_param)(struct cdp_vdev *vdev, enum cdp_vdev_param_type param, uint32_t val); - void (*txrx_peer_set_nawds)(void *peer, uint8_t value); + void (*txrx_peer_set_nawds)(struct cdp_peer *peer, uint8_t value); /** * @brief Set the reo dest ring num of the radio * @details @@ -409,6 +409,7 @@ struct cdp_ctrl_ops { int (*txrx_wdi_event_unsub)(struct cdp_pdev *pdev, void *event_cb_sub, uint32_t event); + int (*txrx_get_sec_type)(struct cdp_peer *peer, uint8_t sec_idx); }; struct cdp_me_ops { diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 91f2d600fd..37981b05df 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -2223,7 +2223,7 @@ fail0: * @authorize * */ -static void dp_peer_authorize(void *peer_handle, uint32_t authorize) +static void dp_peer_authorize(struct cdp_peer *peer_handle, uint32_t authorize) { struct dp_peer *peer = (struct dp_peer *)peer_handle; struct dp_soc *soc; @@ -3592,7 +3592,7 @@ static void dp_set_vdev_param(struct cdp_vdev *vdev_handle, * * return: void */ -static void dp_peer_set_nawds(void *peer_handle, uint8_t value) +static void dp_peer_set_nawds(struct cdp_peer *peer_handle, uint8_t value) { struct dp_peer *peer = (struct dp_peer *)peer_handle; peer->nawds_enabled = value; diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 25bf6465f3..80e44e43a0 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -214,11 +214,13 @@ QDF_STATUS dp_rx_buffers_replenish(struct dp_soc *dp_soc, uint32_t mac_id, * * @vdev: vdev on which RAW mode is enabled * @nbuf_list: list of RAW pkts to process + * @peer: peer object from which the pkt is rx * * Return: void */ void -dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list) +dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list, + struct cdp_peer *peer) { qdf_nbuf_t deliver_list_head = NULL; qdf_nbuf_t deliver_list_tail = NULL; @@ -246,7 +248,7 @@ dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list) } vdev->osif_rsim_rx_decap(vdev->osif_vdev, &deliver_list_head, - &deliver_list_tail); + &deliver_list_tail, peer); vdev->osif_rx(vdev->osif_vdev, deliver_list_head); } @@ -1305,8 +1307,9 @@ done: } if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw) || - (vdev->rx_decap_type == htt_cmn_pkt_type_native_wifi)) - dp_rx_deliver_raw(vdev, deliver_list_head); + (vdev->rx_decap_type == htt_cmn_pkt_type_native_wifi)) + dp_rx_deliver_raw(vdev, deliver_list_head, + (struct cdp_peer *) peer); else if (qdf_likely(vdev->osif_rx) && deliver_list_head) vdev->osif_rx(vdev->osif_vdev, deliver_list_head); } diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index 64253d2ba4..f97fe57315 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -304,7 +304,8 @@ void dp_rx_desc_pool_free(struct dp_soc *soc, uint32_t pool_id, struct rx_desc_pool *rx_desc_pool); -void dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list); +void dp_rx_deliver_raw(struct dp_vdev *vdev, qdf_nbuf_t nbuf_list, + struct cdp_peer *peer); /** * dp_rx_add_to_free_desc_list() - Adds to a local free descriptor list diff --git a/dp/wifi3.0/dp_rx_err.c b/dp/wifi3.0/dp_rx_err.c index 6a6d20ec75..00805ebae4 100644 --- a/dp/wifi3.0/dp_rx_err.c +++ b/dp/wifi3.0/dp_rx_err.c @@ -393,7 +393,7 @@ dp_rx_null_q_desc_handle(struct dp_soc *soc, struct dp_rx_desc *rx_desc, if (qdf_unlikely(vdev->rx_decap_type == htt_cmn_pkt_type_raw)) { qdf_nbuf_set_next(nbuf, NULL); - dp_rx_deliver_raw(vdev, nbuf); + dp_rx_deliver_raw(vdev, nbuf, (struct cdp_peer *) peer); } else { if (qdf_unlikely(peer->bss_peer)) { QDF_TRACE(QDF_MODULE_ID_DP,