1  /*
2   * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
3   *
4   * Permission to use, copy, modify, and/or distribute this software for
5   * any purpose with or without fee is hereby granted, provided that the
6   * above copyright notice and this permission notice appear in all
7   * copies.
8   *
9   * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10   * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11   * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12   * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13   * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14   * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15   * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16   * PERFORMANCE OF THIS SOFTWARE.
17   */
18  
19  #ifndef _PKTLOG_AC_I_
20  #define _PKTLOG_AC_I_
21  
22  #ifndef REMOVE_PKT_LOG
23  
24  #include <ol_txrx_internal.h>
25  #include <pktlog_ac.h>
26  
27  
28  #define PKTLOG_TAG                      "ATH_PKTLOG"
29  #define PKTLOG_DEFAULT_BUFSIZE          (10 * 1024 * 1024) /* 10MB */
30  #define PKTLOG_DEFAULT_SACK_THR         3
31  #define PKTLOG_DEFAULT_TAIL_LENGTH      100
32  #define PKTLOG_DEFAULT_THRUPUT_THRESH   (64 * 1024)
33  #define PKTLOG_DEFAULT_PER_THRESH       30
34  #define PKTLOG_DEFAULT_PHYERR_THRESH    300
35  #define PKTLOG_DEFAULT_TRIGGER_INTERVAL 500
36  
37  /* Max Pktlog buffer size received from fw/hw */
38  #define MAX_PKTLOG_RECV_BUF_SIZE        2048
39  
40  struct ath_pktlog_arg {
41  	struct ath_pktlog_info *pl_info;
42  	uint32_t flags;
43  	uint16_t missed_cnt;
44  #ifdef HELIUMPLUS
45  	uint8_t log_type;
46  	uint8_t macId;
47  #else
48  	uint16_t log_type;
49  #endif
50  	size_t log_size;
51  	uint16_t timestamp;
52  #ifdef PKTLOG_HAS_SPECIFIC_DATA
53  	uint32_t type_specific_data;
54  #endif
55  	char *buf;
56  };
57  
58  void pktlog_getbuf_intsafe(struct ath_pktlog_arg *plarg);
59  char *pktlog_getbuf(struct pktlog_dev_t *pl_dev,
60  		    struct ath_pktlog_info *pl_info,
61  		    size_t log_size, struct ath_pktlog_hdr *pl_hdr);
62  
63  #ifdef PKTLOG_HAS_SPECIFIC_DATA
64  /**
65   * pktlog_hdr_set_specific_data() - set type specific data
66   * @log_hdr: pktlog header
67   * @type_specific_data: type specific data
68   *
69   * Return: None
70   */
71  void
72  pktlog_hdr_set_specific_data(struct ath_pktlog_hdr *log_hdr,
73  			     uint32_t type_specific_data);
74  
75  /**
76   * pktlog_hdr_get_specific_data() - get type specific data
77   * @log_hdr: pktlog header
78   * @type_specific_data: type specific data
79   *
80   * Return: pktlog subtype
81   */
82  uint32_t
83  pktlog_hdr_get_specific_data(struct ath_pktlog_hdr *log_hdr);
84  
85  /**
86   * pktlog_arg_set_specific_data() - set type specific data
87   * @log_hdr: pktlog arg
88   * @type_specific_data: type specific data
89   *
90   * Return: None
91   */
92  void
93  pktlog_arg_set_specific_data(struct ath_pktlog_arg *plarg,
94  			     uint32_t type_specific_data);
95  
96  /**
97   * pktlog_arg_get_specific_data() - set type specific data
98   * @log_hdr: pktlog arg
99   * @type_specific_data: type specific data
100   *
101   * Return: pktlog subtype
102   */
103  uint32_t
104  pktlog_arg_get_specific_data(struct ath_pktlog_arg *plarg);
105  #else
106  static inline void
pktlog_hdr_set_specific_data(struct ath_pktlog_hdr * log_hdr,uint32_t type_specific_data)107  pktlog_hdr_set_specific_data(struct ath_pktlog_hdr *log_hdr,
108  			     uint32_t type_specific_data)
109  {
110  }
111  
112  static inline uint32_t
pktlog_hdr_get_specific_data(struct ath_pktlog_hdr * log_hdr)113  pktlog_hdr_get_specific_data(struct ath_pktlog_hdr *log_hdr)
114  {
115  	return 0;
116  }
117  
118  static inline void
pktlog_arg_set_specific_data(struct ath_pktlog_arg * plarg,uint32_t type_specific_data)119  pktlog_arg_set_specific_data(struct ath_pktlog_arg *plarg,
120  			     uint32_t type_specific_data)
121  {
122  }
123  
124  static inline uint32_t
pktlog_arg_get_specific_data(struct ath_pktlog_arg * plarg)125  pktlog_arg_get_specific_data(struct ath_pktlog_arg *plarg)
126  {
127  	return 0;
128  }
129  #endif /* PKTLOG_HAS_SPECIFIC_DATA */
130  #endif /* REMOVE_PKT_LOG */
131  #endif
132