qcacmn: Add CDP api to set rx_pkt_enable,tx_pkt_enable for a peer
Since tx_monitor mode and rx_monitor mode consume signficant MIPS when enabled on a per-peer basis, new requirement is to enable such functionality on a per-peer basis. New CDP APIs are added to set these per-peer parameters. CRs-Fixed: 2494471 Change-Id: Ib44845ec98481cc4df36c30f47335522e5274568
This commit is contained in:
@@ -910,6 +910,18 @@ enum cdp_rx_enh_capture_mode {
|
||||
CDP_RX_ENH_CAPTURE_MPDU_MSDU,
|
||||
};
|
||||
|
||||
/**
|
||||
* cdp_tx_enh_capture_mode - Tx enhanced capture modes
|
||||
* @CDP_TX_ENH_CAPTURE_DISABLED: Disable Tx enhance capture for all peers
|
||||
* @CDP_TX_ENH_CAPTURE_ENABLE_ALL_PEERS: Enable tx capture for all peers
|
||||
* @CDP_TX_ENH_CAPTURE_ENDIS_PER_PEER: Enable/disable per peer as necessary
|
||||
*/
|
||||
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,
|
||||
};
|
||||
|
||||
/*
|
||||
* enum cdp_pdev_bpr_param - different types of parameters
|
||||
* to set value in pdev
|
||||
|
@@ -723,6 +723,40 @@ cdp_get_pldev(ol_txrx_soc_handle soc,
|
||||
return soc->ops->ctrl_ops->txrx_get_pldev(pdev);
|
||||
}
|
||||
|
||||
#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
|
||||
/**
|
||||
* cdp_update_peer_pkt_capture_params() - Sets Rx & Tx Capture params for a peer
|
||||
* @soc: SOC TXRX handle
|
||||
* @pdev: CDP pdev pointer
|
||||
* @is_rx_pkt_cap_enable: enable/disable rx pkt capture for this peer
|
||||
* @is_tx_pkt_cap_enable: enable/disable tx pkt capture for this peer
|
||||
* @peer_mac: MAC address of peer for which pkt_cap is to be enabled/disabled
|
||||
*
|
||||
* Return: Success when matching peer is found & flags are set, error otherwise
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
cdp_update_peer_pkt_capture_params(ol_txrx_soc_handle soc,
|
||||
struct cdp_pdev *pdev,
|
||||
bool is_rx_pkt_cap_enable,
|
||||
bool is_tx_pkt_cap_enable,
|
||||
uint8_t *peer_mac)
|
||||
{
|
||||
if (!soc || !soc->ops) {
|
||||
dp_err("Invalid SOC instance");
|
||||
QDF_BUG(0);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (!soc->ops->ctrl_ops ||
|
||||
!soc->ops->ctrl_ops->txrx_update_peer_pkt_capture_params)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return soc->ops->ctrl_ops->txrx_update_peer_pkt_capture_params
|
||||
(pdev, is_rx_pkt_cap_enable, is_tx_pkt_cap_enable,
|
||||
peer_mac);
|
||||
}
|
||||
#endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
|
||||
|
||||
#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
|
||||
/**
|
||||
* cdp_update_pdev_rx_protocol_tag() - wrapper function to set the protocol
|
||||
|
@@ -683,6 +683,12 @@ struct cdp_ctrl_ops {
|
||||
struct cdp_vdev *vdev, uint8_t *peer_mac,
|
||||
uint16_t vlan_id);
|
||||
#endif
|
||||
#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
|
||||
QDF_STATUS (*txrx_update_peer_pkt_capture_params)(
|
||||
struct cdp_pdev *txrx_pdev_handle,
|
||||
bool is_rx_pkt_cap_enable, bool is_tx_pkt_cap_enable,
|
||||
uint8_t *peer_mac);
|
||||
#endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
|
||||
};
|
||||
|
||||
struct cdp_me_ops {
|
||||
|
@@ -125,7 +125,7 @@ dp_config_enh_rx_capture(struct cdp_pdev *pdev_handle, uint8_t val)
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
dp_config_enh_tx_capture(struct cdp_pdev *pdev_handle, int val)
|
||||
dp_config_enh_tx_capture(struct cdp_pdev *pdev_handle, uint8_t val)
|
||||
{
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
@@ -1087,12 +1087,16 @@ static void dp_print_peer_table(struct dp_vdev *vdev)
|
||||
" nawds_enabled = %d"
|
||||
" bss_peer = %d"
|
||||
" wds_enabled = %d"
|
||||
" tx_cap_enabled = %d"
|
||||
" rx_cap_enabled = %d"
|
||||
" delete in progress = %d"
|
||||
" peer id = %d",
|
||||
peer->mac_addr.raw,
|
||||
peer->nawds_enabled,
|
||||
peer->bss_peer,
|
||||
peer->wds_enabled,
|
||||
peer->tx_cap_enabled,
|
||||
peer->rx_cap_enabled,
|
||||
peer->delete_in_progress,
|
||||
peer->peer_ids[0]);
|
||||
}
|
||||
@@ -7756,6 +7760,69 @@ static void dp_peer_set_nawds(struct cdp_peer *peer_handle, uint8_t value)
|
||||
peer->nawds_enabled = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_peer_set_tx_capture_enabled: Set tx_cap_enabled bit in peer
|
||||
* @peer_handle: Peer handle
|
||||
* @value: Enable/disable setting for tx_cap_enabled
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
dp_peer_set_tx_capture_enabled(struct cdp_peer *peer_handle, bool value)
|
||||
{
|
||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
||||
|
||||
peer->tx_cap_enabled = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_peer_set_rx_capture_enabled: Set rx_cap_enabled bit in peer
|
||||
* @peer_handle: Peer handle
|
||||
* @value: Enable/disable setting for rx_cap_enabled
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
dp_peer_set_rx_capture_enabled(struct cdp_peer *peer_handle, bool value)
|
||||
{
|
||||
struct dp_peer *peer = (struct dp_peer *)peer_handle;
|
||||
|
||||
peer->rx_cap_enabled = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_peer_update_pkt_capture_params: Set Rx & Tx Capture flags for a peer
|
||||
* @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
|
||||
* @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
|
||||
*/
|
||||
QDF_STATUS
|
||||
dp_peer_update_pkt_capture_params(struct cdp_pdev *pdev,
|
||||
bool is_rx_pkt_cap_enable,
|
||||
bool is_tx_pkt_cap_enable,
|
||||
uint8_t *peer_mac)
|
||||
|
||||
{
|
||||
struct dp_peer *peer;
|
||||
uint8_t local_id;
|
||||
|
||||
peer = (struct dp_peer *)dp_find_peer_by_addr(pdev,
|
||||
peer_mac, &local_id);
|
||||
|
||||
if (!peer) {
|
||||
dp_err("Invalid Peer");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
dp_peer_set_rx_capture_enabled((struct cdp_peer *)peer,
|
||||
is_rx_pkt_cap_enable);
|
||||
dp_peer_set_tx_capture_enabled((struct cdp_peer *)peer,
|
||||
is_tx_pkt_cap_enable);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_set_vdev_dscp_tid_map_wifi3(): Update Map ID selected for particular vdev
|
||||
* @vdev_handle: DP_VDEV handle
|
||||
@@ -9258,6 +9325,10 @@ static struct cdp_ctrl_ops dp_ops_ctrl = {
|
||||
#ifdef QCA_MULTIPASS_SUPPORT
|
||||
.txrx_peer_set_vlan_id = dp_peer_set_vlan_id,
|
||||
#endif /*QCA_MULTIPASS_SUPPORT*/
|
||||
#if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
|
||||
.txrx_update_peer_pkt_capture_params =
|
||||
dp_peer_update_pkt_capture_params,
|
||||
#endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
|
||||
};
|
||||
|
||||
static struct cdp_me_ops dp_ops_me = {
|
||||
|
@@ -274,4 +274,17 @@ void dp_peer_multipass_list_init(struct dp_vdev *vdev);
|
||||
void dp_peer_multipass_list_remove(struct dp_peer *peer);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dp_peer_update_pkt_capture_params: Set Rx & Tx Capture flags for a peer
|
||||
* @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
|
||||
* @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
|
||||
*/
|
||||
QDF_STATUS
|
||||
dp_peer_update_pkt_capture_params(struct cdp_pdev *pdev,
|
||||
bool is_rx_pkt_cap_enable,
|
||||
bool is_tx_pkt_cap_enable,
|
||||
uint8_t *peer_mac);
|
||||
#endif /* _DP_PEER_H_ */
|
||||
|
@@ -1658,7 +1658,7 @@ struct dp_pdev {
|
||||
#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
|
||||
|
||||
/* tx packet capture enhancement */
|
||||
bool tx_capture_enabled;
|
||||
enum cdp_tx_enh_capture_mode tx_capture_enabled;
|
||||
struct dp_pdev_tx_capture tx_capture;
|
||||
/* stats counter for tx ppdu processed */
|
||||
uint64_t tx_ppdu_proc;
|
||||
@@ -1944,6 +1944,8 @@ struct dp_peer {
|
||||
wds_enabled:1, /* WDS peer */
|
||||
authorize:1, /* Set when authorized */
|
||||
nac:1, /* NAC Peer*/
|
||||
tx_cap_enabled:1, /* Peer's tx-capture is enabled */
|
||||
rx_cap_enabled:1, /* Peer's rx-capture is enabled */
|
||||
valid:1; /* valid bit */
|
||||
|
||||
/* MCL specific peer local id */
|
||||
|
Reference in New Issue
Block a user