Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: BSD-3-Clause-Clear */
  2/*
  3 * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
  4 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  5 */
  6
  7#ifndef ATH12K_DP_MON_H
  8#define ATH12K_DP_MON_H
  9
 10#include "core.h"
 11
 12enum dp_monitor_mode {
 13	ATH12K_DP_TX_MONITOR_MODE,
 14	ATH12K_DP_RX_MONITOR_MODE
 15};
 16
 17enum dp_mon_tx_ppdu_info_type {
 18	DP_MON_TX_PROT_PPDU_INFO,
 19	DP_MON_TX_DATA_PPDU_INFO
 20};
 21
 22enum dp_mon_tx_tlv_status {
 23	DP_MON_TX_FES_SETUP,
 24	DP_MON_TX_FES_STATUS_END,
 25	DP_MON_RX_RESPONSE_REQUIRED_INFO,
 26	DP_MON_RESPONSE_END_STATUS_INFO,
 27	DP_MON_TX_MPDU_START,
 28	DP_MON_TX_MSDU_START,
 29	DP_MON_TX_BUFFER_ADDR,
 30	DP_MON_TX_DATA,
 31	DP_MON_TX_STATUS_PPDU_NOT_DONE,
 32};
 33
 34enum dp_mon_tx_medium_protection_type {
 35	DP_MON_TX_MEDIUM_NO_PROTECTION,
 36	DP_MON_TX_MEDIUM_RTS_LEGACY,
 37	DP_MON_TX_MEDIUM_RTS_11AC_STATIC_BW,
 38	DP_MON_TX_MEDIUM_RTS_11AC_DYNAMIC_BW,
 39	DP_MON_TX_MEDIUM_CTS2SELF,
 40	DP_MON_TX_MEDIUM_QOS_NULL_NO_ACK_3ADDR,
 41	DP_MON_TX_MEDIUM_QOS_NULL_NO_ACK_4ADDR
 42};
 43
 44struct dp_mon_qosframe_addr4 {
 45	__le16 frame_control;
 46	__le16 duration;
 47	u8 addr1[ETH_ALEN];
 48	u8 addr2[ETH_ALEN];
 49	u8 addr3[ETH_ALEN];
 50	__le16 seq_ctrl;
 51	u8 addr4[ETH_ALEN];
 52	__le16 qos_ctrl;
 53} __packed;
 54
 55struct dp_mon_frame_min_one {
 56	__le16 frame_control;
 57	__le16 duration;
 58	u8 addr1[ETH_ALEN];
 59} __packed;
 60
 61struct dp_mon_packet_info {
 62	u64 cookie;
 63	u16 dma_length;
 64	bool msdu_continuation;
 65	bool truncated;
 66};
 67
 68struct dp_mon_tx_ppdu_info {
 69	u32 ppdu_id;
 70	u8  num_users;
 71	bool is_used;
 72	struct hal_rx_mon_ppdu_info rx_status;
 73	struct list_head dp_tx_mon_mpdu_list;
 74	struct dp_mon_mpdu *tx_mon_mpdu;
 75};
 76
 77enum hal_rx_mon_status
 78ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
 79				  struct ath12k_mon_data *pmon,
 80				  int mac_id, struct sk_buff *skb,
 81				  struct napi_struct *napi);
 82int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
 83				struct dp_rxdma_mon_ring *buf_ring,
 84				int req_entries);
 85int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id,
 86			       int *budget, enum dp_monitor_mode monitor_mode,
 87			       struct napi_struct *napi);
 88int ath12k_dp_mon_process_ring(struct ath12k_base *ab, int mac_id,
 89			       struct napi_struct *napi, int budget,
 90			       enum dp_monitor_mode monitor_mode);
 91struct sk_buff *ath12k_dp_mon_tx_alloc_skb(void);
 92enum dp_mon_tx_tlv_status
 93ath12k_dp_mon_tx_status_get_num_user(u16 tlv_tag,
 94				     struct hal_tlv_hdr *tx_tlv,
 95				     u8 *num_users);
 96enum hal_rx_mon_status
 97ath12k_dp_mon_tx_parse_mon_status(struct ath12k *ar,
 98				  struct ath12k_mon_data *pmon,
 99				  int mac_id,
100				  struct sk_buff *skb,
101				  struct napi_struct *napi,
102				  u32 ppdu_id);
103void ath12k_dp_mon_rx_process_ulofdma(struct hal_rx_mon_ppdu_info *ppdu_info);
104int ath12k_dp_mon_rx_process_stats(struct ath12k *ar, int mac_id,
105				   struct napi_struct *napi, int *budget);
106#endif