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