blob: 711185f28b424457655d71670686ab9c57b3ed31 [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.
*/
#ifndef _DP_MON_FILTER_H_
#define _DP_MON_FILTER_H_
/**
* Accessor Macros to access the software
* defined HTT filter htt_rx_ring_tlv_filter.
*/
#define DP_MON_FILTER_TLV_OFFSET 0x00000000
#define DP_MON_FILTER_TLV_MASK 0xffffffff
#define DP_MON_FILTER_TLV_LSB 0
#define DP_MON_FILTER_FP_MGMT_OFFSET 0x00000004
#define DP_MON_FILTER_FP_MGMT_MASK 0x0000ffff
#define DP_MON_FILTER_FP_MGMT_LSB 0
#define DP_MON_FILTER_MO_MGMT_OFFSET 0x00000004
#define DP_MON_FILTER_MO_MGMT_MASK 0xffff0000
#define DP_MON_FILTER_MO_MGMT_LSB 16
#define DP_MON_FILTER_FP_CTRL_OFFSET 0x00000008
#define DP_MON_FILTER_FP_CTRL_MASK 0x0000ffff
#define DP_MON_FILTER_FP_CTRL_LSB 0
#define DP_MON_FILTER_MO_CTRL_OFFSET 0x00000008
#define DP_MON_FILTER_MO_CTRL_MASK 0xffff0000
#define DP_MON_FILTER_MO_CTRL_LSB 16
#define DP_MON_FILTER_FP_DATA_OFFSET 0x0000000c
#define DP_MON_FILTER_FP_DATA_MASK 0x0000ffff
#define DP_MON_FILTER_FP_DATA_LSB 0
#define DP_MON_FILTER_MO_DATA_OFFSET 0x0000000c
#define DP_MON_FILTER_MO_DATA_MASK 0xffff0000
#define DP_MON_FILTER_MO_DATA_LSB 16
#define DP_MON_FILTER_MD_DATA_OFFSET 0x00000010
#define DP_MON_FILTER_MD_DATA_MASK 0x0000ffff
#define DP_MON_FILTER_MD_DATA_LSB 0
#define DP_MON_FILTER_MD_MGMT_OFFSET 0x00000010
#define DP_MON_FILTER_MD_MGMT_MASK 0xffff0000
#define DP_MON_FILTER_MD_MGMT_LSB 16
#define DP_MON_FILTER_MD_CTRL_OFFSET 0x00000014
#define DP_MON_FILTER_MD_CTRL_MASK 0x0000ffff
#define DP_MON_FILTER_MD_CTRL_LSB 0
#define DP_MON_FILTER_GET(src, field) \
((*((uint32_t *)((uint8_t *)(src) + DP_MON_ ## field ## _OFFSET)) & \
(DP_MON_ ## field ## _MASK)) >> DP_MON_ ## field ## _LSB) \
#define DP_MON_FILTER_SET(dst, field, value) \
do { \
uint32_t *val = \
((uint32_t *)((uint8_t *)(dst) + DP_MON_ ## field ## _OFFSET)); \
*val &= ~(DP_MON_ ## field ## _MASK); \
*val |= ((value) << DP_MON_ ## field ## _LSB); \
} while (0)
#define DP_MON_FILTER_PRINT(fmt, args ...) \
QDF_TRACE(QDF_MODULE_ID_MON_FILTER, QDF_TRACE_LEVEL_DEBUG, \
fmt, ## args)
/**
* struct dp_mon_filter - Monitor TLV filter
* @valid: enable/disable TLV filter
* @tlv_filter: Rx ring TLV filter
*/
struct dp_mon_filter {
bool valid;
struct htt_rx_ring_tlv_filter tlv_filter;
};
/**
* enum dp_mon_filter_mode - Different modes for SRNG filters
* @DP_MON_FILTER_ENHACHED_STATS_MODE: PPDU enhanced stats mode
* @DP_MON_FILTER_SMART_MONITOR_MODE: Smart monitor mode
* @DP_MON_FILTER_MCOPY_MODE: AM copy mode
* @DP_MON_FILTER_MONITOR_MODE: Monitor mode
* @DP_MON_FILTER_RX_CAPTURE_MODE: Rx Capture mode
* @DP_MON_FILTER_PKT_LOG_FULL_MODE: Packet log full mode
* @DP_MON_FILTER_PKT_LOG_LITE_MODE: Packet log lite mode
*/
enum dp_mon_filter_mode {
#ifdef FEATURE_PERPKT_INFO
DP_MON_FILTER_ENHACHED_STATS_MODE,
DP_MON_FILTER_MCOPY_MODE,
#endif /* FEATURE_PERPKT_INFO */
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
DP_MON_FILTER_SMART_MONITOR_MODE,
#endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
DP_MON_FILTER_MONITOR_MODE,
#ifdef WLAN_RX_PKT_CAPTURE_ENH
DP_MON_FILTER_RX_CAPTURE_MODE,
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
#ifdef WDI_EVENT_ENABLE
DP_MON_FILTER_PKT_LOG_FULL_MODE,
DP_MON_FILTER_PKT_LOG_LITE_MODE,
#endif /* WDI_EVENT_ENABLE */
DP_MON_FILTER_MAX_MODE
};
/**
* enum dp_mon_filter_srng_type - Srng types dynamic mode filter
* settings.
* @DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF: RXDMA srng type
* @DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS: RxDMA monitor status srng
* @DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF: RxDMA destination srng
* @DP_MON_FILTER_SRNG_TYPE_MAX: Srng max type
*/
enum dp_mon_filter_srng_type {
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF,
DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS,
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF,
DP_MON_FILTER_SRNG_TYPE_MAX
};
/**
* enum dp_mon_filter_action - Action for storing the filters
* into the radio structure.
* @DP_MON_FILTER_CLEAR - Clears the filter for a mode
* @DP_MON_FILTER_SET - Set the filtes for a mode
*/
enum dp_mon_filter_action {
DP_MON_FILTER_CLEAR,
DP_MON_FILTER_SET,
};
#ifdef FEATURE_PERPKT_INFO
/**
* dp_mon_filter_setup_enhanced_stats() - Setup the enhanced stats filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_enhanced_stats(struct dp_pdev *pdev);
/***
* dp_mon_filter_reset_enhanced_stats() - Reset the enhanced stats filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_enhanced_stats(struct dp_pdev *pdev);
/**
* dp_mon_filter_setup_mcopy_mode() - Setup the m_copy mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_mcopy_mode(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_mcopy_mode() - Reset the m_copy mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_mcopy_mode(struct dp_pdev *pdev);
#endif /* FEATURE_PERPKT_INFO */
#if defined(ATH_SUPPORT_NAC_RSSI) || defined(ATH_SUPPORT_NAC)
/**
* dp_mon_filter_setup_smart_monitor() - Setup the smart monitor mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_smart_monitor(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_smart_monitor() - Reset the smart monitor mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_smart_monitor(struct dp_pdev *pdev);
#endif /* ATH_SUPPORT_NAC_RSSI || ATH_SUPPORT_NAC */
#ifdef WLAN_RX_PKT_CAPTURE_ENH
/**
* dp_mon_filter_setup_rx_enh_capture() - Setup the Rx capture mode filters
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_rx_enh_capture(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_rx_enh_capture() - Reset the Rx capture mode filters
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_enh_capture(struct dp_pdev *pdev);
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
/**
* dp_mon_filter_setup_mon_mode() - Setup the Rx monitor mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_mon_mode(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_mon_mode() - Reset the Rx monitor mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_mon_mode(struct dp_pdev *pdev);
#ifdef WDI_EVENT_ENABLE
/**
* dp_mon_filter_setup_rx_pkt_log_full() - Setup the Rx pktlog full mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_rx_pkt_log_full(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_rx_pkt_log_full() - Reset the Rx pktlog full mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pkt_log_full(struct dp_pdev *pdev);
/**
* dp_mon_filter_setup_rx_pkt_log_lite() - Setup the Rx pktlog lite mode filter
* in the radio object.
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_rx_pkt_log_lite(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_rx_pkt_log_lite() - Reset the Rx pktlog lite mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pkt_log_lite(struct dp_pdev *pdev);
#endif /* WDI_EVENT_ENABLE */
/**
* dp_mon_filter_update() - Setup the monitor filter setting for a srng
* type
* @pdev: DP pdev handle
*
* Return: QDF_STATUS
*/
QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev);
/**
* dp_mon_filter_dealloc() - Deallocate the filter objects to be stored in
* the radio object.
* @pdev: DP pdev handle
*/
void dp_mon_filter_dealloc(struct dp_pdev *pdev);
/**
* dp_mon_filter_alloc() - Allocate the filter objects to be stored in
* the radio object.
* @pdev: DP pdev handle
*/
struct dp_mon_filter **dp_mon_filter_alloc(struct dp_pdev *pdev);
#endif /* #ifndef _DP_MON_FILTER_H_ */