1 /******************************************************************************
2 *
3 * This file is provided under a dual BSD/GPLv2 license. When using or
4 * redistributing this file, you may do so under either license.
5 *
6 * GPL LICENSE SUMMARY
7 *
8 * Copyright (C) 2018 - 2019 Intel Corporation
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of version 2 of the GNU General Public License as
12 * published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * General Public License for more details.
18 *
19 * The full GNU General Public License is included in this distribution
20 * in the file called COPYING.
21 *
22 * Contact Information:
23 * Intel Linux Wireless <linuxwifi@intel.com>
24 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
25 *
26 * BSD LICENSE
27 *
28 * Copyright (C) 2018 - 2019 Intel Corporation
29 * All rights reserved.
30 *
31 * Redistribution and use in source and binary forms, with or without
32 * modification, are permitted provided that the following conditions
33 * are met:
34 *
35 * * Redistributions of source code must retain the above copyright
36 * notice, this list of conditions and the following disclaimer.
37 * * Redistributions in binary form must reproduce the above copyright
38 * notice, this list of conditions and the following disclaimer in
39 * the documentation and/or other materials provided with the
40 * distribution.
41 * * Neither the name Intel Corporation nor the names of its
42 * contributors may be used to endorse or promote products derived
43 * from this software without specific prior written permission.
44 *
45 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
46 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
47 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
48 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
49 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
50 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
51 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
52 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
53 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
54 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
55 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56 *
57 *****************************************************************************/
58 #ifndef __iwl_fw_dbg_tlv_h__
59 #define __iwl_fw_dbg_tlv_h__
60
61 #include <linux/bitops.h>
62
63 /**
64 * struct iwl_fw_ini_header: Common Header for all debug group TLV's structures
65 *
66 * @tlv_version: version info
67 * @apply_point: &enum iwl_fw_ini_apply_point
68 * @data: TLV data followed
69 */
70 struct iwl_fw_ini_header {
71 __le32 tlv_version;
72 __le32 apply_point;
73 u8 data[];
74 } __packed; /* FW_DEBUG_TLV_HEADER_S */
75
76 /**
77 * struct iwl_fw_ini_allocation_tlv - (IWL_UCODE_TLV_TYPE_BUFFER_ALLOCATION)
78 * buffer allocation TLV - for debug
79 *
80 * @iwl_fw_ini_header: header
81 * @allocation_id: &enum iwl_fw_ini_allocation_id - to bind allocation and hcmd
82 * if needed (DBGC1/DBGC2/SDFX/...)
83 * @buffer_location: type of iwl_fw_ini_buffer_location
84 * @size: size in bytes
85 * @max_fragments: the maximum allowed fragmentation in the desired memory
86 * allocation above
87 * @min_frag_size: the minimum allowed fragmentation size in bytes
88 */
89 struct iwl_fw_ini_allocation_tlv {
90 struct iwl_fw_ini_header header;
91 __le32 allocation_id;
92 __le32 buffer_location;
93 __le32 size;
94 __le32 max_fragments;
95 __le32 min_frag_size;
96 } __packed; /* FW_DEBUG_TLV_BUFFER_ALLOCATION_TLV_S_VER_1 */
97
98 /**
99 * enum iwl_fw_ini_dbg_domain - debug domains
100 * allows to send host cmd or collect memory region if a given domain is enabled
101 *
102 * @IWL_FW_INI_DBG_DOMAIN_ALWAYS_ON: the default domain, always on
103 * @IWL_FW_INI_DBG_DOMAIN_REPORT_PS: power save domain
104 */
105 enum iwl_fw_ini_dbg_domain {
106 IWL_FW_INI_DBG_DOMAIN_ALWAYS_ON = 0,
107 IWL_FW_INI_DBG_DOMAIN_REPORT_PS,
108 }; /* FW_DEBUG_TLV_DOMAIN_API_E_VER_1 */
109
110 /**
111 * struct iwl_fw_ini_hcmd
112 *
113 * @id: the debug configuration command type for instance: 0xf6 / 0xf5 / DHC
114 * @group: the desired cmd group
115 * @reserved: to align to FW struct
116 * @data: all of the relevant command data to be sent
117 */
118 struct iwl_fw_ini_hcmd {
119 u8 id;
120 u8 group;
121 __le16 reserved;
122 u8 data[0];
123 } __packed; /* FW_DEBUG_TLV_HCMD_DATA_API_S_VER_1 */
124
125 /**
126 * struct iwl_fw_ini_hcmd_tlv - (IWL_UCODE_TLV_TYPE_HCMD)
127 * Generic Host command pass through TLV
128 *
129 * @header: header
130 * @domain: send command only if the specific domain is enabled
131 * &enum iwl_fw_ini_dbg_domain
132 * @period_msec: period in which the hcmd will be sent to FW. Measured in msec
133 * (0 = one time command).
134 * @hcmd: a variable length host-command to be sent to apply the configuration.
135 */
136 struct iwl_fw_ini_hcmd_tlv {
137 struct iwl_fw_ini_header header;
138 __le32 domain;
139 __le32 period_msec;
140 struct iwl_fw_ini_hcmd hcmd;
141 } __packed; /* FW_DEBUG_TLV_HCMD_API_S_VER_1 */
142
143 #define IWL_FW_INI_MAX_REGION_ID 64
144 #define IWL_FW_INI_MAX_NAME 32
145
146 /**
147 * struct iwl_fw_ini_region_cfg_dhc - defines dhc response to dump.
148 *
149 * @id_and_grp: id and group of dhc response.
150 * @desc: dhc response descriptor.
151 */
152 struct iwl_fw_ini_region_cfg_dhc {
153 __le32 id_and_grp;
154 __le32 desc;
155 } __packed; /* FW_DEBUG_TLV_REGION_DHC_API_S_VER_1 */
156
157 /**
158 * struct iwl_fw_ini_region_cfg_internal - meta data of internal memory region
159 *
160 * @num_of_range: the amount of ranges in the region
161 * @range_data_size: size of the data to read per range, in bytes.
162 */
163 struct iwl_fw_ini_region_cfg_internal {
164 __le32 num_of_ranges;
165 __le32 range_data_size;
166 } __packed; /* FW_DEBUG_TLV_REGION_NIC_INTERNAL_RANGES_S */
167
168 /**
169 * struct iwl_fw_ini_region_cfg_fifos - meta data of fifos region
170 *
171 * @fid1: fifo id 1 - bitmap of lmac tx/rx fifos to include in the region
172 * @fid2: fifo id 2 - bitmap of umac rx fifos to include in the region.
173 * It is unused for tx.
174 * @num_of_registers: number of prph registers in the region, each register is
175 * 4 bytes size.
176 * @header_only: none zero value indicates that this region does not include
177 * fifo data and includes only the given registers.
178 */
179 struct iwl_fw_ini_region_cfg_fifos {
180 __le32 fid1;
181 __le32 fid2;
182 __le32 num_of_registers;
183 __le32 header_only;
184 } __packed; /* FW_DEBUG_TLV_REGION_FIFOS_S */
185
186 /**
187 * struct iwl_fw_ini_region_cfg
188 *
189 * @region_id: ID of this dump configuration
190 * @region_type: &enum iwl_fw_ini_region_type
191 * @domain: dump this region only if the specific domain is enabled
192 * &enum iwl_fw_ini_dbg_domain
193 * @name_len: name length
194 * @name: file name to use for this region
195 * @internal: used in case the region uses internal memory.
196 * @allocation_id: For DRAM type field substitutes for allocation_id
197 * @fifos: used in case of fifos region.
198 * @dhc_desc: dhc response descriptor.
199 * @notif_id_and_grp: dump this region only if the specific notification
200 * occurred.
201 * @offset: offset to use for each memory base address
202 * @start_addr: array of addresses.
203 */
204 struct iwl_fw_ini_region_cfg {
205 __le32 region_id;
206 __le32 region_type;
207 __le32 domain;
208 __le32 name_len;
209 u8 name[IWL_FW_INI_MAX_NAME];
210 union {
211 struct iwl_fw_ini_region_cfg_internal internal;
212 __le32 allocation_id;
213 struct iwl_fw_ini_region_cfg_fifos fifos;
214 struct iwl_fw_ini_region_cfg_dhc dhc_desc;
215 __le32 notif_id_and_grp;
216 }; /* FW_DEBUG_TLV_REGION_EXT_INT_PARAMS_API_U_VER_1 */
217 __le32 offset;
218 __le32 start_addr[];
219 } __packed; /* FW_DEBUG_TLV_REGION_CONFIG_API_S_VER_1 */
220
221 /**
222 * struct iwl_fw_ini_region_tlv - (IWL_UCODE_TLV_TYPE_REGIONS)
223 * defines memory regions to dump
224 *
225 * @header: header
226 * @num_regions: how many different region section and IDs are coming next
227 * @region_config: list of dump configurations
228 */
229 struct iwl_fw_ini_region_tlv {
230 struct iwl_fw_ini_header header;
231 __le32 num_regions;
232 struct iwl_fw_ini_region_cfg region_config[];
233 } __packed; /* FW_DEBUG_TLV_REGIONS_API_S_VER_1 */
234
235 /**
236 * struct iwl_fw_ini_trigger
237 *
238 * @trigger_id: &enum iwl_fw_ini_trigger_id
239 * @override_trig: determines how apply trigger in case a trigger with the
240 * same id is already in use. Using the first 2 bytes:
241 * Byte 0: if 0, override trigger configuration, otherwise use the
242 * existing configuration.
243 * Byte 1: if 0, override trigger regions, otherwise append regions to
244 * existing trigger.
245 * @dump_delay: delay from trigger fire to dump, in usec
246 * @occurrences: max amount of times to be fired
247 * @reserved: to align to FW struct
248 * @ignore_consec: ignore consecutive triggers, in usec
249 * @force_restart: force FW restart
250 * @multi_dut: initiate debug dump data on several DUTs
251 * @trigger_data: generic data to be utilized per trigger
252 * @num_regions: number of dump regions defined for this trigger
253 * @data: region IDs
254 */
255 struct iwl_fw_ini_trigger {
256 __le32 trigger_id;
257 __le32 override_trig;
258 __le32 dump_delay;
259 __le32 occurrences;
260 __le32 reserved;
261 __le32 ignore_consec;
262 __le32 force_restart;
263 __le32 multi_dut;
264 __le32 trigger_data;
265 __le32 num_regions;
266 __le32 data[];
267 } __packed; /* FW_TLV_DEBUG_TRIGGER_CONFIG_API_S_VER_1 */
268
269 /**
270 * struct iwl_fw_ini_trigger_tlv - (IWL_UCODE_TLV_TYPE_TRIGGERS)
271 * Triggers that hold memory regions to dump in case a trigger fires
272 *
273 * @header: header
274 * @num_triggers: how many different triggers section and IDs are coming next
275 * @trigger_config: list of trigger configurations
276 */
277 struct iwl_fw_ini_trigger_tlv {
278 struct iwl_fw_ini_header header;
279 __le32 num_triggers;
280 struct iwl_fw_ini_trigger trigger_config[];
281 } __packed; /* FW_TLV_DEBUG_TRIGGERS_API_S_VER_1 */
282
283 #define IWL_FW_INI_MAX_IMG_NAME_LEN 32
284 #define IWL_FW_INI_MAX_DBG_CFG_NAME_LEN 64
285
286 /**
287 * struct iwl_fw_ini_debug_info_tlv - (IWL_UCODE_TLV_TYPE_DEBUG_INFO)
288 *
289 * holds image name and debug configuration name
290 *
291 * @header: header
292 * @img_name_len: length of the image name string
293 * @img_name: image name string
294 * @dbg_cfg_name_len : length of the debug configuration name string
295 * @dbg_cfg_name: debug configuration name string
296 */
297 struct iwl_fw_ini_debug_info_tlv {
298 struct iwl_fw_ini_header header;
299 __le32 img_name_len;
300 u8 img_name[IWL_FW_INI_MAX_IMG_NAME_LEN];
301 __le32 dbg_cfg_name_len;
302 u8 dbg_cfg_name[IWL_FW_INI_MAX_DBG_CFG_NAME_LEN];
303 } __packed; /* FW_DEBUG_TLV_INFO_API_S_VER_1 */
304
305 /**
306 * enum iwl_fw_ini_trigger_id
307 *
308 * @IWL_FW_TRIGGER_ID_FW_ASSERT: FW assert
309 * @IWL_FW_TRIGGER_ID_FW_HW_ERROR: HW assert
310 * @IWL_FW_TRIGGER_ID_FW_TFD_Q_HANG: TFD queue hang
311 * @IWL_FW_TRIGGER_ID_FW_DEBUG_HOST_TRIGGER: FW debug notification
312 * @IWL_FW_TRIGGER_ID_FW_GENERIC_NOTIFICATION: FW generic notification
313 * @IWL_FW_TRIGGER_ID_USER_TRIGGER: User trigger
314 * @IWL_FW_TRIGGER_ID_PERIODIC_TRIGGER: triggers periodically
315 * @IWL_FW_TRIGGER_ID_HOST_PEER_CLIENT_INACTIVITY: peer inactivity
316 * @IWL_FW_TRIGGER_ID_HOST_TX_LATENCY_THRESHOLD_CROSSED: TX latency
317 * threshold was crossed
318 * @IWL_FW_TRIGGER_ID_HOST_TX_RESPONSE_STATUS_FAILED: TX failed
319 * @IWL_FW_TRIGGER_ID_HOST_OS_REQ_DEAUTH_PEER: Deauth initiated by host
320 * @IWL_FW_TRIGGER_ID_HOST_STOP_GO_REQUEST: stop GO request
321 * @IWL_FW_TRIGGER_ID_HOST_START_GO_REQUEST: start GO request
322 * @IWL_FW_TRIGGER_ID_HOST_JOIN_GROUP_REQUEST: join P2P group request
323 * @IWL_FW_TRIGGER_ID_HOST_SCAN_START: scan started event
324 * @IWL_FW_TRIGGER_ID_HOST_SCAN_SUBMITTED: undefined
325 * @IWL_FW_TRIGGER_ID_HOST_SCAN_PARAMS: undefined
326 * @IWL_FW_TRIGGER_ID_HOST_CHECK_FOR_HANG: undefined
327 * @IWL_FW_TRIGGER_ID_HOST_BAR_RECEIVED: BAR frame was received
328 * @IWL_FW_TRIGGER_ID_HOST_AGG_TX_RESPONSE_STATUS_FAILED: agg TX failed
329 * @IWL_FW_TRIGGER_ID_HOST_EAPOL_TX_RESPONSE_FAILED: EAPOL TX failed
330 * @IWL_FW_TRIGGER_ID_HOST_FAKE_TX_RESPONSE_SUSPECTED: suspicious TX response
331 * @IWL_FW_TRIGGER_ID_HOST_AUTH_REQ_FROM_ASSOC_CLIENT: received suspicious auth
332 * @IWL_FW_TRIGGER_ID_HOST_ROAM_COMPLETE: roaming was completed
333 * @IWL_FW_TRIGGER_ID_HOST_AUTH_ASSOC_FAST_FAILED: fast assoc failed
334 * @IWL_FW_TRIGGER_ID_HOST_D3_START: D3 start
335 * @IWL_FW_TRIGGER_ID_HOST_D3_END: D3 end
336 * @IWL_FW_TRIGGER_ID_HOST_BSS_MISSED_BEACONS: missed beacon events
337 * @IWL_FW_TRIGGER_ID_HOST_P2P_CLIENT_MISSED_BEACONS: P2P missed beacon events
338 * @IWL_FW_TRIGGER_ID_HOST_PEER_CLIENT_TX_FAILURES: undefined
339 * @IWL_FW_TRIGGER_ID_HOST_TX_WFD_ACTION_FRAME_FAILED: undefined
340 * @IWL_FW_TRIGGER_ID_HOST_AUTH_ASSOC_FAILED: authentication / association
341 * failed
342 * @IWL_FW_TRIGGER_ID_HOST_SCAN_COMPLETE: scan complete event
343 * @IWL_FW_TRIGGER_ID_HOST_SCAN_ABORT: scan abort complete
344 * @IWL_FW_TRIGGER_ID_HOST_NIC_ALIVE: nic alive message was received
345 * @IWL_FW_TRIGGER_ID_HOST_CHANNEL_SWITCH_COMPLETE: CSA was completed
346 * @IWL_FW_TRIGGER_ID_NUM: number of trigger IDs
347 */
348 enum iwl_fw_ini_trigger_id {
349 IWL_FW_TRIGGER_ID_INVALID = 0,
350
351 /* Errors triggers */
352 IWL_FW_TRIGGER_ID_FW_ASSERT = 1,
353 IWL_FW_TRIGGER_ID_FW_HW_ERROR = 2,
354 IWL_FW_TRIGGER_ID_FW_TFD_Q_HANG = 3,
355
356 /* FW triggers */
357 IWL_FW_TRIGGER_ID_FW_DEBUG_HOST_TRIGGER = 4,
358 IWL_FW_TRIGGER_ID_FW_GENERIC_NOTIFICATION = 5,
359
360 /* User trigger */
361 IWL_FW_TRIGGER_ID_USER_TRIGGER = 6,
362
363 /* periodic uses the data field for the interval time */
364 IWL_FW_TRIGGER_ID_PERIODIC_TRIGGER = 7,
365
366 /* Host triggers */
367 IWL_FW_TRIGGER_ID_HOST_PEER_CLIENT_INACTIVITY = 8,
368 IWL_FW_TRIGGER_ID_HOST_TX_LATENCY_THRESHOLD_CROSSED = 9,
369 IWL_FW_TRIGGER_ID_HOST_TX_RESPONSE_STATUS_FAILED = 10,
370 IWL_FW_TRIGGER_ID_HOST_OS_REQ_DEAUTH_PEER = 11,
371 IWL_FW_TRIGGER_ID_HOST_STOP_GO_REQUEST = 12,
372 IWL_FW_TRIGGER_ID_HOST_START_GO_REQUEST = 13,
373 IWL_FW_TRIGGER_ID_HOST_JOIN_GROUP_REQUEST = 14,
374 IWL_FW_TRIGGER_ID_HOST_SCAN_START = 15,
375 IWL_FW_TRIGGER_ID_HOST_SCAN_SUBMITTED = 16,
376 IWL_FW_TRIGGER_ID_HOST_SCAN_PARAMS = 17,
377 IWL_FW_TRIGGER_ID_HOST_CHECK_FOR_HANG = 18,
378 IWL_FW_TRIGGER_ID_HOST_BAR_RECEIVED = 19,
379 IWL_FW_TRIGGER_ID_HOST_AGG_TX_RESPONSE_STATUS_FAILED = 20,
380 IWL_FW_TRIGGER_ID_HOST_EAPOL_TX_RESPONSE_FAILED = 21,
381 IWL_FW_TRIGGER_ID_HOST_FAKE_TX_RESPONSE_SUSPECTED = 22,
382 IWL_FW_TRIGGER_ID_HOST_AUTH_REQ_FROM_ASSOC_CLIENT = 23,
383 IWL_FW_TRIGGER_ID_HOST_ROAM_COMPLETE = 24,
384 IWL_FW_TRIGGER_ID_HOST_AUTH_ASSOC_FAST_FAILED = 25,
385 IWL_FW_TRIGGER_ID_HOST_D3_START = 26,
386 IWL_FW_TRIGGER_ID_HOST_D3_END = 27,
387 IWL_FW_TRIGGER_ID_HOST_BSS_MISSED_BEACONS = 28,
388 IWL_FW_TRIGGER_ID_HOST_P2P_CLIENT_MISSED_BEACONS = 29,
389 IWL_FW_TRIGGER_ID_HOST_PEER_CLIENT_TX_FAILURES = 30,
390 IWL_FW_TRIGGER_ID_HOST_TX_WFD_ACTION_FRAME_FAILED = 31,
391 IWL_FW_TRIGGER_ID_HOST_AUTH_ASSOC_FAILED = 32,
392 IWL_FW_TRIGGER_ID_HOST_SCAN_COMPLETE = 33,
393 IWL_FW_TRIGGER_ID_HOST_SCAN_ABORT = 34,
394 IWL_FW_TRIGGER_ID_HOST_NIC_ALIVE = 35,
395 IWL_FW_TRIGGER_ID_HOST_CHANNEL_SWITCH_COMPLETE = 36,
396
397 IWL_FW_TRIGGER_ID_NUM,
398 }; /* FW_DEBUG_TLV_TRIGGER_ID_E_VER_1 */
399
400 /**
401 * enum iwl_fw_ini_allocation_id
402 *
403 * @IWL_FW_INI_ALLOCATION_INVALID: invalid
404 * @IWL_FW_INI_ALLOCATION_ID_DBGC1: allocation meant for DBGC1 configuration
405 * @IWL_FW_INI_ALLOCATION_ID_DBGC2: allocation meant for DBGC2 configuration
406 * @IWL_FW_INI_ALLOCATION_ID_DBGC3: allocation meant for DBGC3 configuration
407 * @IWL_FW_INI_ALLOCATION_ID_SDFX: for SDFX module
408 * @IWL_FW_INI_ALLOCATION_ID_FW_DUMP: used for crash and runtime dumps
409 * @IWL_FW_INI_ALLOCATION_ID_USER_DEFINED: for future user scenarios
410 * @IWL_FW_INI_ALLOCATION_NUM: number of allocation ids
411 */
412 enum iwl_fw_ini_allocation_id {
413 IWL_FW_INI_ALLOCATION_INVALID,
414 IWL_FW_INI_ALLOCATION_ID_DBGC1,
415 IWL_FW_INI_ALLOCATION_ID_DBGC2,
416 IWL_FW_INI_ALLOCATION_ID_DBGC3,
417 IWL_FW_INI_ALLOCATION_ID_SDFX,
418 IWL_FW_INI_ALLOCATION_ID_FW_DUMP,
419 IWL_FW_INI_ALLOCATION_ID_USER_DEFINED,
420 IWL_FW_INI_ALLOCATION_NUM,
421 }; /* FW_DEBUG_TLV_ALLOCATION_ID_E_VER_1 */
422
423 /**
424 * enum iwl_fw_ini_buffer_location
425 *
426 * @IWL_FW_INI_LOCATION_INVALID: invalid
427 * @IWL_FW_INI_LOCATION_SRAM_PATH: SRAM location
428 * @IWL_FW_INI_LOCATION_DRAM_PATH: DRAM location
429 * @IWL_FW_INI_LOCATION_NPK_PATH: NPK location
430 */
431 enum iwl_fw_ini_buffer_location {
432 IWL_FW_INI_LOCATION_INVALID,
433 IWL_FW_INI_LOCATION_SRAM_PATH,
434 IWL_FW_INI_LOCATION_DRAM_PATH,
435 IWL_FW_INI_LOCATION_NPK_PATH,
436 }; /* FW_DEBUG_TLV_BUFFER_LOCATION_E_VER_1 */
437
438 /**
439 * enum iwl_fw_ini_debug_flow
440 *
441 * @IWL_FW_INI_DEBUG_INVALID: invalid
442 * @IWL_FW_INI_DEBUG_DBTR_FLOW: undefined
443 * @IWL_FW_INI_DEBUG_TB2DTF_FLOW: undefined
444 */
445 enum iwl_fw_ini_debug_flow {
446 IWL_FW_INI_DEBUG_INVALID,
447 IWL_FW_INI_DEBUG_DBTR_FLOW,
448 IWL_FW_INI_DEBUG_TB2DTF_FLOW,
449 }; /* FW_DEBUG_TLV_FLOW_E_VER_1 */
450
451 /**
452 * enum iwl_fw_ini_region_type
453 *
454 * @IWL_FW_INI_REGION_INVALID: invalid
455 * @IWL_FW_INI_REGION_DEVICE_MEMORY: device internal memory
456 * @IWL_FW_INI_REGION_PERIPHERY_MAC: periphery registers of MAC
457 * @IWL_FW_INI_REGION_PERIPHERY_PHY: periphery registers of PHY
458 * @IWL_FW_INI_REGION_PERIPHERY_AUX: periphery registers of AUX
459 * @IWL_FW_INI_REGION_DRAM_BUFFER: DRAM buffer
460 * @IWL_FW_INI_REGION_DRAM_IMR: IMR memory
461 * @IWL_FW_INI_REGION_INTERNAL_BUFFER: undefined
462 * @IWL_FW_INI_REGION_TXF: TX fifos
463 * @IWL_FW_INI_REGION_RXF: RX fifo
464 * @IWL_FW_INI_REGION_PAGING: paging memory
465 * @IWL_FW_INI_REGION_CSR: CSR registers
466 * @IWL_FW_INI_REGION_NOTIFICATION: FW notification data
467 * @IWL_FW_INI_REGION_DHC: dhc response to dump
468 * @IWL_FW_INI_REGION_LMAC_ERROR_TABLE: lmac error table
469 * @IWL_FW_INI_REGION_UMAC_ERROR_TABLE: umac error table
470 * @IWL_FW_INI_REGION_NUM: number of region types
471 */
472 enum iwl_fw_ini_region_type {
473 IWL_FW_INI_REGION_INVALID,
474 IWL_FW_INI_REGION_DEVICE_MEMORY,
475 IWL_FW_INI_REGION_PERIPHERY_MAC,
476 IWL_FW_INI_REGION_PERIPHERY_PHY,
477 IWL_FW_INI_REGION_PERIPHERY_AUX,
478 IWL_FW_INI_REGION_DRAM_BUFFER,
479 IWL_FW_INI_REGION_DRAM_IMR,
480 IWL_FW_INI_REGION_INTERNAL_BUFFER,
481 IWL_FW_INI_REGION_TXF,
482 IWL_FW_INI_REGION_RXF,
483 IWL_FW_INI_REGION_PAGING,
484 IWL_FW_INI_REGION_CSR,
485 IWL_FW_INI_REGION_NOTIFICATION,
486 IWL_FW_INI_REGION_DHC,
487 IWL_FW_INI_REGION_LMAC_ERROR_TABLE,
488 IWL_FW_INI_REGION_UMAC_ERROR_TABLE,
489 IWL_FW_INI_REGION_NUM
490 }; /* FW_DEBUG_TLV_REGION_TYPE_E_VER_1 */
491
492 /**
493 * enum iwl_fw_ini_time_point
494 *
495 * Hard coded time points in which the driver can send hcmd or perform dump
496 * collection
497 *
498 * @IWL_FW_INI_TIME_POINT_EARLY: pre loading the FW
499 * @IWL_FW_INI_TIME_POINT_AFTER_ALIVE: first cmd from host after alive notif
500 * @IWL_FW_INI_TIME_POINT_POST_INIT: last cmd in series of init sequence
501 * @IWL_FW_INI_TIME_POINT_FW_ASSERT: FW assert
502 * @IWL_FW_INI_TIME_POINT_FW_HW_ERROR: FW HW error
503 * @IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG: TFD queue hang
504 * @IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFOCATION: DHC cmd response and notif
505 * @IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF: FW response or notification.
506 * data field holds id and group
507 * @IWL_FW_INI_TIME_POINT_USER_TRIGGER: user trigger time point
508 * @IWL_FW_INI_TIME_POINT_PERIODIC: periodic timepoint that fires in constant
509 * intervals. data field holds the interval time in msec
510 * @IWL_FW_INI_TIME_POINT_WDG_TIMEOUT: watchdog timeout
511 * @IWL_FW_INI_TIME_POINT_HOST_ASSERT: Unused
512 * @IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT: alive timeout
513 * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE: device enable
514 * @IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE: device disable
515 * @IWL_FW_INI_TIME_POINT_HOST_D3_START: D3 start
516 * @IWL_FW_INI_TIME_POINT_HOST_D3_END: D3 end
517 * @IWL_FW_INI_TIME_POINT_MISSED_BEACONS: missed beacons
518 * @IWL_FW_INI_TIME_POINT_ASSOC_FAILED: association failure
519 * @IWL_FW_INI_TIME_POINT_TX_FAILED: Tx frame failed
520 * @IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED: wifi direct action
521 * frame failed
522 * @IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD: Tx latency threshold
523 * @IWL_FW_INI_TIME_POINT_HANG_OCCURRED: hang occurred
524 * @IWL_FW_INI_TIME_POINT_EAPOL_FAILED: EAPOL failed
525 * @IWL_FW_INI_TIME_POINT_FAKE_TX: fake Tx
526 * @IWL_FW_INI_TIME_POINT_DEASSOC: de association
527 * @IWL_FW_INI_TIME_POINT_NUM: number of time points
528 */
529 enum iwl_fw_ini_time_point {
530 IWL_FW_INI_TIME_POINT_INVALID,
531 IWL_FW_INI_TIME_POINT_EARLY,
532 IWL_FW_INI_TIME_POINT_AFTER_ALIVE,
533 IWL_FW_INI_TIME_POINT_POST_INIT,
534 IWL_FW_INI_TIME_POINT_FW_ASSERT,
535 IWL_FW_INI_TIME_POINT_FW_HW_ERROR,
536 IWL_FW_INI_TIME_POINT_FW_TFD_Q_HANG,
537 IWL_FW_INI_TIME_POINT_FW_DHC_NOTIFOCATION,
538 IWL_FW_INI_TIME_POINT_FW_RSP_OR_NOTIF,
539 IWL_FW_INI_TIME_POINT_USER_TRIGGER,
540 IWL_FW_INI_TIME_POINT_PERIODIC,
541 IWL_FW_INI_TIME_POINT_WDG_TIMEOUT,
542 IWL_FW_INI_TIME_POINT_HOST_ASSERT,
543 IWL_FW_INI_TIME_POINT_HOST_ALIVE_TIMEOUT,
544 IWL_FW_INI_TIME_POINT_HOST_DEVICE_ENABLE,
545 IWL_FW_INI_TIME_POINT_HOST_DEVICE_DISABLE,
546 IWL_FW_INI_TIME_POINT_HOST_D3_START,
547 IWL_FW_INI_TIME_POINT_HOST_D3_END,
548 IWL_FW_INI_TIME_POINT_MISSED_BEACONS,
549 IWL_FW_INI_TIME_POINT_ASSOC_FAILED,
550 IWL_FW_INI_TIME_POINT_TX_FAILED,
551 IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED,
552 IWL_FW_INI_TIME_POINT_TX_LATENCY_THRESHOLD,
553 IWL_FW_INI_TIME_POINT_HANG_OCCURRED,
554 IWL_FW_INI_TIME_POINT_EAPOL_FAILED,
555 IWL_FW_INI_TIME_POINT_FAKE_TX,
556 IWL_FW_INI_TIME_POINT_DEASSOC,
557 IWL_FW_INI_TIME_POINT_NUM,
558 }; /* FW_TLV_DEBUG_TIME_POINT_API_E */
559
560 #endif