/* $NetBSD: if_iwnreg.h,v 1.15 2014/11/09 14:40:54 nonaka Exp $ */
/* $OpenBSD: if_iwnreg.h,v 1.49 2014/09/09 18:56:24 sthen Exp $ */
/*-
* Copyright (c) 2007, 2008
* Damien Bergamini <damien.bergamini@free.fr>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/*
* Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
*/
#ifndef _IF_IWNREG_H
#define _IF_IWNREG_H
/* XXX Added for NetBSD */
/* Maximum number of DMA segments for TX. */
/* RX buffers must be large enough to hold a full 4K A-MPDU. */
#if defined(_LP64)
/* HW supports 36-bit DMA addresses. */
#else
#endif
/* Base Address Register. */
/*
* Control and status registers.
*/
/*
* Flow-Handler registers.
*/
/*
* TX scheduler registers.
*/
/*
* Offsets in TX scheduler's SRAM.
*/
/*
* NIC internal memory offsets.
*/
/* Possible flags for register IWN_HW_IF_CONFIG. */
/* Possible values for register IWN_INT_PERIODIC. */
/* Possible flags for registers IWN_PRPH_RADDR/IWN_PRPH_WADDR. */
/* Possible values for IWN_BSM_WR_MEM_DST. */
/* Possible flags for register IWN_RESET. */
/* Possible flags for register IWN_GP_CNTRL. */
/* Possible flags for register IWN_HW_REV. */
#define IWN_HW_REV_TYPE_4965 0
/* Types 6030 and 6035 also return 11 */
/* Possible flags for register IWN_GIO_CHICKEN. */
/* Possible flags for register IWN_GIO. */
/* Possible flags for register IWN_GP_DRIVER. */
#define IWN_GP_DRIVER_RADIO_3X3_HYB (0 << 0)
/* Possible flags for register IWN_UCODE_GP1_CLR. */
/* Possible flags for register IWN_DRAM_INT_TBL. */
/* Possible values for register IWN_ANA_PLL. */
/* Possible flags for register IWN_FH_RX_STATUS. */
/* Possible flags for register IWN_BSM_WR_CTRL. */
/* Possible flags for register IWN_INT. */
/* Shortcut. */
#define IWN_INT_MASK_DEF \
/* Possible flags for register IWN_FH_INT. */
/* Shortcuts for the above. */
#define IWN_FH_INT_TX \
#define IWN_FH_INT_RX \
#define IWN_FH_TX_CONFIG_DMA_PAUSE 0
/* Possible flags for register IWN_FH_TX_CHICKEN. */
/* Possible flags for register IWN_FH_TX_STATUS. */
/* Possible flags for register IWN_FH_RX_CONFIG. */
/* Possible flags for register IWN_FH_TX_CONFIG. */
/* Possible flags for register IWN_EEPROM. */
/* Possible flags for register IWN_EEPROM_GP. */
/* Possible flags for register IWN_OTP_GP. */
/* Possible flags for register IWN_SCHED_QUEUE_STATUS. */
/* Possible flags for registers IWN_APMG_CLK_*. */
/* Possible flags for register IWN_APMG_PS. */
#define IWN_APMG_PS_PWR_SRC_VMAIN 0
/* Possible flags for register IWN_APMG_DIGITAL_SVR. */
#define IWN_APMG_DIGITAL_SVR_VOLTAGE_MASK \
#define IWN_APMG_DIGITAL_SVR_VOLTAGE_1_32 \
/* Possible flags for IWN_APMG_PCI_STT. */
/* Possible flags for register IWN_BSM_DRAM_TEXT_SIZE. */
struct iwn_tx_desc {
struct {
/* Pad to 128 bytes. */
} __packed;
struct iwn_rx_status {
} __packed;
struct iwn_rx_desc {
} __packed;
/* Possible RX status flags. */
/* Shortcut for the above. */
struct iwn_tx_cmd {
} __packed;
/* Antenna flags, used in various commands. */
/* Shortcuts. */
/* Structure for command IWN_CMD_RXON. */
struct iwn_rxon {
/* The following fields are for >=5000 Series only. */
} __packed;
/* Structure for command IWN_CMD_ASSOCIATE. */
struct iwn_assoc {
} __packed;
/* Structure for command IWN_CMD_EDCA_PARAMS. */
struct iwn_edca_params {
struct {
} __packed;
/* Structure for command IWN_CMD_TIMING. */
struct iwn_cmd_timing {
} __packed;
/* Structure for command IWN_CMD_ADD_NODE. */
struct iwn_node_info {
#define IWN_ID_BSS 0
/* The following 3 fields are for 5000 Series only. */
} __packed;
struct iwn4965_node_info {
} __packed;
/* Structure for command IWN_CMD_TX_DATA. */
struct iwn_cmd_data {
} __packed;
/* Structure for command IWN_CMD_LINK_QUALITY. */
struct iwn_cmd_link_quality {
struct {
} __packed;
/* Structure for command IWN_CMD_SET_LED. */
struct iwn_cmd_led {
} __packed;
/* Structure for command IWN5000_CMD_WIMAX_COEX. */
struct iwn5000_wimax_coex {
struct iwn5000_wimax_event {
} __packed;
/* Structures for command IWN5000_CMD_CALIB_CONFIG. */
struct iwn5000_calib_elem {
} __packed;
struct iwn5000_calib_status {
} __packed;
struct iwn5000_calib_config {
} __packed;
/* Structure for command IWN_CMD_SET_POWER_MODE. */
struct iwn_pmgt_cmd {
} __packed;
/* Structures for command IWN_CMD_SCAN. */
struct iwn_scan_essid {
} __packed;
struct iwn_scan_hdr {
/* Followed by a struct iwn_cmd_data. */
/* Followed by an array of 20 structs iwn_scan_essid. */
/* Followed by probe request body. */
/* Followed by an array of ``nchan'' structs iwn_scan_chan. */
} __packed;
struct iwn_scan_chan {
} __packed;
/* Maximum size of a scan command. */
/*
* For active scan, listen ACTIVE_DWELL_TIME (msec) on each channel after
* sending probe req. This should be set long enough to hear probe responses
* from more than one AP.
*/
/*
* For passive scan, listen PASSIVE_DWELL_TIME (msec) on each channel.
* Must be set longer than active dwell time.
* For the most reliable scan, set > AP beacon interval (typically 100msec).
*/
/*
* If active scanning is requested but a certain channel is
* marked passive, we can do active scanning if we detect
* transmissions.
*
* There is an issue with some firmware versions that triggers
* a sysassert on a "good CRC threshold" of zero (== disabled),
* on a radar channel even though this means that we should NOT
* send probes.
*
* The "good CRC threshold" is the number of frames that we
* need to receive during our dwell time on a channel before
* sending out probes -- setting this to a huge value will
* mean we never reach it, but at the same time work around
* the aforementioned issue. Thus use IWN_GOOD_CRC_TH_NEVER
* here instead of IWN_GOOD_CRC_TH_DISABLED.
*
* This was fixed in later versions along with some other
* scan changes, and the threshold behaves as a flag in those
* versions.
*/
#define IWN_GOOD_CRC_TH_DISABLED 0
/* Structure for command IWN_CMD_TXPOWER (4965AGN only.) */
struct iwn4965_cmd_txpower {
struct {
} __packed;
/* Structure for command IWN_CMD_TXPOWER_DBM (5000 Series only.) */
struct iwn5000_cmd_txpower {
} __packed;
/* Structure for command IWN_CMD_BT_COEX. */
struct iwn_bluetooth {
} __packed;
struct iwn_bt_basic {
#define IWN_BT_BASIC_MODE_DISABLED 0
#if 0
/*
* The original code causes problems with lint. These declarations
* could be fixed with lint tags, but the assignment to
* reduce_txpower in iwn_config_bt_coex_adv_config() cannot.
* For reference it remains here but is ifdef'ed out.
*/
union {
struct {
};
};
#endif
} __packed;
struct iwn_bt_adv1 {
/* set IWLAGN_BT_VALID_BOOST to "1" in "valid" bitmask for */
} __packed;
struct iwn_bt_adv2 {
/* set IWLAGN_BT_VALID_BOOST to "1" in "valid" bitmask for */
} __packed;
/* Structure for command IWN_CMD_BT_COEX_PRIOTABLE */
struct iwn_btcoex_priotable {
} __packed;
/* Structure for command IWN_CMD_BT_COEX_PROT */
struct iwn_btcoex_prot {
} __packed;
/* Structure for command IWN_CMD_SET_CRITICAL_TEMP. */
struct iwn_critical_temp {
/* degK <-> degC conversion macros. */
} __packed;
/* Structures for command IWN_CMD_SET_SENSITIVITY. */
struct iwn_sensitivity_cmd {
#define IWN_SENSITIVITY_DEFAULTTBL 0
} __packed;
struct iwn_enhanced_sensitivity_cmd {
/* "Enhanced" part. */
} __packed;
/* Structures for command IWN_CMD_PHY_CALIB. */
struct iwn_phy_calib {
} __packed;
struct iwn5000_phy_calib_crystal {
} __packed;
struct iwn6000_phy_calib_temp_offset {
} __packed;
struct iwn2000_phy_calib_temp_offset {
} __packed;
struct iwn_phy_calib_gain {
} __packed;
/* Structure for command IWN_CMD_SPECTRUM_MEASUREMENT. */
struct iwn_spectrum_cmd {
struct {
} __packed;
/* Structure for IWN_UC_READY notification. */
struct iwn_ucode_info {
#define IWN_UCODE_RUNTIME 0
/* The following fields are for UCODE_INIT only. */
struct {
} __packed;
/* Structures for IWN_TX_DONE notification. */
struct iwn4965_tx_stat {
} __packed;
struct iwn5000_tx_stat {
} __packed;
/* Structure for IWN_BEACON_MISSED notification. */
struct iwn_beacon_missed {
} __packed;
/* Structure for IWN_MPDU_RX_DONE notification. */
struct iwn_rx_mpdu {
} __packed;
/* Structures for IWN_RX_DONE and IWN_MPDU_RX_DONE notifications. */
struct iwn4965_rx_phystat {
} __packed;
struct iwn5000_rx_phystat {
} __packed;
struct iwn_rx_stat {
} __packed;
/* Structure for IWN_RX_COMPRESSED_BA notification. */
struct iwn_compressed_ba {
} __packed;
/* Structure for IWN_START_SCAN notification. */
struct iwn_start_scan {
} __packed;
/* Structure for IWN_STOP_SCAN notification. */
struct iwn_stop_scan {
} __packed;
/* Structure for IWN_SPECTRUM_MEASUREMENT notification. */
struct iwn_spectrum_notif {
#define IWN_MEASUREMENT_START 0
#define IWN_MEASUREMENT_OK 0
} __packed;
/* Structures for IWN_{RX,BEACON}_STATISTICS notification. */
struct iwn_rx_phy_stats {
} __packed;
struct iwn_rx_general_stats {
} __packed;
struct iwn_rx_ht_phy_stats {
} __packed;
struct iwn_rx_stats {
} __packed;
struct iwn_tx_stats {
} __packed;
struct iwn_general_stats {
} __packed;
struct iwn_stats {
} __packed;
/* Firmware error dump. */
struct iwn_fw_dump {
} __packed;
/* TLV firmware header. */
struct iwn_fw_tlv_hdr {
} __packed;
/* TLV header. */
struct iwn_fw_tlv {
} __packed;
/**
* enum iwn_ucode_tlv_flag - ucode API flags
* @IWN_UCODE_TLV_FLAGS_PAN: This is PAN capable microcode; this previously
* was a separate TLV but moved here to save space.
* @IWN_UCODE_TLV_FLAGS_NEWSCAN: new uCode scan behaviour on hidden SSID,
* treats good CRC threshold as a boolean
* @IWN_UCODE_TLV_FLAGS_MFP: This uCode image supports MFP (802.11w).
* @IWN_UCODE_TLV_FLAGS_P2P: This uCode image supports P2P.
* @IWN_UCODE_TLV_FLAGS_DW_BC_TABLE: The SCD byte count table is in DWORDS
* @IWN_UCODE_TLV_FLAGS_UAPSD: This uCode image supports uAPSD
* @IWN_UCODE_TLV_FLAGS_SHORT_BL: 16 entries of black list instead of 64 in scan
* offload profile config command.
* @IWN_UCODE_TLV_FLAGS_RX_ENERGY_API: supports rx signal strength api
* @IWN_UCODE_TLV_FLAGS_TIME_EVENT_API_V2: using the new time event API.
* @IWN_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six
* (rather than two) IPv6 addresses
* @IWN_UCODE_TLV_FLAGS_BF_UPDATED: new beacon filtering API
* @IWN_UCODE_TLV_FLAGS_NO_BASIC_SSID: not sending a probe with the SSID element
* from the probe request template.
* @IWN_UCODE_TLV_FLAGS_D3_CONTINUITY_API: modified D3 API to allow keeping
* connection when going back to D0
* @IWN_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL: new NS offload (small version)
* @IWN_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version)
* @IWN_UCODE_TLV_FLAGS_SCHED_SCAN: this uCode image supports scheduled scan.
* @IWN_UCODE_TLV_FLAGS_STA_KEY_CMD: new ADD_STA and ADD_STA_KEY command API
* @IWN_UCODE_TLV_FLAGS_DEVICE_PS_CMD: support device wide power command
* containing CAM (Continuous Active Mode) indication.
*/
enum iwn_ucode_tlv_flag {
};
/*
* Offsets into EEPROM.
*/
/* Indirect offsets. */
/* Possible flags for IWN_EEPROM_SKU_CAP. */
/* Possible flags for IWN_EEPROM_RFCFG. */
struct iwn_eeprom_chan {
} __packed;
struct iwn_eeprom_enhinfo {
} __packed;
struct iwn5000_eeprom_calib_hdr {
} __packed;
struct iwn4965_eeprom_chan_samples {
struct {
} __packed;
struct iwn4965_eeprom_band {
} __packed;
/*
* Offsets of channels descriptions in EEPROM.
*/
};
};
static const struct iwn_chan_band {
} iwn_bands[] = {
/* 20MHz channels, 2GHz band. */
{ 14, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 } },
/* 20MHz channels, 5GHz band. */
{ 13, { 183, 184, 185, 187, 188, 189, 192, 196, 7, 8, 11, 12, 16 } },
{ 12, { 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64 } },
{ 11, { 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 } },
{ 6, { 145, 149, 153, 157, 161, 165 } },
/* 40MHz channels (primary channels), 2GHz band. */
{ 7, { 1, 2, 3, 4, 5, 6, 7 } },
/* 40MHz channels (primary channels), 5GHz band. */
{ 11, { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157 } }
};
/* HW rate indices. */
#define IWN_RIDX_CCK1 0
static const struct iwn_rate {
{ 12, 0xd, 0 },
{ 18, 0xf, 0 },
{ 24, 0x5, 0 },
{ 36, 0x7, 0 },
{ 48, 0x9, 0 },
{ 72, 0xb, 0 },
{ 96, 0x1, 0 },
{ 108, 0x3, 0 },
{ 120, 0x3, 0 }
};
/*
* RF Tx gain values from highest to lowest power (values obtained from
* the reference driver.)
*/
0x3f, 0x3f, 0x3f, 0x3e, 0x3e, 0x3e, 0x3d, 0x3d, 0x3d, 0x3c, 0x3c,
0x3c, 0x3b, 0x3b, 0x3b, 0x3a, 0x3a, 0x3a, 0x39, 0x39, 0x39, 0x38,
0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x35, 0x35, 0x35,
0x34, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32, 0x31, 0x31,
0x31, 0x30, 0x30, 0x30, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04,
0x04, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3e, 0x3e, 0x3e, 0x3d, 0x3d, 0x3d,
0x3c, 0x3c, 0x3c, 0x3b, 0x3b, 0x3b, 0x3a, 0x3a, 0x3a, 0x39, 0x39,
0x39, 0x38, 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x35,
0x35, 0x35, 0x34, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32,
0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x25, 0x25, 0x25, 0x24, 0x24,
0x24, 0x23, 0x23, 0x23, 0x22, 0x18, 0x18, 0x17, 0x17, 0x17, 0x16,
0x16, 0x16, 0x15, 0x15, 0x15, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13,
0x12, 0x08, 0x08, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05,
0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01,
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/*
* DSP pre-DAC gain values from highest to lowest power (values obtained
* from the reference driver.)
*/
0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
0x6e, 0x68, 0x62, 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a,
0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4f,
0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44,
0x43, 0x42, 0x41, 0x40, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b
};
0x7b, 0x75, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
0x68, 0x62, 0x6e, 0x68, 0x62, 0x5d, 0x58, 0x53, 0x4e
};
/*
* Power saving settings (values obtained from the reference driver.)
*/
static const struct iwn_pmgt {
int skip_dtim;
/* DTIM <= 2 */
{
{ 0, 0, { 0, 0, 0, 0, 0 }, 0 }, /* CAM */
{ 200, 500, { 1, 2, 2, 2, -1 }, 0 }, /* PS level 1 */
{ 200, 300, { 1, 2, 2, 2, -1 }, 0 }, /* PS level 2 */
{ 50, 100, { 2, 2, 2, 2, -1 }, 0 }, /* PS level 3 */
{ 50, 25, { 2, 2, 4, 4, -1 }, 1 }, /* PS level 4 */
{ 25, 25, { 2, 2, 4, 6, -1 }, 2 } /* PS level 5 */
},
/* 3 <= DTIM <= 10 */
{
{ 0, 0, { 0, 0, 0, 0, 0 }, 0 }, /* CAM */
{ 200, 500, { 1, 2, 3, 4, 4 }, 0 }, /* PS level 1 */
{ 200, 300, { 1, 2, 3, 4, 7 }, 0 }, /* PS level 2 */
{ 50, 100, { 2, 4, 6, 7, 9 }, 0 }, /* PS level 3 */
{ 50, 25, { 2, 4, 6, 9, 10 }, 1 }, /* PS level 4 */
{ 25, 25, { 2, 4, 7, 10, 10 }, 2 } /* PS level 5 */
},
/* DTIM >= 11 */
{
{ 0, 0, { 0, 0, 0, 0, 0 }, 0 }, /* CAM */
{ 200, 500, { 1, 2, 3, 4, -1 }, 0 }, /* PS level 1 */
{ 200, 300, { 2, 4, 6, 7, -1 }, 0 }, /* PS level 2 */
{ 50, 100, { 2, 7, 9, 9, -1 }, 0 }, /* PS level 3 */
{ 50, 25, { 2, 7, 9, 9, -1 }, 0 }, /* PS level 4 */
{ 25, 25, { 4, 7, 10, 10, -1 }, 0 } /* PS level 5 */
}
};
struct iwn_sensitivity_limits {
};
/*
* RX sensitivity limits (values obtained from the reference driver.)
*/
105, 140,
220, 270,
85, 120,
170, 210,
125, 200,
200, 400,
97,
100,
100
};
120, 120, /* min = max for performance bug in DSP. */
240, 240, /* min = max for performance bug in DSP. */
90, 120,
170, 210,
125, 200,
170, 400,
95,
95,
95
};
105, 105, /* min = max for performance bug in DSP. */
220, 220, /* min = max for performance bug in DSP. */
90, 120,
170, 210,
125, 200,
170, 400,
95,
95,
95
};
120, 155,
240, 290,
90, 120,
170, 210,
125, 200,
170, 400,
95,
95,
95
};
105, 110,
192, 232,
80, 145,
128, 232,
125, 175,
160, 310,
97,
97,
100
};
105, 110,
192, 232,
80, 145,
128, 232,
125, 175,
160, 310,
97,
97,
100
};
#ifndef IEEE80211_NO_HT
/* Map TID to TX scheduler's FIFO. */
1, 0, 0, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 3
};
#endif
#ifdef notyet
{ 0x04, 0x03, 0x00, 0x00 },
{ 0x04, 0x03, 0x00, 0x03 },
{ 0x04, 0x03, 0x00, 0x03 },
{ 0x04, 0x03, 0x00, 0x03 },
{ 0x04, 0x03, 0x00, 0x00 },
{ 0x04, 0x03, 0x00, 0x07 },
{ 0x04, 0x03, 0x00, 0x00 },
{ 0x04, 0x03, 0x00, 0x03 },
{ 0x04, 0x03, 0x00, 0x03 },
{ 0x04, 0x03, 0x00, 0x00 },
{ 0x06, 0x03, 0x00, 0x07 },
{ 0x04, 0x03, 0x00, 0x00 },
{ 0x06, 0x06, 0x00, 0x03 },
{ 0x04, 0x03, 0x00, 0x07 },
{ 0x04, 0x03, 0x00, 0x00 },
{ 0x04, 0x03, 0x00, 0x00 }
};
#endif
/* Firmware errors. */
static const char * const iwn_fw_errmsg[] = {
"OK",
"FAIL",
"BAD_PARAM",
"BAD_CHECKSUM",
"NMI_INTERRUPT_WDG",
"SYSASSERT",
"FATAL_ERROR",
"BAD_COMMAND",
"HW_ERROR_TUNE_LOCK",
"HW_ERROR_TEMPERATURE",
"ILLEGAL_CHAN_FREQ",
"VCC_NOT_STABLE",
"FH_ERROR",
"NMI_INTERRUPT_HOST",
"NMI_INTERRUPT_ACTION_PT",
"NMI_INTERRUPT_UNKNOWN",
"UCODE_VERSION_MISMATCH",
"HW_ERROR_ABS_LOCK",
"HW_ERROR_CAL_LOCK_FAIL",
"NMI_INTERRUPT_INST_ACTION_PT",
"NMI_INTERRUPT_DATA_ACTION_PT",
"NMI_TRM_HW_ER",
"NMI_INTERRUPT_TRM",
"NMI_INTERRUPT_BREAKPOINT"
"DEBUG_0",
"DEBUG_1",
"DEBUG_2",
"DEBUG_3",
"ADVANCED_SYSASSERT"
};
/* Find least significant bit that is set. */
(membar_producer(), membar_consumer())
#endif /* _IF_IWNREG_H */