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 */
26struct 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 */
39struct 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 */
52struct 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 */
65struct 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 */
75struct 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 */
87struct 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 */
103struct 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 */
121struct 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 */
138struct 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 */
178struct 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 */
208struct 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 */
224struct 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 */
251struct 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 */
275struct 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*/
288struct 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 */
303struct 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_CONFIG_SET_TYPE_MAX_NUM: max number of configuration supported
323*/
324
325enum 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*/
347enum 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 * @IWL_FW_INI_LOCATION_NUM: number of valid locations
364 */
365enum iwl_fw_ini_buffer_location {
366	IWL_FW_INI_LOCATION_INVALID,
367	IWL_FW_INI_LOCATION_SRAM_PATH,
368	IWL_FW_INI_LOCATION_DRAM_PATH,
369	IWL_FW_INI_LOCATION_NPK_PATH,
370	IWL_FW_INI_LOCATION_NUM,
371}; /* FW_DEBUG_TLV_BUFFER_LOCATION_E_VER_1 */
372
373/**
374 * enum iwl_fw_ini_region_type
375 *
376 * @IWL_FW_INI_REGION_INVALID: invalid
377 * @IWL_FW_INI_REGION_TLV: uCode and debug TLVs
378 * @IWL_FW_INI_REGION_INTERNAL_BUFFER: monitor SMEM buffer
379 * @IWL_FW_INI_REGION_DRAM_BUFFER: monitor DRAM buffer
380 * @IWL_FW_INI_REGION_TXF: TX fifos
381 * @IWL_FW_INI_REGION_RXF: RX fifo
382 * @IWL_FW_INI_REGION_LMAC_ERROR_TABLE: lmac error table
383 * @IWL_FW_INI_REGION_UMAC_ERROR_TABLE: umac error table
384 * @IWL_FW_INI_REGION_RSP_OR_NOTIF: FW response or notification data
385 * @IWL_FW_INI_REGION_DEVICE_MEMORY: device internal memory
386 * @IWL_FW_INI_REGION_PERIPHERY_MAC: periphery registers of MAC
387 * @IWL_FW_INI_REGION_PERIPHERY_PHY: periphery registers of PHY
388 * @IWL_FW_INI_REGION_PERIPHERY_AUX: periphery registers of AUX
389 * @IWL_FW_INI_REGION_PAGING: paging memory
390 * @IWL_FW_INI_REGION_CSR: CSR registers
391 * @IWL_FW_INI_REGION_DRAM_IMR: IMR memory
392 * @IWL_FW_INI_REGION_PCI_IOSF_CONFIG: PCI/IOSF config
393 * @IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY: special device memory
394 * @IWL_FW_INI_REGION_DBGI_SRAM: periphery registers of DBGI SRAM
395 * @IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE: a range of periphery registers of MAC
396 * @IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE: a range of periphery registers of PHY
397 * @IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP: periphery registers of SNPS DPHYIP
398 * @IWL_FW_INI_REGION_NUM: number of region types
399 */
400enum iwl_fw_ini_region_type {
401	IWL_FW_INI_REGION_INVALID,
402	IWL_FW_INI_REGION_TLV,
403	IWL_FW_INI_REGION_INTERNAL_BUFFER,
404	IWL_FW_INI_REGION_DRAM_BUFFER,
405	IWL_FW_INI_REGION_TXF,
406	IWL_FW_INI_REGION_RXF,
407	IWL_FW_INI_REGION_LMAC_ERROR_TABLE,
408	IWL_FW_INI_REGION_UMAC_ERROR_TABLE,
409	IWL_FW_INI_REGION_RSP_OR_NOTIF,
410	IWL_FW_INI_REGION_DEVICE_MEMORY,
411	IWL_FW_INI_REGION_PERIPHERY_MAC,
412	IWL_FW_INI_REGION_PERIPHERY_PHY,
413	IWL_FW_INI_REGION_PERIPHERY_AUX,
414	IWL_FW_INI_REGION_PAGING,
415	IWL_FW_INI_REGION_CSR,
416	IWL_FW_INI_REGION_DRAM_IMR,
417	IWL_FW_INI_REGION_PCI_IOSF_CONFIG,
418	IWL_FW_INI_REGION_SPECIAL_DEVICE_MEMORY,
419	IWL_FW_INI_REGION_DBGI_SRAM,
420	IWL_FW_INI_REGION_PERIPHERY_MAC_RANGE,
421	IWL_FW_INI_REGION_PERIPHERY_PHY_RANGE,
422	IWL_FW_INI_REGION_PERIPHERY_SNPS_DPHYIP,
423	IWL_FW_INI_REGION_NUM
424}; /* FW_TLV_DEBUG_REGION_TYPE_API_E */
425
426enum iwl_fw_ini_region_device_memory_subtype {
427	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_HW_SMEM = 1,
428	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_UMAC_ERROR_TABLE = 5,
429	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_LMAC_1_ERROR_TABLE = 7,
430	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_LMAC_2_ERROR_TABLE = 10,
431	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_TCM_1_ERROR_TABLE = 14,
432	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_TCM_2_ERROR_TABLE = 16,
433	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_RCM_1_ERROR_TABLE = 18,
434	IWL_FW_INI_REGION_DEVICE_MEMORY_SUBTYPE_RCM_2_ERROR_TABLE = 20,
435}; /* FW_TLV_DEBUG_REGION_DEVICE_MEMORY_SUBTYPE_API_E */
436
437/**
438 * enum iwl_fw_ini_time_point
439 *
440 * Hard coded time points in which the driver can send hcmd or perform dump
441 * collection
442 *
443 * @IWL_FW_INI_TIME_POINT_INVALID: invalid timepoint
444 * @IWL_FW_INI_TIME_POINT_EARLY: pre loading the FW
445 * @IWL_FW_INI_TIME_POINT_AFTER_ALIVE: first cmd from host after alive notif
446 * @IWL_FW_INI_TIME_POINT_POST_INIT: last cmd in series of init sequence
447 * @IWL_FW_INI_TIME_POINT_FW_ASSERT: FW assert
448 * @IWL_FW_INI_TIME_POINT_FW_HW_ERROR: FW HW error
449 * @IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG: TFD queue hang
450 * @IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFICATION: DHC cmd response and notif
451 * @IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF: FW response or notification.
452 *	data field holds id and group
453 * @IWL_FW_INI_TIME_POINT_USER_TRIGGER: user trigger time point
454 * @IWL_FW_INI_TIME_POINT_PERIODIC: periodic timepoint that fires in constant
455 *	intervals. data field holds the interval time in msec
456 * @IWL_FW_INI_TIME_POINT_RESERVED: reserved
457 * @IWL_FW_INI_TIME_POINT_HOST_ASSERT: Unused
458 * @IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT: alive timeout
459 * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE: device enable
460 * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE: device disable
461 * @IWL_FW_INI_TIME_POINT_HOST_D3_START: D3 start
462 * @IWL_FW_INI_TIME_POINT_HOST_D3_END: D3 end
463 * @IWL_FW_INI_TIME_POINT_MISSED_BEACONS: missed beacons
464 * @IWL_FW_INI_TIME_POINT_ASSOC_FAILED: association failure
465 * @IWL_FW_INI_TIME_POINT_TX_FAILED: Tx frame failed
466 * @IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED: wifi direct action
467 *	frame failed
468 * @IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD: Tx latency threshold
469 * @IWL_FW_INI_TIME_POINT_HANG_OCCURRED: hang occurred
470 * @IWL_FW_INI_TIME_POINT_EAPOL_FAILED: EAPOL failed
471 * @IWL_FW_INI_TIME_POINT_FAKE_TX: fake Tx
472 * @IWL_FW_INI_TIME_POINT_DEASSOC: de association
473 * @IWL_FW_INI_TIME_POINT_NUM: number of time points
474 */
475enum iwl_fw_ini_time_point {
476	IWL_FW_INI_TIME_POINT_INVALID,
477	IWL_FW_INI_TIME_POINT_EARLY,
478	IWL_FW_INI_TIME_POINT_AFTER_ALIVE,
479	IWL_FW_INI_TIME_POINT_POST_INIT,
480	IWL_FW_INI_TIME_POINT_FW_ASSERT,
481	IWL_FW_INI_TIME_POINT_FW_HW_ERROR,
482	IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG,
483	IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFICATION,
484	IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF,
485	IWL_FW_INI_TIME_POINT_USER_TRIGGER,
486	IWL_FW_INI_TIME_POINT_PERIODIC,
487	IWL_FW_INI_TIME_POINT_RESERVED,
488	IWL_FW_INI_TIME_POINT_HOST_ASSERT,
489	IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT,
490	IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE,
491	IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE,
492	IWL_FW_INI_TIME_POINT_HOST_D3_START,
493	IWL_FW_INI_TIME_POINT_HOST_D3_END,
494	IWL_FW_INI_TIME_POINT_MISSED_BEACONS,
495	IWL_FW_INI_TIME_POINT_ASSOC_FAILED,
496	IWL_FW_INI_TIME_POINT_TX_FAILED,
497	IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED,
498	IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD,
499	IWL_FW_INI_TIME_POINT_HANG_OCCURRED,
500	IWL_FW_INI_TIME_POINT_EAPOL_FAILED,
501	IWL_FW_INI_TIME_POINT_FAKE_TX,
502	IWL_FW_INI_TIME_POINT_DEASSOC,
503	IWL_FW_INI_TIME_POINT_NUM,
504}; /* FW_TLV_DEBUG_TIME_POINT_API_E */
505
506/**
507 * enum iwl_fw_ini_trigger_apply_policy - Determines how to apply triggers
508 *
509 * @IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT: match by time point
510 * @IWL_FW_INI_APPLY_POLICY_MATCH_DATA: match by trigger data
511 * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS: override regions mask.
512 *	Append otherwise
513 * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG: override trigger configuration
514 * @IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA: override trigger data.
515 *	Append otherwise
516 * @IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD: send cmd once dump collected
517 */
518enum iwl_fw_ini_trigger_apply_policy {
519	IWL_FW_INI_APPLY_POLICY_MATCH_TIME_POINT	= BIT(0),
520	IWL_FW_INI_APPLY_POLICY_MATCH_DATA		= BIT(1),
521	IWL_FW_INI_APPLY_POLICY_OVERRIDE_REGIONS	= BIT(8),
522	IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG		= BIT(9),
523	IWL_FW_INI_APPLY_POLICY_OVERRIDE_DATA		= BIT(10),
524	IWL_FW_INI_APPLY_POLICY_DUMP_COMPLETE_CMD	= BIT(16),
525};
526
527/**
528 * enum iwl_fw_ini_trigger_reset_fw_policy - Determines how to handle reset
529 *
530 * @IWL_FW_INI_RESET_FW_MODE_NOTHING: do not stop FW and reload (default)
531 * @IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY: stop FW without reload FW
532 * @IWL_FW_INI_RESET_FW_MODE_STOP_AND_RELOAD_FW: stop FW with reload FW
533 */
534enum iwl_fw_ini_trigger_reset_fw_policy {
535	IWL_FW_INI_RESET_FW_MODE_NOTHING = 0,
536	IWL_FW_INI_RESET_FW_MODE_STOP_FW_ONLY,
537	IWL_FW_INI_RESET_FW_MODE_STOP_AND_RELOAD_FW
538};
539
540/**
541 * enum iwl_fw_ini_dump_policy - Determines how to handle dump based on enabled flags
542 *
543 * @IWL_FW_INI_DEBUG_DUMP_POLICY_NO_LIMIT: OS has no limit of dump size
544 * @IWL_FW_INI_DEBUG_DUMP_POLICY_MAX_LIMIT_600KB: mini dump only 600KB region dump
545 * @IWL_FW_IWL_DEBUG_DUMP_POLICY_MAX_LIMIT_5MB: mini dump 5MB size dump
546 */
547enum iwl_fw_ini_dump_policy {
548	IWL_FW_INI_DEBUG_DUMP_POLICY_NO_LIMIT           = BIT(0),
549	IWL_FW_INI_DEBUG_DUMP_POLICY_MAX_LIMIT_600KB    = BIT(1),
550	IWL_FW_IWL_DEBUG_DUMP_POLICY_MAX_LIMIT_5MB      = BIT(2),
551
552};
553
554/**
555 * enum iwl_fw_ini_dump_type - Determines dump type based on size defined by FW.
556 *
557 * @IWL_FW_INI_DUMP_BRIEF : only dump the most important regions
558 * @IWL_FW_INI_DUMP_MEDIUM: dump more regions than "brief", but not all regions
559 * @IWL_FW_INI_DUMP_VERBOSE : dump all regions
560 */
561enum iwl_fw_ini_dump_type {
562	IWL_FW_INI_DUMP_BRIEF,
563	IWL_FW_INI_DUMP_MEDIUM,
564	IWL_FW_INI_DUMP_VERBOSE,
565};
566#endif
567