qcacld-3.0: Add support to control fisa per vdev at runtime
Add support to enable or disable fisa aggregation per vdev at runtime. Change-Id: I4f19e09631de921b3e006fbe026ea728e95e3f83 CRs-Fixed: 2739427
This commit is contained in:
parent
44f7f0d09f
commit
84e341f395
@ -1122,6 +1122,65 @@ static bool dp_is_nbuf_bypass_fisa(qdf_nbuf_t nbuf)
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_rx_fisa_flush_by_vdev_ctx_id() - Flush fisa aggregates per vdev and rx
|
||||
* context id
|
||||
* @soc: core txrx main context
|
||||
* @vdev: Handle DP vdev
|
||||
* @rx_ctx_id: Rx context id
|
||||
*
|
||||
* Return: Success on flushing the flows for the vdev and rx ctx id
|
||||
*/
|
||||
static
|
||||
QDF_STATUS dp_rx_fisa_flush_by_vdev_ctx_id(struct dp_soc *soc,
|
||||
struct dp_vdev *vdev,
|
||||
uint8_t rx_ctx_id)
|
||||
{
|
||||
struct dp_rx_fst *fisa_hdl = soc->rx_fst;
|
||||
struct dp_fisa_rx_sw_ft *sw_ft_entry =
|
||||
(struct dp_fisa_rx_sw_ft *)fisa_hdl->base;
|
||||
int ft_size = fisa_hdl->max_entries;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ft_size; i++) {
|
||||
if (sw_ft_entry[i].is_populated &&
|
||||
vdev == sw_ft_entry[i].vdev &&
|
||||
sw_ft_entry[i].napi_id == rx_ctx_id) {
|
||||
dp_fisa_debug("flushing %d %pk vdev %pK napi id:%d", i,
|
||||
&sw_ft_entry[i], vdev, rx_ctx_id);
|
||||
dp_rx_fisa_flush_flow_wrap(&sw_ft_entry[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_fisa_disallowed_for_vdev() - Check if fisa is allowed on vdev
|
||||
* @soc: core txrx main context
|
||||
* @vdev: Handle DP vdev
|
||||
* @rx_ctx_id: Rx context id
|
||||
*
|
||||
* Return: true if fisa is disallowed for vdev else false
|
||||
*/
|
||||
static bool dp_fisa_disallowed_for_vdev(struct dp_soc *soc,
|
||||
struct dp_vdev *vdev,
|
||||
uint8_t rx_ctx_id)
|
||||
{
|
||||
if (!vdev->fisa_disallowed[rx_ctx_id]) {
|
||||
if (vdev->fisa_force_flushed[rx_ctx_id])
|
||||
vdev->fisa_force_flushed[rx_ctx_id] = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!vdev->fisa_force_flushed[rx_ctx_id]) {
|
||||
dp_rx_fisa_flush_by_vdev_ctx_id(soc, vdev, rx_ctx_id);
|
||||
vdev->fisa_force_flushed[rx_ctx_id] = 1;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_fisa_rx() - Entry function to FISA to handle aggregation
|
||||
* @soc: core txrx main context
|
||||
@ -1150,6 +1209,9 @@ QDF_STATUS dp_fisa_rx(struct dp_soc *soc, struct dp_vdev *vdev,
|
||||
if (dp_is_nbuf_bypass_fisa(head_nbuf))
|
||||
goto deliver_nbuf;
|
||||
|
||||
if (dp_fisa_disallowed_for_vdev(soc, vdev, rx_ctx_id))
|
||||
goto deliver_nbuf;
|
||||
|
||||
if (qdf_atomic_read(&soc->skip_fisa_param.skip_fisa)) {
|
||||
if (!soc->skip_fisa_param.fisa_force_flush[rx_ctx_id]) {
|
||||
dp_rx_fisa_flush_by_ctx_id(soc, rx_ctx_id);
|
||||
@ -1305,3 +1367,16 @@ QDF_STATUS dp_rx_fisa_flush_by_vdev_id(struct dp_soc *soc, uint8_t vdev_id)
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
void dp_set_fisa_disallowed_for_vdev(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
||||
uint8_t rx_ctx_id, uint8_t val)
|
||||
{
|
||||
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
|
||||
struct dp_vdev *vdev;
|
||||
|
||||
vdev = dp_get_vdev_from_soc_vdev_id_wifi3(soc, vdev_id);
|
||||
if (qdf_unlikely(!vdev))
|
||||
return;
|
||||
|
||||
vdev->fisa_disallowed[rx_ctx_id] = val;
|
||||
}
|
||||
|
@ -90,6 +90,18 @@ void dp_rx_skip_fisa(struct cdp_soc_t *cdp_soc, uint32_t value)
|
||||
|
||||
qdf_atomic_set(&soc->skip_fisa_param.skip_fisa, !value);
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_set_fisa_disallowed_for_vdev() - Set fisa disallowed flag for vdev
|
||||
* @cdp_soc: core txrx main context
|
||||
* @vdev_id: Vdev id
|
||||
* @rx_ctx_id: rx context id
|
||||
* @val: value to be set
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void dp_set_fisa_disallowed_for_vdev(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
|
||||
uint8_t rx_ctx_id, uint8_t val);
|
||||
#else
|
||||
static QDF_STATUS dp_rx_dump_fisa_stats(struct dp_soc *soc)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user