Currently data path Rxdma ring structure store the IDR buffer and lock. These IDR handling is needed only for SW cookie conversion and not needed for HW cookie conversion. REO Rxdma ring use the HW cookie conversion and monitor Rxdma ring use the SW cookie conversion. Since idr not needed for REO Rxdma ring, remove the IDR data entity from the data path Rxdma ring structure. Introduce the new data path ring structure for monitor rxmda rings since it need IDR data entity. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00125-QCAHKSWPL_SILICONZ-1 Signed-off-by: Karthikeyan Periyasamy <quic_periyasa@quicinc.com> Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com> Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com> Link: https://lore.kernel.org/r/20231111043934.20485-5-quic_periyasa@quicinc.com
106 lines
2.8 KiB
C
106 lines
2.8 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
|
/*
|
|
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef ATH12K_DP_MON_H
|
|
#define ATH12K_DP_MON_H
|
|
|
|
#include "core.h"
|
|
|
|
enum dp_monitor_mode {
|
|
ATH12K_DP_TX_MONITOR_MODE,
|
|
ATH12K_DP_RX_MONITOR_MODE
|
|
};
|
|
|
|
enum dp_mon_tx_ppdu_info_type {
|
|
DP_MON_TX_PROT_PPDU_INFO,
|
|
DP_MON_TX_DATA_PPDU_INFO
|
|
};
|
|
|
|
enum dp_mon_tx_tlv_status {
|
|
DP_MON_TX_FES_SETUP,
|
|
DP_MON_TX_FES_STATUS_END,
|
|
DP_MON_RX_RESPONSE_REQUIRED_INFO,
|
|
DP_MON_RESPONSE_END_STATUS_INFO,
|
|
DP_MON_TX_MPDU_START,
|
|
DP_MON_TX_MSDU_START,
|
|
DP_MON_TX_BUFFER_ADDR,
|
|
DP_MON_TX_DATA,
|
|
DP_MON_TX_STATUS_PPDU_NOT_DONE,
|
|
};
|
|
|
|
enum dp_mon_tx_medium_protection_type {
|
|
DP_MON_TX_MEDIUM_NO_PROTECTION,
|
|
DP_MON_TX_MEDIUM_RTS_LEGACY,
|
|
DP_MON_TX_MEDIUM_RTS_11AC_STATIC_BW,
|
|
DP_MON_TX_MEDIUM_RTS_11AC_DYNAMIC_BW,
|
|
DP_MON_TX_MEDIUM_CTS2SELF,
|
|
DP_MON_TX_MEDIUM_QOS_NULL_NO_ACK_3ADDR,
|
|
DP_MON_TX_MEDIUM_QOS_NULL_NO_ACK_4ADDR
|
|
};
|
|
|
|
struct dp_mon_qosframe_addr4 {
|
|
__le16 frame_control;
|
|
__le16 duration;
|
|
u8 addr1[ETH_ALEN];
|
|
u8 addr2[ETH_ALEN];
|
|
u8 addr3[ETH_ALEN];
|
|
__le16 seq_ctrl;
|
|
u8 addr4[ETH_ALEN];
|
|
__le16 qos_ctrl;
|
|
} __packed;
|
|
|
|
struct dp_mon_frame_min_one {
|
|
__le16 frame_control;
|
|
__le16 duration;
|
|
u8 addr1[ETH_ALEN];
|
|
} __packed;
|
|
|
|
struct dp_mon_packet_info {
|
|
u64 cookie;
|
|
u16 dma_length;
|
|
bool msdu_continuation;
|
|
bool truncated;
|
|
};
|
|
|
|
struct dp_mon_tx_ppdu_info {
|
|
u32 ppdu_id;
|
|
u8 num_users;
|
|
bool is_used;
|
|
struct hal_rx_mon_ppdu_info rx_status;
|
|
struct list_head dp_tx_mon_mpdu_list;
|
|
struct dp_mon_mpdu *tx_mon_mpdu;
|
|
};
|
|
|
|
enum hal_rx_mon_status
|
|
ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
|
|
struct ath12k_mon_data *pmon,
|
|
int mac_id, struct sk_buff *skb,
|
|
struct napi_struct *napi);
|
|
int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
|
|
struct dp_rxdma_mon_ring *buf_ring,
|
|
int req_entries);
|
|
int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id,
|
|
int *budget, enum dp_monitor_mode monitor_mode,
|
|
struct napi_struct *napi);
|
|
int ath12k_dp_mon_process_ring(struct ath12k_base *ab, int mac_id,
|
|
struct napi_struct *napi, int budget,
|
|
enum dp_monitor_mode monitor_mode);
|
|
struct sk_buff *ath12k_dp_mon_tx_alloc_skb(void);
|
|
enum dp_mon_tx_tlv_status
|
|
ath12k_dp_mon_tx_status_get_num_user(u16 tlv_tag,
|
|
struct hal_tlv_hdr *tx_tlv,
|
|
u8 *num_users);
|
|
enum hal_rx_mon_status
|
|
ath12k_dp_mon_tx_parse_mon_status(struct ath12k *ar,
|
|
struct ath12k_mon_data *pmon,
|
|
int mac_id,
|
|
struct sk_buff *skb,
|
|
struct napi_struct *napi,
|
|
u32 ppdu_id);
|
|
void ath12k_dp_mon_rx_process_ulofdma(struct hal_rx_mon_ppdu_info *ppdu_info);
|
|
int ath12k_dp_mon_rx_process_stats(struct ath12k *ar, int mac_id,
|
|
struct napi_struct *napi, int *budget);
|
|
#endif
|