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