1 /*
2  * Copyright (c) 2015-2020 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef WMI_FILTERED_LOGGING_H
21 #define WMI_FILTERED_LOGGING_H
22 
23 #include <qdf_debugfs.h>
24 #include "wmi_unified_priv.h"
25 
26 #ifdef WMI_INTERFACE_FILTERED_EVENT_LOGGING
27 /**
28  * wmi_specific_cmd_record() - Record user specified command
29  * @wmi_handle: handle to WMI
30  * @id: cmd id
31  * @buf: buf containing cmd details
32  *
33  * Check if the command id is in target list,
34  * if found, record it.
35  *
36  * Context: the function will not sleep, caller is expected to hold
37  * proper locking.
38  *
39  * Return: none
40  */
41 void wmi_specific_cmd_record(wmi_unified_t wmi_handle,
42 			     uint32_t id, uint8_t *buf);
43 
44 /**
45  * wmi_specific_evt_record() - Record user specified event
46  * @wmi_handle: handle to WMI
47  * @id: cmd id
48  * @buf: buf containing event details
49  *
50  * Check if the event id is in target list,
51  * if found, record it.
52  *
53  * Context: the function will not sleep, caller is expected to hold
54  * proper locking.
55  *
56  * Return: none
57  */
58 void wmi_specific_evt_record(wmi_unified_t wmi_handle,
59 			     uint32_t id, uint8_t *buf);
60 
61 /**
62  * wmi_filtered_logging_init() - initialize filtered logging
63  * @wmi_handle: handle to WMI
64  *
65  * Context: the function will not sleep, no lock needed
66  *
67  * Return: none
68  */
69 void wmi_filtered_logging_init(wmi_unified_t wmi_handle);
70 
71 /**
72  * wmi_filtered_logging_free() - free the buffers for filtered logging
73  * @wmi_handle: handle to WMI
74  *
75  * Context: the function will not sleep, no lock needed
76  *
77  * Return: none
78  */
79 void wmi_filtered_logging_free(wmi_unified_t wmi_handle);
80 
81 /*
82  * Debugfs read/write functions
83  */
84 /**
85  * debug_filtered_wmi_cmds_show() - debugfs read function for filtered_wmi_cmds
86  * @m: seq_file handle
87  * @v: not used, offset of read
88  * Return: number of bytes read
89  */
90 int debug_filtered_wmi_cmds_show(qdf_debugfs_file_t m, void *v);
91 
92 /**
93  * debug_filtered_wmi_evts_show() - debugfs read function for filtered_wmi_evts
94  * @m: seq_file handle
95  * @v: not used, offset of read
96  * Return: number of bytes read
97  */
98 int debug_filtered_wmi_evts_show(qdf_debugfs_file_t m, void *v);
99 
100 /**
101  * debug_wmi_filtered_command_log_show() - debugfs read function for
102  * wmi_filtered_command_log
103  * @m: seq_file handle
104  * @v: not used, offset of read
105  * Return: number of bytes read
106  */
107 int debug_wmi_filtered_command_log_show(qdf_debugfs_file_t m, void *v);
108 
109 /**
110  * debug_wmi_filtered_event_log_show() - debugfs read function for
111  * wmi_filtered_event_log
112  * @m: seq_file handle
113  * @v: not used, offset of read
114  * Return: number of bytes read
115  */
116 int debug_wmi_filtered_event_log_show(qdf_debugfs_file_t m, void *v);
117 
118 /**
119  * debug_filtered_wmi_cmds_write() - debugfs write for filtered_wmi_cmds
120  *
121  * @file: file handler to access wmi_handle
122  * @buf: received data buffer
123  * @count: length of received buffer
124  * @ppos: Not used
125  *
126  * Return: count
127  */
128 ssize_t debug_filtered_wmi_cmds_write(struct file *file,
129 				      const char __user *buf,
130 				      size_t count, loff_t *ppos);
131 
132 /**
133  * debug_filtered_wmi_evts_write() - debugfs write for filtered_wmi_evts
134  *
135  * @file: file handler to access wmi_handle
136  * @buf: received data buffer
137  * @count: length of received buffer
138  * @ppos: Not used
139  *
140  * Return: count
141  */
142 ssize_t debug_filtered_wmi_evts_write(struct file *file,
143 				      const char __user *buf,
144 				      size_t count, loff_t *ppos);
145 
146 /**
147  * debug_wmi_filtered_command_log_write() - debugfs write for
148  * filtered_command_log
149  *
150  * @file: file handler to access wmi_handle
151  * @buf: received data buffer
152  * @count: length of received buffer
153  * @ppos: Not used
154  *
155  * Return: count
156  */
157 ssize_t debug_wmi_filtered_command_log_write(struct file *file,
158 					     const char __user *buf,
159 					     size_t count, loff_t *ppos);
160 
161 /**
162  * debug_wmi_filtered_event_log_write() - debugfs write for filtered_event_log
163  *
164  * @file: file handler to access wmi_handle
165  * @buf: received data buffer
166  * @count: length of received buffer
167  * @ppos: Not used
168  *
169  * Return: count
170  */
171 ssize_t debug_wmi_filtered_event_log_write(struct file *file,
172 					   const char __user *buf,
173 					   size_t count, loff_t *ppos);
174 
175 #else /* WMI_INTERFACE_FILTERED_EVENT_LOGGING */
176 
wmi_specific_cmd_record(wmi_unified_t wmi_handle,uint32_t id,uint8_t * buf)177 static inline void wmi_specific_cmd_record(wmi_unified_t wmi_handle,
178 					   uint32_t id, uint8_t *buf)
179 {
180 	/* do nothing */
181 }
182 
wmi_specific_evt_record(wmi_unified_t wmi_handle,uint32_t id,uint8_t * buf)183 static inline void wmi_specific_evt_record(wmi_unified_t wmi_handle,
184 					   uint32_t id, uint8_t *buf)
185 {
186 	/* do nothing */
187 }
188 
wmi_filtered_logging_init(wmi_unified_t wmi_handle)189 static inline void wmi_filtered_logging_init(wmi_unified_t wmi_handle)
190 {
191 	/* do nothing */
192 }
193 
wmi_filtered_logging_free(wmi_unified_t wmi_handle)194 static inline void wmi_filtered_logging_free(wmi_unified_t wmi_handle)
195 {
196 	/* do nothing */
197 }
198 #endif /* end of WMI_INTERFACE_FILTERED_EVENT_LOGGING */
199 
200 #endif /*WMI_FILTERED_LOGGING_H*/
201