1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright (C) 2018-2024 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  * @special_mem: special device memory region, used by
174  *	%IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY
175  * @dram_alloc_id: dram allocation id. One of &enum iwl_fw_ini_allocation_id.
176  *	Used by %IWL_FW_INI_REGION_DRAM_BUFFER
177  * @tlv_mask: tlv collection mask. Used by %IWL_FW_INI_REGION_TLV
178  * @addrs: array of addresses attached to the end of the region tlv
179  */
180 struct iwl_fw_ini_region_tlv {
181 	struct iwl_fw_ini_header hdr;
182 	__le32 id;
183 	u8 type;
184 	u8 sub_type;
185 	u8 sub_type_ver;
186 	u8 reserved;
187 	u8 name[IWL_FW_INI_MAX_NAME];
188 	union {
189 		struct iwl_fw_ini_region_dev_addr dev_addr;
190 		struct iwl_fw_ini_region_dev_addr_range dev_addr_range;
191 		struct iwl_fw_ini_region_fifos fifos;
192 		struct iwl_fw_ini_region_err_table err_table;
193 		struct iwl_fw_ini_region_internal_buffer internal_buffer;
194 		struct iwl_fw_ini_region_special_device_memory special_mem;
195 		__le32 dram_alloc_id;
196 		__le32 tlv_mask;
197 	}; /* FW_TLV_DEBUG_REGION_CONF_PARAMS_API_U_VER_1 */
198 	__le32 addrs[];
199 } __packed; /* FW_TLV_DEBUG_REGION_API_S_VER_1 */
200 
201 /**
202  * struct iwl_fw_ini_debug_info_tlv
203  *
204  * debug configuration name for a specific image
205  *
206  * @hdr: debug header
207  * @image_type: image type
208  * @debug_cfg_name: debug configuration name
209  */
210 struct iwl_fw_ini_debug_info_tlv {
211 	struct iwl_fw_ini_header hdr;
212 	__le32 image_type;
213 	u8 debug_cfg_name[IWL_FW_INI_MAX_CFG_NAME];
214 } __packed; /* FW_TLV_DEBUG_INFO_API_S_VER_1 */
215 
216 /**
217  * struct iwl_fw_ini_allocation_tlv - Allocates DRAM buffers
218  *
219  * @hdr: debug header
220  * @alloc_id: allocation id. One of &enum iwl_fw_ini_allocation_id
221  * @buf_location: buffer location. One of &enum iwl_fw_ini_buffer_location
222  * @req_size: requested buffer size
223  * @max_frags_num: maximum number of fragments
224  * @min_size: minimum buffer size
225  */
226 struct iwl_fw_ini_allocation_tlv {
227 	struct iwl_fw_ini_header hdr;
228 	__le32 alloc_id;
229 	__le32 buf_location;
230 	__le32 req_size;
231 	__le32 max_frags_num;
232 	__le32 min_size;
233 } __packed; /* FW_TLV_DEBUG_BUFFER_ALLOCATION_API_S_VER_1 */
234 
235 /**
236  * struct iwl_fw_ini_trigger_tlv - trigger TLV
237  *
238  * Trigger that upon firing, determines what regions to collect
239  *
240  * @hdr: debug header
241  * @time_point: time point. One of &enum iwl_fw_ini_time_point
242  * @trigger_reason: trigger reason
243  * @apply_policy: uses &enum iwl_fw_ini_trigger_apply_policy
244  * @dump_delay: delay from trigger fire to dump, in usec
245  * @occurrences: max trigger fire occurrences allowed
246  * @reserved: unused
247  * @ignore_consec: ignore consecutive triggers, in usec
248  * @reset_fw: if non zero, will reset and reload the FW
249  * @multi_dut: initiate debug dump data on several DUTs
250  * @regions_mask: mask of regions to collect
251  * @data: trigger data
252  */
253 struct iwl_fw_ini_trigger_tlv {
254 	struct iwl_fw_ini_header hdr;
255 	__le32 time_point;
256 	__le32 trigger_reason;
257 	__le32 apply_policy;
258 	__le32 dump_delay;
259 	__le32 occurrences;
260 	__le32 reserved;
261 	__le32 ignore_consec;
262 	__le32 reset_fw;
263 	__le32 multi_dut;
264 	__le64 regions_mask;
265 	__le32 data[];
266 } __packed; /* FW_TLV_DEBUG_TRIGGER_API_S_VER_1 */
267 
268 /**
269  * struct iwl_fw_ini_hcmd_tlv - Generic Host command pass through TLV
270  *
271  * @hdr: debug header
272  * @time_point: time point. One of &enum iwl_fw_ini_time_point
273  * @period_msec: interval at which the hcmd will be sent to the FW.
274  *	Measured in msec (0 = one time command)
275  * @hcmd: a variable length host-command to be sent to apply the configuration
276  */
277 struct iwl_fw_ini_hcmd_tlv {
278 	struct iwl_fw_ini_header hdr;
279 	__le32 time_point;
280 	__le32 period_msec;
281 	struct iwl_fw_ini_hcmd hcmd;
282 } __packed; /* FW_TLV_DEBUG_HCMD_API_S_VER_1 */
283 
284 /**
285 * struct iwl_fw_ini_addr_val - Address and value to set it to
286 *
287 * @address: the base address
288 * @value: value to set at address
289 */
290 struct iwl_fw_ini_addr_val {
291 	__le32 address;
292 	__le32 value;
293 } __packed; /* FW_TLV_DEBUG_ADDR_VALUE_VER_1 */
294 
295 /**
296  * struct iwl_fw_ini_conf_set_tlv - configuration TLV to set register/memory.
297  *
298  * @hdr: debug header
299  * @time_point: time point to apply config. One of &enum iwl_fw_ini_time_point
300  * @set_type: write access type preset token for time point.
301  *  one of &enum iwl_fw_ini_config_set_type
302  * @addr_offset: the offset to add to any item in address[0] field
303  * @addr_val: address value pair
304  */
305 struct iwl_fw_ini_conf_set_tlv {
306 	struct iwl_fw_ini_header hdr;
307 	__le32 time_point;
308 	__le32 set_type;
309 	__le32 addr_offset;
310 	struct iwl_fw_ini_addr_val addr_val[];
311 } __packed; /* FW_TLV_DEBUG_CONFIG_SET_API_S_VER_1 */
312 
313 /**
314  * enum iwl_fw_ini_config_set_type
315  *
316  * @IWL_FW_INI_CONFIG_SET_TYPE_INVALID: invalid config set
317  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_MAC: for PERIPHERY MAC configuration
318  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_PHY: for PERIPHERY PHY configuration
319  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_AUX: for PERIPHERY AUX configuration
320  * @IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_MEMORY: for DEVICE MEMORY configuration
321  * @IWL_FW_INI_CONFIG_SET_TYPE_CSR: for CSR configuration
322  * @IWL_FW_INI_CONFIG_SET_TYPE_DBGC_DRAM_ADDR: for DBGC_DRAM_ADDR configuration
323  * @IWL_FW_INI_CONFIG_SET_TYPE_PERIPH_SCRATCH_HWM: for PERIPH SCRATCH HWM configuration
324  * @IWL_FW_INI_CONFIG_SET_TYPE_MAX_NUM: max number of configuration supported
325 */
326 
327 enum iwl_fw_ini_config_set_type {
328 	IWL_FW_INI_CONFIG_SET_TYPE_INVALID = 0,
329 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_MAC,
330 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_PHY,
331 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_PERIPHERY_AUX,
332 	IWL_FW_INI_CONFIG_SET_TYPE_DEVICE_MEMORY,
333 	IWL_FW_INI_CONFIG_SET_TYPE_CSR,
334 	IWL_FW_INI_CONFIG_SET_TYPE_DBGC_DRAM_ADDR,
335 	IWL_FW_INI_CONFIG_SET_TYPE_PERIPH_SCRATCH_HWM,
336 	IWL_FW_INI_CONFIG_SET_TYPE_MAX_NUM,
337 } __packed;
338 
339 /**
340  * enum iwl_fw_ini_allocation_id
341  *
342  * @IWL_FW_INI_ALLOCATION_INVALID: invalid
343  * @IWL_FW_INI_ALLOCATION_ID_DBGC1: allocation meant for DBGC1 configuration
344  * @IWL_FW_INI_ALLOCATION_ID_DBGC2: allocation meant for DBGC2 configuration
345  * @IWL_FW_INI_ALLOCATION_ID_DBGC3: allocation meant for DBGC3 configuration
346  * @IWL_FW_INI_ALLOCATION_ID_DBGC4: allocation meant for DBGC4 configuration
347  * @IWL_FW_INI_ALLOCATION_NUM: number of allocation ids
348 */
349 enum iwl_fw_ini_allocation_id {
350 	IWL_FW_INI_ALLOCATION_INVALID,
351 	IWL_FW_INI_ALLOCATION_ID_DBGC1,
352 	IWL_FW_INI_ALLOCATION_ID_DBGC2,
353 	IWL_FW_INI_ALLOCATION_ID_DBGC3,
354 	IWL_FW_INI_ALLOCATION_ID_DBGC4,
355 	IWL_FW_INI_ALLOCATION_NUM,
356 }; /* FW_DEBUG_TLV_ALLOCATION_ID_E_VER_1 */
357 
358 /**
359  * enum iwl_fw_ini_buffer_location
360  *
361  * @IWL_FW_INI_LOCATION_INVALID: invalid
362  * @IWL_FW_INI_LOCATION_SRAM_PATH: SRAM location
363  * @IWL_FW_INI_LOCATION_DRAM_PATH: DRAM location
364  * @IWL_FW_INI_LOCATION_NPK_PATH: NPK location
365  * @IWL_FW_INI_LOCATION_NUM: number of valid locations
366  */
367 enum iwl_fw_ini_buffer_location {
368 	IWL_FW_INI_LOCATION_INVALID,
369 	IWL_FW_INI_LOCATION_SRAM_PATH,
370 	IWL_FW_INI_LOCATION_DRAM_PATH,
371 	IWL_FW_INI_LOCATION_NPK_PATH,
372 	IWL_FW_INI_LOCATION_NUM,
373 }; /* FW_DEBUG_TLV_BUFFER_LOCATION_E_VER_1 */
374 
375 /**
376  * enum iwl_fw_ini_region_type
377  *
378  * @IWL_FW_INI_REGION_INVALID: invalid
379  * @IWL_FW_INI_REGION_TLV: uCode and debug TLVs
380  * @IWL_FW_INI_REGION_INTERNAL_BUFFER: monitor SMEM buffer
381  * @IWL_FW_INI_REGION_DRAM_BUFFER: monitor DRAM buffer
382  * @IWL_FW_INI_REGION_TXF: TX fifos
383  * @IWL_FW_INI_REGION_RXF: RX fifo
384  * @IWL_FW_INI_REGION_LMAC_ERROR_TABLE: lmac error table
385  * @IWL_FW_INI_REGION_UMAC_ERROR_TABLE: umac error table
386  * @IWL_FW_INI_REGION_RSP_OR_NOTIF: FW response or notification data
387  * @IWL_FW_INI_REGION_DEVICE_MEMORY: device internal memory
388  * @IWL_FW_INI_REGION_PERIPHERY_MAC: periphery registers of MAC
389  * @IWL_FW_INI_REGION_PERIPHERY_PHY: periphery registers of PHY
390  * @IWL_FW_INI_REGION_PERIPHERY_AUX: periphery registers of AUX
391  * @IWL_FW_INI_REGION_PAGING: paging memory
392  * @IWL_FW_INI_REGION_CSR: CSR registers
393  * @IWL_FW_INI_REGION_DRAM_IMR: IMR memory
394  * @IWL_FW_INI_REGION_PCI_IOSF_CONFIG: PCI/IOSF config
395  * @IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY: special device memory
396  * @IWL_FW_INI_REGION_DBGI_SRAM: periphery registers of DBGI SRAM
397  * @IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE: a range of periphery registers of MAC
398  * @IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE: a range of periphery registers of PHY
399  * @IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP: periphery registers of SNPS DPHYIP
400  * @IWL_FW_INI_REGION_NUM: number of region types
401  */
402 enum iwl_fw_ini_region_type {
403 	IWL_FW_INI_REGION_INVALID,
404 	IWL_FW_INI_REGION_TLV,
405 	IWL_FW_INI_REGION_INTERNAL_BUFFER,
406 	IWL_FW_INI_REGION_DRAM_BUFFER,
407 	IWL_FW_INI_REGION_TXF,
408 	IWL_FW_INI_REGION_RXF,
409 	IWL_FW_INI_REGION_LMAC_ERROR_TABLE,
410 	IWL_FW_INI_REGION_UMAC_ERROR_TABLE,
411 	IWL_FW_INI_REGION_RSP_OR_NOTIF,
412 	IWL_FW_INI_REGION_DEVICE_MEMORY,
413 	IWL_FW_INI_REGION_PERIPHERY_MAC,
414 	IWL_FW_INI_REGION_PERIPHERY_PHY,
415 	IWL_FW_INI_REGION_PERIPHERY_AUX,
416 	IWL_FW_INI_REGION_PAGING,
417 	IWL_FW_INI_REGION_CSR,
418 	IWL_FW_INI_REGION_DRAM_IMR,
419 	IWL_FW_INI_REGION_PCI_IOSF_CONFIG,
420 	IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY,
421 	IWL_FW_INI_REGION_DBGI_SRAM,
422 	IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE,
423 	IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE,
424 	IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP,
425 	IWL_FW_INI_REGION_NUM
426 }; /* FW_TLV_DEBUG_REGION_TYPE_API_E */
427 
428 enum iwl_fw_ini_region_device_memory_subtype {
429 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_HW_SMEM = 1,
430 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_UMAC_ERROR_TABLE = 5,
431 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_LMAC_1_ERROR_TABLE = 7,
432 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_LMAC_2_ERROR_TABLE = 10,
433 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_TCM_1_ERROR_TABLE = 14,
434 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_TCM_2_ERROR_TABLE = 16,
435 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_RCM_1_ERROR_TABLE = 18,
436 	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_RCM_2_ERROR_TABLE = 20,
437 }; /* FW_TLV_DEBUG_REGION_DEVICE_MEMORY_SUBTYPE_API_E */
438 
439 /**
440  * enum iwl_fw_ini_time_point
441  *
442  * Hard coded time points in which the driver can send hcmd or perform dump
443  * collection
444  *
445  * @IWL_FW_INI_TIME_POINT_INVALID: invalid timepoint
446  * @IWL_FW_INI_TIME_POINT_EARLY: pre loading the FW
447  * @IWL_FW_INI_TIME_POINT_AFTER_ALIVE: first cmd from host after alive notif
448  * @IWL_FW_INI_TIME_POINT_POST_INIT: last cmd in series of init sequence
449  * @IWL_FW_INI_TIME_POINT_FW_ASSERT: FW assert
450  * @IWL_FW_INI_TIME_POINT_FW_HW_ERROR: FW HW error
451  * @IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG: TFD queue hang
452  * @IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFICATION: DHC cmd response and notif
453  * @IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF: FW response or notification.
454  *	data field holds id and group
455  * @IWL_FW_INI_TIME_POINT_USER_TRIGGER: user trigger time point
456  * @IWL_FW_INI_TIME_POINT_PERIODIC: periodic timepoint that fires in constant
457  *	intervals. data field holds the interval time in msec
458  * @IWL_FW_INI_TIME_POINT_RESERVED: reserved
459  * @IWL_FW_INI_TIME_POINT_HOST_ASSERT: Unused
460  * @IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT: alive timeout
461  * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE: device enable
462  * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE: device disable
463  * @IWL_FW_INI_TIME_POINT_HOST_D3_START: D3 start
464  * @IWL_FW_INI_TIME_POINT_HOST_D3_END: D3 end
465  * @IWL_FW_INI_TIME_POINT_MISSED_BEACONS: missed beacons
466  * @IWL_FW_INI_TIME_POINT_ASSOC_FAILED: association failure
467  * @IWL_FW_INI_TIME_POINT_TX_FAILED: Tx frame failed
468  * @IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED: wifi direct action
469  *	frame failed
470  * @IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD: Tx latency threshold
471  * @IWL_FW_INI_TIME_POINT_HANG_OCCURRED: hang occurred
472  * @IWL_FW_INI_TIME_POINT_EAPOL_FAILED: EAPOL failed
473  * @IWL_FW_INI_TIME_POINT_FAKE_TX: fake Tx
474  * @IWL_FW_INI_TIME_POINT_DEASSOC: de association
475  * @IWL_FW_INI_TIME_POINT_PRESET_OVERRIDE_EXT_REQ: request to override preset
476  * @IWL_FW_INI_TIME_POINT_PRESET_OVERRIDE_START: start handling override preset
477  *	request
478  * @IWL_FW_INI_TIME_SCAN_FAILURE: failed scan channel list
479  * @IWL_FW_INI_TIME_ESR_LINK_UP: EMLSR is active (several links are activated)
480  * @IWL_FW_INI_TIME_ESR_LINK_DOWN: EMLSR is inactive (only one active link left)
481  * @IWL_FW_INI_TIME_POINT_NUM: number of time points
482  */
483 enum iwl_fw_ini_time_point {
484 	IWL_FW_INI_TIME_POINT_INVALID,
485 	IWL_FW_INI_TIME_POINT_EARLY,
486 	IWL_FW_INI_TIME_POINT_AFTER_ALIVE,
487 	IWL_FW_INI_TIME_POINT_POST_INIT,
488 	IWL_FW_INI_TIME_POINT_FW_ASSERT,
489 	IWL_FW_INI_TIME_POINT_FW_HW_ERROR,
490 	IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG,
491 	IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFICATION,
492 	IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF,
493 	IWL_FW_INI_TIME_POINT_USER_TRIGGER,
494 	IWL_FW_INI_TIME_POINT_PERIODIC,
495 	IWL_FW_INI_TIME_POINT_RESERVED,
496 	IWL_FW_INI_TIME_POINT_HOST_ASSERT,
497 	IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT,
498 	IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE,
499 	IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE,
500 	IWL_FW_INI_TIME_POINT_HOST_D3_START,
501 	IWL_FW_INI_TIME_POINT_HOST_D3_END,
502 	IWL_FW_INI_TIME_POINT_MISSED_BEACONS,
503 	IWL_FW_INI_TIME_POINT_ASSOC_FAILED,
504 	IWL_FW_INI_TIME_POINT_TX_FAILED,
505 	IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED,
506 	IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD,
507 	IWL_FW_INI_TIME_POINT_HANG_OCCURRED,
508 	IWL_FW_INI_TIME_POINT_EAPOL_FAILED,
509 	IWL_FW_INI_TIME_POINT_FAKE_TX,
510 	IWL_FW_INI_TIME_POINT_DEASSOC,
511 	IWL_FW_INI_TIME_POINT_PRESET_OVERRIDE_EXT_REQ,
512 	IWL_FW_INI_TIME_POINT_PRESET_OVERRIDE_START,
513 	IWL_FW_INI_TIME_SCAN_FAILURE,
514 	IWL_FW_INI_TIME_ESR_LINK_UP,
515 	IWL_FW_INI_TIME_ESR_LINK_DOWN,
516 	IWL_FW_INI_TIME_POINT_NUM,
517 }; /* FW_TLV_DEBUG_TIME_POINT_API_E */
518 
519 /**
520  * enum iwl_fw_ini_trigger_apply_policy - Determines how to apply triggers
521  *
522  * @IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT: match by time point
523  * @IWL_FW_INI_APPLY_POLICY_MATCH_DATA: match by trigger data
524  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS: override regions mask.
525  *	Append otherwise
526  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG: override trigger configuration
527  * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA: override trigger data.
528  *	Append otherwise
529  * @IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD: send cmd once dump collected
530  */
531 enum iwl_fw_ini_trigger_apply_policy {
532 	IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT	= BIT(0),
533 	IWL_FW_INI_APPLY_POLICY_MATCH_DATA		= BIT(1),
534 	IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS	= BIT(8),
535 	IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG		= BIT(9),
536 	IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA		= BIT(10),
537 	IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD	= BIT(16),
538 };
539 
540 /**
541  * enum iwl_fw_ini_trigger_reset_fw_policy - Determines how to handle reset
542  *
543  * @IWL_FW_INI_RESET_FW_MODE_NOTHING: do not stop FW and reload (default)
544  * @IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY: stop FW without reload FW
545  * @IWL_FW_INI_RESET_FW_MODE_STOP_AND_RELOAD_FW: stop FW with reload FW
546  */
547 enum iwl_fw_ini_trigger_reset_fw_policy {
548 	IWL_FW_INI_RESET_FW_MODE_NOTHING = 0,
549 	IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY,
550 	IWL_FW_INI_RESET_FW_MODE_STOP_AND_RELOAD_FW
551 };
552 
553 /**
554  * enum iwl_fw_ini_dump_policy - Determines how to handle dump based on enabled flags
555  *
556  * @IWL_FW_INI_DEBUG_DUMP_POLICY_NO_LIMIT: OS has no limit of dump size
557  * @IWL_FW_INI_DEBUG_DUMP_POLICY_MAX_LIMIT_600KB: mini dump only 600KB region dump
558  * @IWL_FW_IWL_DEBUG_DUMP_POLICY_MAX_LIMIT_5MB: mini dump 5MB size dump
559  */
560 enum iwl_fw_ini_dump_policy {
561 	IWL_FW_INI_DEBUG_DUMP_POLICY_NO_LIMIT           = BIT(0),
562 	IWL_FW_INI_DEBUG_DUMP_POLICY_MAX_LIMIT_600KB    = BIT(1),
563 	IWL_FW_IWL_DEBUG_DUMP_POLICY_MAX_LIMIT_5MB      = BIT(2),
564 
565 };
566 
567 /**
568  * enum iwl_fw_ini_dump_type - Determines dump type based on size defined by FW.
569  *
570  * @IWL_FW_INI_DUMP_BRIEF : only dump the most important regions
571  * @IWL_FW_INI_DUMP_MEDIUM: dump more regions than "brief", but not all regions
572  * @IWL_FW_INI_DUMP_VERBOSE : dump all regions
573  */
574 enum iwl_fw_ini_dump_type {
575 	IWL_FW_INI_DUMP_BRIEF,
576 	IWL_FW_INI_DUMP_MEDIUM,
577 	IWL_FW_INI_DUMP_VERBOSE,
578 };
579 #endif
580