1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright (C) 2018-2023 Intel Corporation
4  */
5 #ifndef __iwl_fw_dbg_tlv_h__
6 #define __iwl_fw_dbg_tlv_h__
7 
8 #include <linux/bitops.h>
9 
10 #define IWL_FW_INI_MAX_REGION_ID		64
11 #define IWL_FW_INI_MAX_NAME			32
12 #define IWL_FW_INI_MAX_CFG_NAME			64
13 #define IWL_FW_INI_DOMAIN_ALWAYS_ON		0
14 #define IWL_FW_INI_REGION_ID_MASK		GENMASK(15, 0)
15 #define IWL_FW_INI_REGION_DUMP_POLICY_MASK	GENMASK(31, 16)
16 #define IWL_FW_INI_PRESET_DISABLE		0xff
17 
18 /**
19  * struct iwl_fw_ini_hcmd
20  *
21  * @id: the debug configuration command type for instance: 0xf6 / 0xf5 / DHC
22  * @group: the desired cmd group
23  * @reserved: to align to FW struct
24  * @data: all of the relevant command data to be sent
25  */
26 struct iwl_fw_ini_hcmd {
27 	u8 id;
28 	u8 group;
29 	__le16 reserved;
30 	u8 data[];
31 } __packed; /* FW_DEBUG_TLV_HCMD_DATA_API_S_VER_1 */
32 
33 /**
34  * struct iwl_fw_ini_header - Common Header for all ini debug TLV's structures
35  *
36  * @version: TLV version
37  * @domain: domain of the TLV. One of &enum iwl_fw_ini_dbg_domain
38  */
39 struct iwl_fw_ini_header {
40 	__le32 version;
41 	__le32 domain;
42 	/* followed by the data */
43 } __packed; /* FW_TLV_DEBUG_HEADER_S_VER_1 */
44 
45 /**
46  * struct iwl_fw_ini_addr_size - Base address and size that defines
47  * a chunk of memory
48  *
49  * @addr: the base address (fixed size - 4 bytes)
50  * @size: the size to read
51  */
52 struct iwl_fw_ini_addr_size {
53 	__le32 addr;
54 	__le32 size;
55 } __packed; /* FW_TLV_DEBUG_ADDR_SIZE_VER_1 */
56 
57 /**
58  * struct iwl_fw_ini_region_dev_addr_range - Configuration to read
59  * device address range
60  *
61  * @offset: offset to add to the base address of each chunk
62  * The addrs[] array will be treated as an array of &iwl_fw_ini_addr_size -
63  * an array of (addr, size) pairs.
64  */
65 struct iwl_fw_ini_region_dev_addr_range {
66 	__le32 offset;
67 } __packed; /* FW_TLV_DEBUG_DEVICE_ADDR_RANGE_API_S_VER_1 */
68 
69 /**
70  * struct iwl_fw_ini_region_dev_addr - Configuration to read device addresses
71  *
72  * @size: size of each memory chunk
73  * @offset: offset to add to the base address of each chunk
74  */
75 struct iwl_fw_ini_region_dev_addr {
76 	__le32 size;
77 	__le32 offset;
78 } __packed; /* FW_TLV_DEBUG_DEVICE_ADDR_API_S_VER_1 */
79 
80 /**
81  * struct iwl_fw_ini_region_fifos - Configuration to read Tx/Rx fifos
82  *
83  * @fid: fifos ids array. Used to determine what fifos to collect
84  * @hdr_only: if non zero, collect only the registers
85  * @offset: offset to add to the registers addresses
86  */
87 struct iwl_fw_ini_region_fifos {
88 	__le32 fid[2];
89 	__le32 hdr_only;
90 	__le32 offset;
91 } __packed; /* FW_TLV_DEBUG_REGION_FIFOS_API_S_VER_1 */
92 
93 /**
94  * struct iwl_fw_ini_region_err_table - error table region data
95  *
96  * Configuration to read Umac/Lmac error table
97  *
98  * @version: version of the error table
99  * @base_addr: base address of the error table
100  * @size: size of the error table
101  * @offset: offset to add to &base_addr
102  */
103 struct iwl_fw_ini_region_err_table {
104 	__le32 version;
105 	__le32 base_addr;
106 	__le32 size;
107 	__le32 offset;
108 } __packed; /* FW_TLV_DEBUG_REGION_ERROR_TABLE_API_S_VER_1 */
109 
110 /**
111  * struct iwl_fw_ini_region_special_device_memory - special device memory
112  *
113  * Configuration to read a special memory
114  *
115  * @type: type of the special memory
116  * @version: version of the special memory
117  * @base_addr: base address of the error table
118  * @size: size of the error table
119  * @offset: offset to add to &base_addr
120  */
121 struct iwl_fw_ini_region_special_device_memory {
122 	__le16 type;
123 	__le16 version;
124 	__le32 base_addr;
125 	__le32 size;
126 	__le32 offset;
127 } __packed; /* FW_TLV_DEBUG_REGION_SPECIAL_DEVICE_ADDR_API_S_VER_1 */
128 
129 /**
130  * struct iwl_fw_ini_region_internal_buffer - internal buffer region data
131  *
132  * Configuration to read internal monitor buffer
133  *
134  * @alloc_id: allocation id one of &enum iwl_fw_ini_allocation_id
135  * @base_addr: internal buffer base address
136  * @size: size internal buffer size
137  */
138 struct iwl_fw_ini_region_internal_buffer {
139 	__le32 alloc_id;
140 	__le32 base_addr;
141 	__le32 size;
142 } __packed; /* FW_TLV_DEBUG_REGION_INTERNAL_BUFFER_API_S_VER_1 */
143 
144 /**
145  * struct iwl_fw_ini_region_tlv - region TLV
146  *
147  * Configures parameters for region data collection
148  *
149  * @hdr: debug header
150  * @id: region id. Max id is &IWL_FW_INI_MAX_REGION_ID
151  * @type: region type. One of &enum iwl_fw_ini_region_type
152  * @sub_type: region sub type
153  * @sub_type_ver: region sub type version
154  * @reserved: not in use
155  * @name: region name
156  * @dev_addr: device address configuration. Used by
157  *	&IWL_FW_INI_REGION_DEVICE_MEMORY, &IWL_FW_INI_REGION_PERIPHERY_MAC,
158  *	&IWL_FW_INI_REGION_PERIPHERY_PHY, &IWL_FW_INI_REGION_PERIPHERY_AUX,
159  *	&IWL_FW_INI_REGION_PAGING, &IWL_FW_INI_REGION_CSR,
160  *	&IWL_FW_INI_REGION_DRAM_IMR and &IWL_FW_INI_REGION_PCI_IOSF_CONFIG
161  *	&IWL_FW_INI_REGION_DBGI_SRAM, &FW_TLV_DEBUG_REGION_TYPE_DBGI_SRAM,
162  *	&IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP,
163  * @dev_addr_range: device address range configuration. Used by
164  *	&IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE and
165  *	&IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE
166  * @fifos: fifos configuration. Used by &IWL_FW_INI_REGION_TXF and
167  *	&IWL_FW_INI_REGION_RXF
168  * @err_table: error table configuration. Used by
169  *	IWL_FW_INI_REGION_LMAC_ERROR_TABLE and
170  *	IWL_FW_INI_REGION_UMAC_ERROR_TABLE
171  * @internal_buffer: internal monitor buffer configuration. Used by
172  *	&IWL_FW_INI_REGION_INTERNAL_BUFFER
173  * @dram_alloc_id: dram allocation id. One of &enum iwl_fw_ini_allocation_id.
174  *	Used by &IWL_FW_INI_REGION_DRAM_BUFFER
175  * @tlv_mask: tlv collection mask. Used by &IWL_FW_INI_REGION_TLV
176  * @addrs: array of addresses attached to the end of the region tlv
177  */
178 struct iwl_fw_ini_region_tlv {
179 	struct iwl_fw_ini_header hdr;
180 	__le32 id;
181 	u8 type;
182 	u8 sub_type;
183 	u8 sub_type_ver;
184 	u8 reserved;
185 	u8 name[IWL_FW_INI_MAX_NAME];
186 	union {
187 		struct iwl_fw_ini_region_dev_addr dev_addr;
188 		struct iwl_fw_ini_region_dev_addr_range dev_addr_range;
189 		struct iwl_fw_ini_region_fifos fifos;
190 		struct iwl_fw_ini_region_err_table err_table;
191 		struct iwl_fw_ini_region_internal_buffer internal_buffer;
192 		struct iwl_fw_ini_region_special_device_memory special_mem;
193 		__le32 dram_alloc_id;
194 		__le32 tlv_mask;
195 	}; /* FW_TLV_DEBUG_REGION_CONF_PARAMS_API_U_VER_1 */
196 	__le32 addrs[];
197 } __packed; /* FW_TLV_DEBUG_REGION_API_S_VER_1 */
198 
199 /**
200  * struct iwl_fw_ini_debug_info_tlv
201  *
202  * debug configuration name for a specific image
203  *
204  * @hdr: debug header
205  * @image_type: image type
206  * @debug_cfg_name: debug configuration name
207  */
208 struct iwl_fw_ini_debug_info_tlv {
209 	struct iwl_fw_ini_header hdr;
210 	__le32 image_type;
211 	u8 debug_cfg_name[IWL_FW_INI_MAX_CFG_NAME];
212 } __packed; /* FW_TLV_DEBUG_INFO_API_S_VER_1 */
213 
214 /**
215  * struct iwl_fw_ini_allocation_tlv - Allocates DRAM buffers
216  *
217  * @hdr: debug header
218  * @alloc_id: allocation id. One of &enum iwl_fw_ini_allocation_id
219  * @buf_location: buffer location. One of &enum iwl_fw_ini_buffer_location
220  * @req_size: requested buffer size
221  * @max_frags_num: maximum number of fragments
222  * @min_size: minimum buffer size
223  */
224 struct iwl_fw_ini_allocation_tlv {
225 	struct iwl_fw_ini_header hdr;
226 	__le32 alloc_id;
227 	__le32 buf_location;
228 	__le32 req_size;
229 	__le32 max_frags_num;
230 	__le32 min_size;
231 } __packed; /* FW_TLV_DEBUG_BUFFER_ALLOCATION_API_S_VER_1 */
232 
233 /**
234  * struct iwl_fw_ini_trigger_tlv - trigger TLV
235  *
236  * Trigger that upon firing, determines what regions to collect
237  *
238  * @hdr: debug header
239  * @time_point: time point. One of &enum iwl_fw_ini_time_point
240  * @trigger_reason: trigger reason
241  * @apply_policy: uses &enum iwl_fw_ini_trigger_apply_policy
242  * @dump_delay: delay from trigger fire to dump, in usec
243  * @occurrences: max trigger fire occurrences allowed
244  * @reserved: unused
245  * @ignore_consec: ignore consecutive triggers, in usec
246  * @reset_fw: if non zero, will reset and reload the FW
247  * @multi_dut: initiate debug dump data on several DUTs
248  * @regions_mask: mask of regions to collect
249  * @data: trigger data
250  */
251 struct iwl_fw_ini_trigger_tlv {
252 	struct iwl_fw_ini_header hdr;
253 	__le32 time_point;
254 	__le32 trigger_reason;
255 	__le32 apply_policy;
256 	__le32 dump_delay;
257 	__le32 occurrences;
258 	__le32 reserved;
259 	__le32 ignore_consec;
260 	__le32 reset_fw;
261 	__le32 multi_dut;
262 	__le64 regions_mask;
263 	__le32 data[];
264 } __packed; /* FW_TLV_DEBUG_TRIGGER_API_S_VER_1 */
265 
266 /**
267  * struct iwl_fw_ini_hcmd_tlv - Generic Host command pass through TLV
268  *
269  * @hdr: debug header
270  * @time_point: time point. One of &enum iwl_fw_ini_time_point
271  * @period_msec: interval at which the hcmd will be sent to the FW.
272  *	Measured in msec (0 = one time command)
273  * @hcmd: a variable length host-command to be sent to apply the configuration
274  */
275 struct iwl_fw_ini_hcmd_tlv {
276 	struct iwl_fw_ini_header hdr;
277 	__le32 time_point;
278 	__le32 period_msec;
279 	struct iwl_fw_ini_hcmd hcmd;
280 } __packed; /* FW_TLV_DEBUG_HCMD_API_S_VER_1 */
281 
282 /**
283 * struct iwl_fw_ini_addr_val - Address and value to set it to
284 *
285 * @address: the base address
286 * @value: value to set at address
287 */
288 struct iwl_fw_ini_addr_val {
289 	__le32 address;
290 	__le32 value;
291 } __packed; /* FW_TLV_DEBUG_ADDR_VALUE_VER_1 */
292 
293 /**
294  * struct iwl_fw_ini_conf_tlv - configuration TLV to set register/memory.
295  *
296  * @hdr: debug header
297  * @time_point: time point to apply config. One of &enum iwl_fw_ini_time_point
298  * @set_type: write access type preset token for time point.
299  *  one of &enum iwl_fw_ini_config_set_type
300  * @addr_offset: the offset to add to any item in address[0] field
301  * @addr_val: address value pair
302  */
303 struct iwl_fw_ini_conf_set_tlv {
304 	struct iwl_fw_ini_header hdr;
305 	__le32 time_point;
306 	__le32 set_type;
307 	__le32 addr_offset;
308 	struct iwl_fw_ini_addr_val addr_val[];
309 } __packed; /* FW_TLV_DEBUG_CONFIG_SET_API_S_VER_1 */
310 
311 /**
312  * enum iwl_fw_ini_config_set_type
313  *
314  * @IWL_FW_INI_CONFIG_SET_TYPE_INVALID: invalid config set
315  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_MAC: for PERIPHERY MAC configuration
316  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_PHY: for PERIPHERY PHY configuration
317  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_AUX: for PERIPHERY AUX configuration
318  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_MEMORY: for DEVICE MEMORY configuration
319  * @IWL_FW_INI_CONFIG_SET_TYPE_CSR: for CSR configuration
320  * @IWL_FW_INI_CONFIG_SET_TYPE_DBGC_DRAM_ADDR: for DBGC_DRAM_ADDR configuration
321  * @IWL_FW_INI_CONFIG_SET_TYPE_PERIPH_SCRATCH_HWM: for PERIPH SCRATCH HWM configuration
322  * @IWL_FW_INI_ALLOCATION_NUM: max number of configuration supported
323 */
324 
325 enum iwl_fw_ini_config_set_type {
326 	IWL_FW_INI_CONFIG_SET_TYPE_INVALID = 0,
327 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_MAC,
328 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_PHY,
329 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_AUX,
330 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_MEMORY,
331 	IWL_FW_INI_CONFIG_SET_TYPE_CSR,
332 	IWL_FW_INI_CONFIG_SET_TYPE_DBGC_DRAM_ADDR,
333 	IWL_FW_INI_CONFIG_SET_TYPE_PERIPH_SCRATCH_HWM,
334 	IWL_FW_INI_CONFIG_SET_TYPE_MAX_NUM,
335 } __packed;
336 
337 /**
338  * enum iwl_fw_ini_allocation_id
339  *
340  * @IWL_FW_INI_ALLOCATION_INVALID: invalid
341  * @IWL_FW_INI_ALLOCATION_ID_DBGC1: allocation meant for DBGC1 configuration
342  * @IWL_FW_INI_ALLOCATION_ID_DBGC2: allocation meant for DBGC2 configuration
343  * @IWL_FW_INI_ALLOCATION_ID_DBGC3: allocation meant for DBGC3 configuration
344  * @IWL_FW_INI_ALLOCATION_ID_DBGC4: allocation meant for DBGC4 configuration
345  * @IWL_FW_INI_ALLOCATION_NUM: number of allocation ids
346 */
347 enum iwl_fw_ini_allocation_id {
348 	IWL_FW_INI_ALLOCATION_INVALID,
349 	IWL_FW_INI_ALLOCATION_ID_DBGC1,
350 	IWL_FW_INI_ALLOCATION_ID_DBGC2,
351 	IWL_FW_INI_ALLOCATION_ID_DBGC3,
352 	IWL_FW_INI_ALLOCATION_ID_DBGC4,
353 	IWL_FW_INI_ALLOCATION_NUM,
354 }; /* FW_DEBUG_TLV_ALLOCATION_ID_E_VER_1 */
355 
356 /**
357  * enum iwl_fw_ini_buffer_location
358  *
359  * @IWL_FW_INI_LOCATION_INVALID: invalid
360  * @IWL_FW_INI_LOCATION_SRAM_PATH: SRAM location
361  * @IWL_FW_INI_LOCATION_DRAM_PATH: DRAM location
362  * @IWL_FW_INI_LOCATION_NPK_PATH: NPK location
363  */
364 enum iwl_fw_ini_buffer_location {
365 	IWL_FW_INI_LOCATION_INVALID,
366 	IWL_FW_INI_LOCATION_SRAM_PATH,
367 	IWL_FW_INI_LOCATION_DRAM_PATH,
368 	IWL_FW_INI_LOCATION_NPK_PATH,
369 	IWL_FW_INI_LOCATION_NUM,
370 }; /* FW_DEBUG_TLV_BUFFER_LOCATION_E_VER_1 */
371 
372 /**
373  * enum iwl_fw_ini_region_type
374  *
375  * @IWL_FW_INI_REGION_INVALID: invalid
376  * @IWL_FW_INI_REGION_TLV: uCode and debug TLVs
377  * @IWL_FW_INI_REGION_INTERNAL_BUFFER: monitor SMEM buffer
378  * @IWL_FW_INI_REGION_DRAM_BUFFER: monitor DRAM buffer
379  * @IWL_FW_INI_REGION_TXF: TX fifos
380  * @IWL_FW_INI_REGION_RXF: RX fifo
381  * @IWL_FW_INI_REGION_LMAC_ERROR_TABLE: lmac error table
382  * @IWL_FW_INI_REGION_UMAC_ERROR_TABLE: umac error table
383  * @IWL_FW_INI_REGION_RSP_OR_NOTIF: FW response or notification data
384  * @IWL_FW_INI_REGION_DEVICE_MEMORY: device internal memory
385  * @IWL_FW_INI_REGION_PERIPHERY_MAC: periphery registers of MAC
386  * @IWL_FW_INI_REGION_PERIPHERY_PHY: periphery registers of PHY
387  * @IWL_FW_INI_REGION_PERIPHERY_AUX: periphery registers of AUX
388  * @IWL_FW_INI_REGION_PAGING: paging memory
389  * @IWL_FW_INI_REGION_CSR: CSR registers
390  * @IWL_FW_INI_REGION_DRAM_IMR: IMR memory
391  * @IWL_FW_INI_REGION_PCI_IOSF_CONFIG: PCI/IOSF config
392  * @IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY: special device memory
393  * @IWL_FW_INI_REGION_DBGI_SRAM: periphery registers of DBGI SRAM
394  * @IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE: a range of periphery registers of MAC
395  * @IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE: a range of periphery registers of PHY
396  * @IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP: periphery registers of SNPS DPHYIP
397  * @IWL_FW_INI_REGION_NUM: number of region types
398  */
399 enum iwl_fw_ini_region_type {
400 	IWL_FW_INI_REGION_INVALID,
401 	IWL_FW_INI_REGION_TLV,
402 	IWL_FW_INI_REGION_INTERNAL_BUFFER,
403 	IWL_FW_INI_REGION_DRAM_BUFFER,
404 	IWL_FW_INI_REGION_TXF,
405 	IWL_FW_INI_REGION_RXF,
406 	IWL_FW_INI_REGION_LMAC_ERROR_TABLE,
407 	IWL_FW_INI_REGION_UMAC_ERROR_TABLE,
408 	IWL_FW_INI_REGION_RSP_OR_NOTIF,
409 	IWL_FW_INI_REGION_DEVICE_MEMORY,
410 	IWL_FW_INI_REGION_PERIPHERY_MAC,
411 	IWL_FW_INI_REGION_PERIPHERY_PHY,
412 	IWL_FW_INI_REGION_PERIPHERY_AUX,
413 	IWL_FW_INI_REGION_PAGING,
414 	IWL_FW_INI_REGION_CSR,
415 	IWL_FW_INI_REGION_DRAM_IMR,
416 	IWL_FW_INI_REGION_PCI_IOSF_CONFIG,
417 	IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY,
418 	IWL_FW_INI_REGION_DBGI_SRAM,
419 	IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE,
420 	IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE,
421 	IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP,
422 	IWL_FW_INI_REGION_NUM
423 }; /* FW_TLV_DEBUG_REGION_TYPE_API_E */
424 
425 enum iwl_fw_ini_region_device_memory_subtype {
426 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_HW_SMEM = 1,
427 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_UMAC_ERROR_TABLE = 5,
428 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_LMAC_1_ERROR_TABLE = 7,
429 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_LMAC_2_ERROR_TABLE = 10,
430 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_TCM_1_ERROR_TABLE = 14,
431 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_TCM_2_ERROR_TABLE = 16,
432 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_RCM_1_ERROR_TABLE = 18,
433 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_RCM_2_ERROR_TABLE = 20,
434 }; /* FW_TLV_DEBUG_REGION_DEVICE_MEMORY_SUBTYPE_API_E */
435 
436 /**
437  * enum iwl_fw_ini_time_point
438  *
439  * Hard coded time points in which the driver can send hcmd or perform dump
440  * collection
441  *
442  * @IWL_FW_INI_TIME_POINT_EARLY: pre loading the FW
443  * @IWL_FW_INI_TIME_POINT_AFTER_ALIVE: first cmd from host after alive notif
444  * @IWL_FW_INI_TIME_POINT_POST_INIT: last cmd in series of init sequence
445  * @IWL_FW_INI_TIME_POINT_FW_ASSERT: FW assert
446  * @IWL_FW_INI_TIME_POINT_FW_HW_ERROR: FW HW error
447  * @IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG: TFD queue hang
448  * @IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFICATION: DHC cmd response and notif
449  * @IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF: FW response or notification.
450  *	data field holds id and group
451  * @IWL_FW_INI_TIME_POINT_USER_TRIGGER: user trigger time point
452  * @IWL_FW_INI_TIME_POINT_PERIODIC: periodic timepoint that fires in constant
453  *	intervals. data field holds the interval time in msec
454  * @IWL_FW_INI_TIME_POINT_RESERVED: reserved
455  * @IWL_FW_INI_TIME_POINT_HOST_ASSERT: Unused
456  * @IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT: alive timeout
457  * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE: device enable
458  * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE: device disable
459  * @IWL_FW_INI_TIME_POINT_HOST_D3_START: D3 start
460  * @IWL_FW_INI_TIME_POINT_HOST_D3_END: D3 end
461  * @IWL_FW_INI_TIME_POINT_MISSED_BEACONS: missed beacons
462  * @IWL_FW_INI_TIME_POINT_ASSOC_FAILED: association failure
463  * @IWL_FW_INI_TIME_POINT_TX_FAILED: Tx frame failed
464  * @IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED: wifi direct action
465  *	frame failed
466  * @IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD: Tx latency threshold
467  * @IWL_FW_INI_TIME_POINT_HANG_OCCURRED: hang occurred
468  * @IWL_FW_INI_TIME_POINT_EAPOL_FAILED: EAPOL failed
469  * @IWL_FW_INI_TIME_POINT_FAKE_TX: fake Tx
470  * @IWL_FW_INI_TIME_POINT_DEASSOC: de association
471  * @IWL_FW_INI_TIME_POINT_NUM: number of time points
472  */
473 enum iwl_fw_ini_time_point {
474 	IWL_FW_INI_TIME_POINT_INVALID,
475 	IWL_FW_INI_TIME_POINT_EARLY,
476 	IWL_FW_INI_TIME_POINT_AFTER_ALIVE,
477 	IWL_FW_INI_TIME_POINT_POST_INIT,
478 	IWL_FW_INI_TIME_POINT_FW_ASSERT,
479 	IWL_FW_INI_TIME_POINT_FW_HW_ERROR,
480 	IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG,
481 	IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFICATION,
482 	IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF,
483 	IWL_FW_INI_TIME_POINT_USER_TRIGGER,
484 	IWL_FW_INI_TIME_POINT_PERIODIC,
485 	IWL_FW_INI_TIME_POINT_RESERVED,
486 	IWL_FW_INI_TIME_POINT_HOST_ASSERT,
487 	IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT,
488 	IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE,
489 	IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE,
490 	IWL_FW_INI_TIME_POINT_HOST_D3_START,
491 	IWL_FW_INI_TIME_POINT_HOST_D3_END,
492 	IWL_FW_INI_TIME_POINT_MISSED_BEACONS,
493 	IWL_FW_INI_TIME_POINT_ASSOC_FAILED,
494 	IWL_FW_INI_TIME_POINT_TX_FAILED,
495 	IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED,
496 	IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD,
497 	IWL_FW_INI_TIME_POINT_HANG_OCCURRED,
498 	IWL_FW_INI_TIME_POINT_EAPOL_FAILED,
499 	IWL_FW_INI_TIME_POINT_FAKE_TX,
500 	IWL_FW_INI_TIME_POINT_DEASSOC,
501 	IWL_FW_INI_TIME_POINT_NUM,
502 }; /* FW_TLV_DEBUG_TIME_POINT_API_E */
503 
504 /**
505  * enum iwl_fw_ini_trigger_apply_policy - Determines how to apply triggers
506  *
507  * @IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT: match by time point
508  * @IWL_FW_INI_APPLY_POLICY_MATCH_DATA: match by trigger data
509  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS: override regions mask.
510  *	Append otherwise
511  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG: override trigger configuration
512  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA: override trigger data.
513  *	Append otherwise
514  * @IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD: send cmd once dump collected
515  */
516 enum iwl_fw_ini_trigger_apply_policy {
517 	IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT	= BIT(0),
518 	IWL_FW_INI_APPLY_POLICY_MATCH_DATA		= BIT(1),
519 	IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS	= BIT(8),
520 	IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG		= BIT(9),
521 	IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA		= BIT(10),
522 	IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD	= BIT(16),
523 };
524 
525 /**
526  * enum iwl_fw_ini_trigger_reset_fw_policy - Determines how to handle reset
527  *
528  * @IWL_FW_INI_RESET_FW_MODE_NOTHING: do not stop FW and reload (default)
529  * @IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY: stop FW without reload FW
530  * @IWL_FW_INI_RESET_FW_MODE_STOP_AND_RELOAD_FW: stop FW with reload FW
531  */
532 enum iwl_fw_ini_trigger_reset_fw_policy {
533 	IWL_FW_INI_RESET_FW_MODE_NOTHING = 0,
534 	IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY,
535 	IWL_FW_INI_RESET_FW_MODE_STOP_AND_RELOAD_FW
536 };
537 
538 /**
539  * enum iwl_fw_ini_dump_policy - Determines how to handle dump based on enabled flags
540  *
541  * @IWL_FW_INI_DEBUG_DUMP_POLICY_NO_LIMIT: OS has no limit of dump size
542  * @IWL_FW_INI_DEBUG_DUMP_POLICY_MAX_LIMIT_600KB: mini dump only 600KB region dump
543  * @IWL_FW_IWL_DEBUG_DUMP_POLICY_MAX_LIMIT_5MB: mini dump 5MB size dump
544  */
545 enum iwl_fw_ini_dump_policy {
546 	IWL_FW_INI_DEBUG_DUMP_POLICY_NO_LIMIT           = BIT(0),
547 	IWL_FW_INI_DEBUG_DUMP_POLICY_MAX_LIMIT_600KB    = BIT(1),
548 	IWL_FW_IWL_DEBUG_DUMP_POLICY_MAX_LIMIT_5MB      = BIT(2),
549 
550 };
551 
552 /**
553  * enum iwl_fw_ini_dump_type - Determines dump type based on size defined by FW.
554  *
555  * @IWL_FW_INI_DUMP_BRIEF : only dump the most important regions
556  * @IWL_FW_INI_DEBUG_MEDIUM: dump more regions than "brief", but not all regions
557  * @IWL_FW_INI_DUMP_VERBOSE : dump all regions
558  */
559 enum iwl_fw_ini_dump_type {
560 	IWL_FW_INI_DUMP_BRIEF,
561 	IWL_FW_INI_DUMP_MEDIUM,
562 	IWL_FW_INI_DUMP_VERBOSE,
563 };
564 #endif
565