From 7cc67e504fb99c19ce807d757074fe725d15b5b1 Mon Sep 17 00:00:00 2001 From: nobelj Date: Fri, 24 Jan 2020 08:03:49 -0800 Subject: [PATCH] qcacmn: Support mgmt packet peer filter based on mac address RA mac address is used to support tx capture mgmt peer filter. Change-Id: I895034723d4b75557ad33f55adc017d1caa3a40d --- dp/inc/cdp_txrx_cmn_struct.h | 1 + dp/inc/cdp_txrx_ctrl.h | 5 ++--- dp/inc/cdp_txrx_ops.h | 2 +- dp/wifi3.0/dp_internal.h | 13 +++++++++++++ dp/wifi3.0/dp_main.c | 37 ++++++++++++++++++++++++++---------- dp/wifi3.0/dp_peer.h | 6 ++++-- dp/wifi3.0/dp_rx.h | 5 ++++- dp/wifi3.0/dp_tx.h | 5 ++++- 8 files changed, 56 insertions(+), 18 deletions(-) diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index f4ca38746dbc..e215e4b3c2cc 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -1188,6 +1188,7 @@ enum cdp_tx_enh_capture_mode { CDP_TX_ENH_CAPTURE_DISABLED = 0, CDP_TX_ENH_CAPTURE_ENABLE_ALL_PEERS, CDP_TX_ENH_CAPTURE_ENDIS_PER_PEER, + CDP_TX_ENH_CAPTURE_MAX, }; /* diff --git a/dp/inc/cdp_txrx_ctrl.h b/dp/inc/cdp_txrx_ctrl.h index 5c874f91b125..df78daa28421 100644 --- a/dp/inc/cdp_txrx_ctrl.h +++ b/dp/inc/cdp_txrx_ctrl.h @@ -906,7 +906,7 @@ static inline QDF_STATUS cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc, uint8_t pdev_id, bool is_rx_pkt_cap_enable, - bool is_tx_pkt_cap_enable, + uint8_t is_tx_pkt_cap_enable, uint8_t *peer_mac) { if (!soc || !soc->ops) { @@ -921,8 +921,7 @@ cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc, return soc->ops->ctrl_ops->txrx_update_peer_pkt_capture_params (soc, pdev_id, is_rx_pkt_cap_enable, - is_tx_pkt_cap_enable, - peer_mac); + is_tx_pkt_cap_enable, peer_mac); } #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */ diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index f193401973fa..85be21f66d96 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -704,7 +704,7 @@ struct cdp_ctrl_ops { #if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH) QDF_STATUS (*txrx_update_peer_pkt_capture_params)( ol_txrx_soc_handle soc, uint8_t pdev_id, - bool is_rx_pkt_cap_enable, bool is_tx_pkt_cap_enable, + bool is_rx_pkt_cap_enable, uint8_t is_tx_pkt_cap_enable, uint8_t *peer_mac); #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */ QDF_STATUS diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 7e2b7a0e9d8a..0766b6736223 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -1802,6 +1802,19 @@ void dp_print_pdev_tx_capture_stats(struct dp_pdev *pdev) { } +/* + * dp_peer_tx_capture_filter_check: check filter is enable for the filter + * and update tx_cap_enabled flag + * @pdev: DP PDEV handle + * @peer: DP PEER handle + * + * return: void + */ +static inline +void dp_peer_tx_capture_filter_check(struct dp_pdev *pdev, + struct dp_peer *peer) +{ +} #endif #ifdef FEATURE_PERPKT_INFO diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 1113c3315a83..7e6b4e4d517f 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5581,6 +5581,12 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, DP_STATS_INIT(peer); DP_STATS_UPD(peer, rx.avg_rssi, INVALID_RSSI); + /* + * In tx_monitor mode, filter may be set for unassociated peer + * when unassociated peer get associated peer need to + * update tx_cap_enabled flag to support peer filter. + */ + dp_peer_tx_capture_filter_check(pdev, peer); return QDF_STATUS_SUCCESS; } else { /* @@ -5704,6 +5710,14 @@ dp_peer_create_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, peer_cookie.ctx; } } + + /* + * In tx_monitor mode, filter may be set for unassociated peer + * when unassociated peer get associated peer need to + * update tx_cap_enabled flag to support peer filter. + */ + dp_peer_tx_capture_filter_check(pdev, peer); + return QDF_STATUS_SUCCESS; } @@ -8399,7 +8413,8 @@ static QDF_STATUS dp_get_psoc_param(struct cdp_soc_t *cdp_soc, * @soc: DP_SOC handle * @pdev_id: id of DP_PDEV handle * @is_rx_pkt_cap_enable: enable/disable Rx packet capture in monitor mode - * @is_tx_pkt_cap_enable: enable/disable Tx packet capture in monitor mode + * @is_tx_pkt_cap_enable: enable/disable/delete/print + * Tx packet capture in monitor mode * @peer_mac: MAC address for which the above need to be enabled/disabled * * Return: Success if Rx & Tx capture is enabled for peer, false otherwise @@ -8408,28 +8423,30 @@ QDF_STATUS dp_peer_update_pkt_capture_params(ol_txrx_soc_handle soc, uint8_t pdev_id, bool is_rx_pkt_cap_enable, - bool is_tx_pkt_cap_enable, + uint8_t is_tx_pkt_cap_enable, uint8_t *peer_mac) { + QDF_STATUS status; struct dp_peer *peer; struct dp_pdev *pdev = dp_get_pdev_from_soc_pdev_id_wifi3((struct dp_soc *)soc, pdev_id); - if (!pdev) return QDF_STATUS_E_FAILURE; peer = (struct dp_peer *)dp_find_peer_by_addr((struct cdp_pdev *)pdev, peer_mac); - if (!peer) { - dp_err("Invalid Peer"); - return QDF_STATUS_E_FAILURE; - } - dp_peer_set_rx_capture_enabled(peer, is_rx_pkt_cap_enable); - dp_peer_set_tx_capture_enabled(peer, is_tx_pkt_cap_enable); + /* we need to set tx pkt capture for non associated peer */ + status = dp_peer_set_tx_capture_enabled(pdev, peer, + is_tx_pkt_cap_enable, + peer_mac); - return QDF_STATUS_SUCCESS; + status = dp_peer_set_rx_capture_enabled(pdev, peer, + is_rx_pkt_cap_enable, + peer_mac); + + return status; } /* diff --git a/dp/wifi3.0/dp_peer.h b/dp/wifi3.0/dp_peer.h index 2544110b37d1..e2794d3d2084 100644 --- a/dp/wifi3.0/dp_peer.h +++ b/dp/wifi3.0/dp_peer.h @@ -286,7 +286,9 @@ void dp_peer_ast_index_flow_queue_map_create(void *soc_hdl, * @soc: DP SOC handle * @pdev_id: id of DP pdev handle * @is_rx_pkt_cap_enable: enable/disable Rx packet capture in monitor mode - * @is_tx_pkt_cap_enable: enable/disable Tx packet capture in monitor mode + * @is_tx_pkt_cap_enable: enable/disable/delete/print + * Tx packet capture in monitor mode + * Tx packet capture in monitor mode * @peer_mac: MAC address for which the above need to be enabled/disabled * * Return: Success if Rx & Tx capture is enabled for peer, false otherwise @@ -295,7 +297,7 @@ QDF_STATUS dp_peer_update_pkt_capture_params(ol_txrx_soc_handle soc, uint8_t pdev_id, bool is_rx_pkt_cap_enable, - bool is_tx_pkt_cap_enable, + uint8_t is_tx_pkt_cap_enable, uint8_t *peer_mac); /* diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index 286989d5cce1..97d72396bf8f 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -1103,8 +1103,11 @@ bool dp_rx_multipass_process(struct dp_peer *peer, qdf_nbuf_t nbuf, #ifndef WLAN_RX_PKT_CAPTURE_ENH static inline -void dp_peer_set_rx_capture_enabled(struct dp_peer *peer_handle, bool value) +QDF_STATUS dp_peer_set_rx_capture_enabled(struct dp_pdev *pdev, + struct dp_peer *peer_handle, + bool value, uint8_t *mac_addr) { + return QDF_STATUS_SUCCESS; } #endif diff --git a/dp/wifi3.0/dp_tx.h b/dp/wifi3.0/dp_tx.h index 42148b5b9ff7..0a935e7045a1 100644 --- a/dp/wifi3.0/dp_tx.h +++ b/dp/wifi3.0/dp_tx.h @@ -357,8 +357,11 @@ static inline void dp_tx_comp_process_exception(struct dp_tx_desc_s *tx_desc) #ifndef WLAN_TX_PKT_CAPTURE_ENH static inline -void dp_peer_set_tx_capture_enabled(struct dp_peer *peer_handle, bool value) +QDF_STATUS dp_peer_set_tx_capture_enabled(struct dp_pdev *pdev, + struct dp_peer *peer_handle, + uint8_t value, uint8_t *peer_mac) { + return QDF_STATUS_SUCCESS; } #endif #endif