blob: 2642c584ae4ab55079e6970a0bca5ad9a4b24871 [file] [log] [blame]
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <dp_types.h>
#include <qdf_status.h>
//#define FISA_DEBUG_ENABLE
#ifdef FISA_DEBUG_ENABLE
#define dp_fisa_debug dp_info
#else
#define dp_fisa_debug dp_debug
#endif
#if defined(WLAN_SUPPORT_RX_FISA)
#define FSE_CACHE_FLUSH_TIME_OUT 5 /* milliSeconds */
#define FISA_UDP_MAX_DATA_LEN 1470 /* udp max data length */
#define FISA_UDP_HDR_LEN 8 /* udp header length */
#define FISA_FLOW_MAX_AGGR_COUNT 16 /* max flow aggregate count */
/* single packet max cumulative ip length */
#define FISA_MAX_SINGLE_CUMULATIVE_IP_LEN \
(FISA_UDP_MAX_DATA_LEN + FISA_UDP_HDR_LEN)
/* max flow cumulative ip length */
#define FISA_FLOW_MAX_CUMULATIVE_IP_LEN \
(FISA_MAX_SINGLE_CUMULATIVE_IP_LEN * FISA_FLOW_MAX_AGGR_COUNT)
/**
* dp_rx_dump_fisa_stats() - Dump fisa stats
* @soc: core txrx main context
*
* Return: QDF_STATUS
*/
QDF_STATUS dp_rx_dump_fisa_stats(struct dp_soc *soc);
/**
* dp_fisa_rx() - FISA Rx packet delivery entry function
* @soc: core txrx main context
* @vdev: core txrx vdev
* @nbuf_list: Delivery list of nbufs
*
* Return: QDF_STATUS
*/
QDF_STATUS dp_fisa_rx(struct dp_soc *dp_fisa_rx_hdl, struct dp_vdev *vdev,
qdf_nbuf_t nbuf_list);
/**
* dp_rx_fisa_flush_by_ctx_id() - FISA Rx flush function to flush
* aggregation at end of NAPI
* @soc: core txrx main context
* @napi_id: Flows which are rxed on the NAPI ID to be flushed
*
* Return: QDF_STATUS
*/
QDF_STATUS dp_rx_fisa_flush_by_ctx_id(struct dp_soc *soc, int napi_id);
/**
* dp_rx_fisa_flush_by_vdev_id() - Flush fisa aggregates per vdev id
* @soc: core txrx main context
* @vdev_id: vdev ID
*
* Return: Success on flushing the flows for the vdev
*/
QDF_STATUS dp_rx_fisa_flush_by_vdev_id(struct dp_soc *soc, uint8_t vdev_id);
/**
* dp_rx_skip_fisa() - Set flags to skip fisa aggregation
* @cdp_soc: core txrx main context
* @value: allow or skip fisa
*
* Return: None
*/
static inline
void dp_rx_skip_fisa(struct cdp_soc_t *cdp_soc, uint32_t value)
{
struct dp_soc *soc = (struct dp_soc *)cdp_soc;
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)
{
return QDF_STATUS_SUCCESS;
}
void dp_rx_dump_fisa_table(struct dp_soc *soc)
{
}
#endif