aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-csr.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-11-24 18:01:29 -0500
committerDavid S. Miller <davem@davemloft.net>2009-11-24 18:01:29 -0500
commit4ba3eb034fb6fd1990ccc5a6d71d5abcda37b905 (patch)
tree0789ba36d96dba330416a1e6a9a68e891a78802a /drivers/net/wireless/iwlwifi/iwl-csr.h
parent35700212b45ea9f98fa682cfc1bc1a67c9ccc34b (diff)
parent18b6c9a2213d3b6e0212e8b225abf95f7564206a (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-csr.h')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-csr.h181
1 files changed, 152 insertions, 29 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-csr.h b/drivers/net/wireless/iwlwifi/iwl-csr.h
index b6ed5a3147a..a7bfae01f19 100644
--- a/drivers/net/wireless/iwlwifi/iwl-csr.h
+++ b/drivers/net/wireless/iwlwifi/iwl-csr.h
@@ -62,11 +62,29 @@
62 *****************************************************************************/ 62 *****************************************************************************/
63#ifndef __iwl_csr_h__ 63#ifndef __iwl_csr_h__
64#define __iwl_csr_h__ 64#define __iwl_csr_h__
65/*=== CSR (control and status registers) ===*/ 65/*
66 * CSR (control and status registers)
67 *
68 * CSR registers are mapped directly into PCI bus space, and are accessible
69 * whenever platform supplies power to device, even when device is in
70 * low power states due to driver-invoked device resets
71 * (e.g. CSR_RESET_REG_FLAG_SW_RESET) or uCode-driven power-saving modes.
72 *
73 * Use iwl_write32() and iwl_read32() family to access these registers;
74 * these provide simple PCI bus access, without waking up the MAC.
75 * Do not use iwl_write_direct32() family for these registers;
76 * no need to "grab nic access" via CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ.
77 * The MAC (uCode processor, etc.) does not need to be powered up for accessing
78 * the CSR registers.
79 *
80 * NOTE: Newer devices using one-time-programmable (OTP) memory
81 * require device to be awake in order to read this memory
82 * via CSR_EEPROM and CSR_OTP registers
83 */
66#define CSR_BASE (0x000) 84#define CSR_BASE (0x000)
67 85
68#define CSR_HW_IF_CONFIG_REG (CSR_BASE+0x000) /* hardware interface config */ 86#define CSR_HW_IF_CONFIG_REG (CSR_BASE+0x000) /* hardware interface config */
69#define CSR_INT_COALESCING (CSR_BASE+0x004) /* accum ints, 32-usec units */ 87#define CSR_INT_COALESCING (CSR_BASE+0x004) /* accum ints, 32-usec units */
70#define CSR_INT (CSR_BASE+0x008) /* host interrupt status/ack */ 88#define CSR_INT (CSR_BASE+0x008) /* host interrupt status/ack */
71#define CSR_INT_MASK (CSR_BASE+0x00c) /* host interrupt enable */ 89#define CSR_INT_MASK (CSR_BASE+0x00c) /* host interrupt enable */
72#define CSR_FH_INT_STATUS (CSR_BASE+0x010) /* busmaster int status/ack*/ 90#define CSR_FH_INT_STATUS (CSR_BASE+0x010) /* busmaster int status/ack*/
@@ -74,42 +92,65 @@
74#define CSR_RESET (CSR_BASE+0x020) /* busmaster enable, NMI, etc*/ 92#define CSR_RESET (CSR_BASE+0x020) /* busmaster enable, NMI, etc*/
75#define CSR_GP_CNTRL (CSR_BASE+0x024) 93#define CSR_GP_CNTRL (CSR_BASE+0x024)
76 94
95/* 2nd byte of CSR_INT_COALESCING, not accessible via iwl_write32()! */
96#define CSR_INT_PERIODIC_REG (CSR_BASE+0x005)
97
77/* 98/*
78 * Hardware revision info 99 * Hardware revision info
79 * Bit fields: 100 * Bit fields:
80 * 31-8: Reserved 101 * 31-8: Reserved
81 * 7-4: Type of device: 0x0 = 4965, 0xd = 3945 102 * 7-4: Type of device: see CSR_HW_REV_TYPE_xxx definitions
82 * 3-2: Revision step: 0 = A, 1 = B, 2 = C, 3 = D 103 * 3-2: Revision step: 0 = A, 1 = B, 2 = C, 3 = D
83 * 1-0: "Dash" value, as in A-1, etc. 104 * 1-0: "Dash" (-) value, as in A-1, etc.
84 * 105 *
85 * NOTE: Revision step affects calculation of CCK txpower for 4965. 106 * NOTE: Revision step affects calculation of CCK txpower for 4965.
107 * NOTE: See also CSR_HW_REV_WA_REG (work-around for bug in 4965).
86 */ 108 */
87#define CSR_HW_REV (CSR_BASE+0x028) 109#define CSR_HW_REV (CSR_BASE+0x028)
88 110
89/* EEPROM reads */ 111/*
112 * EEPROM and OTP (one-time-programmable) memory reads
113 *
114 * NOTE: For (newer) devices using OTP, device must be awake, initialized via
115 * apm_ops.init() in order to read. Older devices (3945/4965/5000)
116 * use EEPROM and do not require this.
117 */
90#define CSR_EEPROM_REG (CSR_BASE+0x02c) 118#define CSR_EEPROM_REG (CSR_BASE+0x02c)
91#define CSR_EEPROM_GP (CSR_BASE+0x030) 119#define CSR_EEPROM_GP (CSR_BASE+0x030)
92#define CSR_OTP_GP_REG (CSR_BASE+0x034) 120#define CSR_OTP_GP_REG (CSR_BASE+0x034)
121
93#define CSR_GIO_REG (CSR_BASE+0x03C) 122#define CSR_GIO_REG (CSR_BASE+0x03C)
94#define CSR_GP_UCODE_REG (CSR_BASE+0x048) 123#define CSR_GP_UCODE_REG (CSR_BASE+0x048)
95#define CSR_GP_DRIVER_REG (CSR_BASE+0x050) 124#define CSR_GP_DRIVER_REG (CSR_BASE+0x050)
125
126/*
127 * UCODE-DRIVER GP (general purpose) mailbox registers.
128 * SET/CLR registers set/clear bit(s) if "1" is written.
129 */
96#define CSR_UCODE_DRV_GP1 (CSR_BASE+0x054) 130#define CSR_UCODE_DRV_GP1 (CSR_BASE+0x054)
97#define CSR_UCODE_DRV_GP1_SET (CSR_BASE+0x058) 131#define CSR_UCODE_DRV_GP1_SET (CSR_BASE+0x058)
98#define CSR_UCODE_DRV_GP1_CLR (CSR_BASE+0x05c) 132#define CSR_UCODE_DRV_GP1_CLR (CSR_BASE+0x05c)
99#define CSR_UCODE_DRV_GP2 (CSR_BASE+0x060) 133#define CSR_UCODE_DRV_GP2 (CSR_BASE+0x060)
134
100#define CSR_LED_REG (CSR_BASE+0x094) 135#define CSR_LED_REG (CSR_BASE+0x094)
101#define CSR_DRAM_INT_TBL_REG (CSR_BASE+0x0A0) 136#define CSR_DRAM_INT_TBL_REG (CSR_BASE+0x0A0)
137
138/* GIO Chicken Bits (PCI Express bus link power management) */
102#define CSR_GIO_CHICKEN_BITS (CSR_BASE+0x100) 139#define CSR_GIO_CHICKEN_BITS (CSR_BASE+0x100)
103 140
104#define CSR_INT_PERIODIC_REG (CSR_BASE+0x005)
105/* Analog phase-lock-loop configuration */ 141/* Analog phase-lock-loop configuration */
106#define CSR_ANA_PLL_CFG (CSR_BASE+0x20c) 142#define CSR_ANA_PLL_CFG (CSR_BASE+0x20c)
143
107/* 144/*
108 * Indicates hardware rev, to determine CCK backoff for txpower calculation. 145 * CSR Hardware Revision Workaround Register. Indicates hardware rev;
146 * "step" determines CCK backoff for txpower calculation. Used for 4965 only.
147 * See also CSR_HW_REV register.
109 * Bit fields: 148 * Bit fields:
110 * 3-2: 0 = A, 1 = B, 2 = C, 3 = D step 149 * 3-2: 0 = A, 1 = B, 2 = C, 3 = D step
150 * 1-0: "Dash" (-) value, as in C-1, etc.
111 */ 151 */
112#define CSR_HW_REV_WA_REG (CSR_BASE+0x22C) 152#define CSR_HW_REV_WA_REG (CSR_BASE+0x22C)
153
113#define CSR_DBG_HPET_MEM_REG (CSR_BASE+0x240) 154#define CSR_DBG_HPET_MEM_REG (CSR_BASE+0x240)
114#define CSR_DBG_LINK_PWR_MGMT_REG (CSR_BASE+0x250) 155#define CSR_DBG_LINK_PWR_MGMT_REG (CSR_BASE+0x250)
115 156
@@ -126,14 +167,14 @@
126#define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A (0x00000000) 167#define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A (0x00000000)
127#define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B (0x00001000) 168#define CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B (0x00001000)
128 169
129#define CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A (0x00080000) 170#define CSR_HW_IF_CONFIG_REG_BIT_HAP_WAKE_L1A (0x00080000)
130#define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM (0x00200000) 171#define CSR_HW_IF_CONFIG_REG_BIT_EEPROM_OWN_SEM (0x00200000)
131#define CSR_HW_IF_CONFIG_REG_BIT_NIC_READY (0x00400000) 172#define CSR_HW_IF_CONFIG_REG_BIT_NIC_READY (0x00400000) /* PCI_OWN_SEM */
132#define CSR_HW_IF_CONFIG_REG_BIT_NIC_PREPARE_DONE (0x02000000) 173#define CSR_HW_IF_CONFIG_REG_BIT_NIC_PREPARE_DONE (0x02000000) /* ME_OWN */
133#define CSR_HW_IF_CONFIG_REG_PREPARE (0x08000000) 174#define CSR_HW_IF_CONFIG_REG_PREPARE (0x08000000) /* WAKE_ME */
134 175
135#define CSR_INT_PERIODIC_DIS (0x00) 176#define CSR_INT_PERIODIC_DIS (0x00) /* disable periodic int*/
136#define CSR_INT_PERIODIC_ENA (0xFF) 177#define CSR_INT_PERIODIC_ENA (0xFF) /* 255*32 usec ~ 8 msec*/
137 178
138/* interrupt flags in INTA, set by uCode or hardware (e.g. dma), 179/* interrupt flags in INTA, set by uCode or hardware (e.g. dma),
139 * acknowledged (reset) by host writing "1" to flagged bits. */ 180 * acknowledged (reset) by host writing "1" to flagged bits. */
@@ -198,7 +239,44 @@
198#define CSR_RESET_REG_FLAG_STOP_MASTER (0x00000200) 239#define CSR_RESET_REG_FLAG_STOP_MASTER (0x00000200)
199#define CSR_RESET_LINK_PWR_MGMT_DISABLED (0x80000000) 240#define CSR_RESET_LINK_PWR_MGMT_DISABLED (0x80000000)
200 241
201/* GP (general purpose) CONTROL */ 242/*
243 * GP (general purpose) CONTROL REGISTER
244 * Bit fields:
245 * 27: HW_RF_KILL_SW
246 * Indicates state of (platform's) hardware RF-Kill switch
247 * 26-24: POWER_SAVE_TYPE
248 * Indicates current power-saving mode:
249 * 000 -- No power saving
250 * 001 -- MAC power-down
251 * 010 -- PHY (radio) power-down
252 * 011 -- Error
253 * 9-6: SYS_CONFIG
254 * Indicates current system configuration, reflecting pins on chip
255 * as forced high/low by device circuit board.
256 * 4: GOING_TO_SLEEP
257 * Indicates MAC is entering a power-saving sleep power-down.
258 * Not a good time to access device-internal resources.
259 * 3: MAC_ACCESS_REQ
260 * Host sets this to request and maintain MAC wakeup, to allow host
261 * access to device-internal resources. Host must wait for
262 * MAC_CLOCK_READY (and !GOING_TO_SLEEP) before accessing non-CSR
263 * device registers.
264 * 2: INIT_DONE
265 * Host sets this to put device into fully operational D0 power mode.
266 * Host resets this after SW_RESET to put device into low power mode.
267 * 0: MAC_CLOCK_READY
268 * Indicates MAC (ucode processor, etc.) is powered up and can run.
269 * Internal resources are accessible.
270 * NOTE: This does not indicate that the processor is actually running.
271 * NOTE: This does not indicate that 4965 or 3945 has completed
272 * init or post-power-down restore of internal SRAM memory.
273 * Use CSR_UCODE_DRV_GP1_BIT_MAC_SLEEP as indication that
274 * SRAM is restored and uCode is in normal operation mode.
275 * Later devices (5xxx/6xxx/1xxx) use non-volatile SRAM, and
276 * do not need to save/restore it.
277 * NOTE: After device reset, this bit remains "0" until host sets
278 * INIT_DONE
279 */
202#define CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY (0x00000001) 280#define CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY (0x00000001)
203#define CSR_GP_CNTRL_REG_FLAG_INIT_DONE (0x00000004) 281#define CSR_GP_CNTRL_REG_FLAG_INIT_DONE (0x00000004)
204#define CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ (0x00000008) 282#define CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ (0x00000008)
@@ -231,28 +309,58 @@
231#define CSR_EEPROM_REG_MSK_DATA (0xFFFF0000) 309#define CSR_EEPROM_REG_MSK_DATA (0xFFFF0000)
232 310
233/* EEPROM GP */ 311/* EEPROM GP */
234#define CSR_EEPROM_GP_VALID_MSK (0x00000007) 312#define CSR_EEPROM_GP_VALID_MSK (0x00000007) /* signature */
235#define CSR_EEPROM_GP_IF_OWNER_MSK (0x00000180) 313#define CSR_EEPROM_GP_IF_OWNER_MSK (0x00000180)
314#define CSR_EEPROM_GP_BAD_SIGNATURE_BOTH_EEP_AND_OTP (0x00000000)
315#define CSR_EEPROM_GP_BAD_SIG_EEP_GOOD_SIG_OTP (0x00000001)
316#define CSR_EEPROM_GP_GOOD_SIG_EEP_LESS_THAN_4K (0x00000002)
317#define CSR_EEPROM_GP_GOOD_SIG_EEP_MORE_THAN_4K (0x00000004)
318
319/* One-time-programmable memory general purpose reg */
236#define CSR_OTP_GP_REG_DEVICE_SELECT (0x00010000) /* 0 - EEPROM, 1 - OTP */ 320#define CSR_OTP_GP_REG_DEVICE_SELECT (0x00010000) /* 0 - EEPROM, 1 - OTP */
237#define CSR_OTP_GP_REG_OTP_ACCESS_MODE (0x00020000) /* 0 - absolute, 1 - relative */ 321#define CSR_OTP_GP_REG_OTP_ACCESS_MODE (0x00020000) /* 0 - absolute, 1 - relative */
238#define CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK (0x00100000) /* bit 20 */ 322#define CSR_OTP_GP_REG_ECC_CORR_STATUS_MSK (0x00100000) /* bit 20 */
239#define CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK (0x00200000) /* bit 21 */ 323#define CSR_OTP_GP_REG_ECC_UNCORR_STATUS_MSK (0x00200000) /* bit 21 */
324
325/* GP REG */
240#define CSR_GP_REG_POWER_SAVE_STATUS_MSK (0x03000000) /* bit 24/25 */ 326#define CSR_GP_REG_POWER_SAVE_STATUS_MSK (0x03000000) /* bit 24/25 */
241#define CSR_GP_REG_NO_POWER_SAVE (0x00000000) 327#define CSR_GP_REG_NO_POWER_SAVE (0x00000000)
242#define CSR_GP_REG_MAC_POWER_SAVE (0x01000000) 328#define CSR_GP_REG_MAC_POWER_SAVE (0x01000000)
243#define CSR_GP_REG_PHY_POWER_SAVE (0x02000000) 329#define CSR_GP_REG_PHY_POWER_SAVE (0x02000000)
244#define CSR_GP_REG_POWER_SAVE_ERROR (0x03000000) 330#define CSR_GP_REG_POWER_SAVE_ERROR (0x03000000)
245 331
246/* EEPROM signature */
247#define CSR_EEPROM_GP_BAD_SIGNATURE_BOTH_EEP_AND_OTP (0x00000000)
248#define CSR_EEPROM_GP_BAD_SIG_EEP_GOOD_SIG_OTP (0x00000001)
249#define CSR_EEPROM_GP_GOOD_SIG_EEP_LESS_THAN_4K (0x00000002)
250#define CSR_EEPROM_GP_GOOD_SIG_EEP_MORE_THAN_4K (0x00000004)
251 332
252/* CSR GIO */ 333/* CSR GIO */
253#define CSR_GIO_REG_VAL_L0S_ENABLED (0x00000002) 334#define CSR_GIO_REG_VAL_L0S_ENABLED (0x00000002)
254 335
255/* UCODE DRV GP */ 336/*
337 * UCODE-DRIVER GP (general purpose) mailbox register 1
338 * Host driver and uCode write and/or read this register to communicate with
339 * each other.
340 * Bit fields:
341 * 4: UCODE_DISABLE
342 * Host sets this to request permanent halt of uCode, same as
343 * sending CARD_STATE command with "halt" bit set.
344 * 3: CT_KILL_EXIT
345 * Host sets this to request exit from CT_KILL state, i.e. host thinks
346 * device temperature is low enough to continue normal operation.
347 * 2: CMD_BLOCKED
348 * Host sets this during RF KILL power-down sequence (HW, SW, CT KILL)
349 * to release uCode to clear all Tx and command queues, enter
350 * unassociated mode, and power down.
351 * NOTE: Some devices also use HBUS_TARG_MBX_C register for this bit.
352 * 1: SW_BIT_RFKILL
353 * Host sets this when issuing CARD_STATE command to request
354 * device sleep.
355 * 0: MAC_SLEEP
356 * uCode sets this when preparing a power-saving power-down.
357 * uCode resets this when power-up is complete and SRAM is sane.
358 * NOTE: 3945/4965 saves internal SRAM data to host when powering down,
359 * and must restore this data after powering back up.
360 * MAC_SLEEP is the best indication that restore is complete.
361 * Later devices (5xxx/6xxx/1xxx) use non-volatile SRAM, and
362 * do not need to save/restore it.
363 */
256#define CSR_UCODE_DRV_GP1_BIT_MAC_SLEEP (0x00000001) 364#define CSR_UCODE_DRV_GP1_BIT_MAC_SLEEP (0x00000001)
257#define CSR_UCODE_SW_BIT_RFKILL (0x00000002) 365#define CSR_UCODE_SW_BIT_RFKILL (0x00000002)
258#define CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED (0x00000004) 366#define CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED (0x00000004)
@@ -265,7 +373,7 @@
265#define CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA (0x00000002) 373#define CSR_GP_DRIVER_REG_BIT_RADIO_SKU_2x2_IPA (0x00000002)
266 374
267 375
268/* GI Chicken Bits */ 376/* GIO Chicken Bits (PCI Express bus link power management) */
269#define CSR_GIO_CHICKEN_BITS_REG_BIT_L1A_NO_L0S_RX (0x00800000) 377#define CSR_GIO_CHICKEN_BITS_REG_BIT_L1A_NO_L0S_RX (0x00800000)
270#define CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER (0x20000000) 378#define CSR_GIO_CHICKEN_BITS_REG_BIT_DIS_L0S_EXIT_TIMER (0x20000000)
271 379
@@ -285,8 +393,23 @@
285#define CSR_DRAM_INT_TBL_ENABLE (1 << 31) 393#define CSR_DRAM_INT_TBL_ENABLE (1 << 31)
286#define CSR_DRAM_INIT_TBL_WRAP_CHECK (1 << 27) 394#define CSR_DRAM_INIT_TBL_WRAP_CHECK (1 << 27)
287 395
288/*=== HBUS (Host-side Bus) ===*/ 396/*
397 * HBUS (Host-side Bus)
398 *
399 * HBUS registers are mapped directly into PCI bus space, but are used
400 * to indirectly access device's internal memory or registers that
401 * may be powered-down.
402 *
403 * Use iwl_write_direct32()/iwl_read_direct32() family for these registers;
404 * host must "grab nic access" via CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ
405 * to make sure the MAC (uCode processor, etc.) is powered up for accessing
406 * internal resources.
407 *
408 * Do not use iwl_write32()/iwl_read32() family to access these registers;
409 * these provide only simple PCI bus access, without waking up the MAC.
410 */
289#define HBUS_BASE (0x400) 411#define HBUS_BASE (0x400)
412
290/* 413/*
291 * Registers for accessing device's internal SRAM memory (e.g. SCD SRAM 414 * Registers for accessing device's internal SRAM memory (e.g. SCD SRAM
292 * structures, error log, event log, verifying uCode load). 415 * structures, error log, event log, verifying uCode load).
@@ -301,6 +424,10 @@
301#define HBUS_TARG_MEM_WDAT (HBUS_BASE+0x018) 424#define HBUS_TARG_MEM_WDAT (HBUS_BASE+0x018)
302#define HBUS_TARG_MEM_RDAT (HBUS_BASE+0x01c) 425#define HBUS_TARG_MEM_RDAT (HBUS_BASE+0x01c)
303 426
427/* Mailbox C, used as workaround alternative to CSR_UCODE_DRV_GP1 mailbox */
428#define HBUS_TARG_MBX_C (HBUS_BASE+0x030)
429#define HBUS_TARG_MBX_C_REG_BIT_CMD_BLOCKED (0x00000004)
430
304/* 431/*
305 * Registers for accessing device's internal peripheral registers 432 * Registers for accessing device's internal peripheral registers
306 * (e.g. SCD, BSM, etc.). First write to address register, 433 * (e.g. SCD, BSM, etc.). First write to address register,
@@ -315,16 +442,12 @@
315#define HBUS_TARG_PRPH_RDAT (HBUS_BASE+0x050) 442#define HBUS_TARG_PRPH_RDAT (HBUS_BASE+0x050)
316 443
317/* 444/*
318 * Per-Tx-queue write pointer (index, really!) (3945 and 4965). 445 * Per-Tx-queue write pointer (index, really!)
319 * Indicates index to next TFD that driver will fill (1 past latest filled). 446 * Indicates index to next TFD that driver will fill (1 past latest filled).
320 * Bit usage: 447 * Bit usage:
321 * 0-7: queue write index 448 * 0-7: queue write index
322 * 11-8: queue selector 449 * 11-8: queue selector
323 */ 450 */
324#define HBUS_TARG_WRPTR (HBUS_BASE+0x060) 451#define HBUS_TARG_WRPTR (HBUS_BASE+0x060)
325#define HBUS_TARG_MBX_C (HBUS_BASE+0x030)
326
327#define HBUS_TARG_MBX_C_REG_BIT_CMD_BLOCKED (0x00000004)
328
329 452
330#endif /* !__iwl_csr_h__ */ 453#endif /* !__iwl_csr_h__ */