fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* $NetBSD: if_iwnreg.h,v 1.15 2014/11/09 14:40:54 nonaka Exp $ */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* $OpenBSD: if_iwnreg.h,v 1.49 2014/09/09 18:56:24 sthen Exp $ */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*-
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Copyright (c) 2007, 2008
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Damien Bergamini <damien.bergamini@free.fr>
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld *
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Permission to use, copy, modify, and distribute this software for any
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * purpose with or without fee is hereby granted, provided that the above
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * copyright notice and this permission notice appear in all copies.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld *
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#ifndef _IF_IWNREG_H
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define _IF_IWNREG_H
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* XXX Added for NetBSD */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IEEE80211_TKIP_MICLEN 8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_RING_COUNT 256
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_RING_LOMARK 192
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_RING_HIMARK 224
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_RING_COUNT_LOG 6
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_RING_COUNT (1 << IWN_RX_RING_COUNT_LOG)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_NTXQUEUES 16
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_NTXQUEUES 20
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_QUEUE_NUM 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_NDMACHNLS 7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_NDMACHNLS 8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SRVC_DMACHNL 9
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KW_SIZE 4096
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ICT_SIZE 4096
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ICT_COUNT (IWN_ICT_SIZE / sizeof (uint32_t))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Maximum number of DMA segments for TX. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MAX_SCATTER 20
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* RX buffers must be large enough to hold a full 4K A-MPDU. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RBUF_SIZE (4 * 1024)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TBUF_SIZE (4 * 1024)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#if defined(_LP64)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* HW supports 36-bit DMA addresses. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LOADDR(paddr) ((uint32_t)(paddr))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HIADDR(paddr) (((paddr) >> 32) & 0xf)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#else
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LOADDR(paddr) (paddr)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HIADDR(paddr) (0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#endif
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Base Address Register. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PCI_BAR0 PCI_MAPREG_START
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Control and status registers.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG 0x000
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_COALESCING 0x004
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_PERIODIC 0x005 /* use IWN_WRITE_1 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT 0x008
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_MASK 0x00c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_INT 0x010
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RESET 0x020
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL 0x024
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV 0x028
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM 0x02c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_GP 0x030
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_OTP_GP 0x034
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GIO 0x03c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER 0x050
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UCODE_GP1_CLR 0x05c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LED 0x094
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_DRAM_INT_TBL 0x0a0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SHADOW_REG_CTRL 0x0a8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GIO_CHICKEN 0x100
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANA_PLL 0x20c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_WA 0x22c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_DBG_HPET_MEM 0x240
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_DBG_LINK_PWR_MGMT 0x250
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEM_RADDR 0x40c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEM_WADDR 0x410
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEM_WDATA 0x418
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEM_RDATA 0x41c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PRPH_WADDR 0x444
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PRPH_RADDR 0x448
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PRPH_WDATA 0x44c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PRPH_RDATA 0x450
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HBUS_TARG_WRPTR 0x460
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Flow-Handler registers.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TFBD_CTRL0(qid) (0x1900 + (qid) * 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TFBD_CTRL1(qid) (0x1904 + (qid) * 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_KW_ADDR 0x197c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_SRAM_ADDR(qid) (0x19a4 + (qid) * 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_CBBC_QUEUE(qid) (0x19d0 + (qid) * 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_STATUS_WPTR 0x1bc0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_BASE 0x1bc4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_WPTR 0x1bc8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG 0x1c00
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_STATUS 0x1c44
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CONFIG(qid) (0x1d00 + (qid) * 32)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TXBUF_STATUS(qid) (0x1d08 + (qid) * 32)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CHICKEN 0x1e98
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_STATUS 0x1eb0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * TX scheduler registers.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SCHED_BASE 0xa02c00
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SCHED_SRAM_ADDR (IWN_SCHED_BASE + 0x000)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_DRAM_ADDR (IWN_SCHED_BASE + 0x008)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_DRAM_ADDR (IWN_SCHED_BASE + 0x010)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_TXFACT (IWN_SCHED_BASE + 0x010)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_TXFACT (IWN_SCHED_BASE + 0x01c)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_QUEUE_RDPTR(qid) (IWN_SCHED_BASE + 0x064 + (qid) * 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_QUEUE_RDPTR(qid) (IWN_SCHED_BASE + 0x068 + (qid) * 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_QCHAIN_SEL (IWN_SCHED_BASE + 0x0d0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_INTR_MASK (IWN_SCHED_BASE + 0x0e4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_QCHAIN_SEL (IWN_SCHED_BASE + 0x0e8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_QUEUE_STATUS(qid) (IWN_SCHED_BASE + 0x104 + (qid) * 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_INTR_MASK (IWN_SCHED_BASE + 0x108)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_QUEUE_STATUS(qid) (IWN_SCHED_BASE + 0x10c + (qid) * 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_AGGR_SEL (IWN_SCHED_BASE + 0x248)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Offsets in TX scheduler's SRAM.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_CTX_OFF 0x380
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_CTX_LEN 416
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_QUEUE_OFFSET(qid) (0x380 + (qid) * 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_TRANS_TBL(qid) (0x500 + (qid) * 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_CTX_OFF 0x600
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_CTX_LEN 520
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_QUEUE_OFFSET(qid) (0x600 + (qid) * 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_TRANS_TBL(qid) (0x7e0 + (qid) * 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * NIC internal memory offsets.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_CLK_CTRL 0x3000
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_CLK_EN 0x3004
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_CLK_DIS 0x3008
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS 0x300c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_DIGITAL_SVR 0x3058
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_ANALOG_SVR 0x306c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PCI_STT 0x3010
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_WR_CTRL 0x3400
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_WR_MEM_SRC 0x3404
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_WR_MEM_DST 0x3408
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_WR_DWCOUNT 0x340c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_DRAM_TEXT_ADDR 0x3490
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_DRAM_TEXT_SIZE 0x3494
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_DRAM_DATA_ADDR 0x3498
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_DRAM_DATA_SIZE 0x349c
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_SRAM_BASE 0x3800
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_HW_IF_CONFIG. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_4965_R (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_MAC_SI (1 << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_RADIO_SI (1 << 9)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_EEPROM_LOCKED (1 << 21)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_NIC_READY (1 << 22)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_HAP_WAKE_L1A (1 << 23)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_PREPARE_DONE (1 << 25)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_IF_CONFIG_PREPARE (1 << 27)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible values for register IWN_INT_PERIODIC. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_PERIODIC_DIS 0x00
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_PERIODIC_ENA 0xff
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for registers IWN_PRPH_RADDR/IWN_PRPH_WADDR. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PRPH_DWORD ((sizeof (uint32_t) - 1) << 24)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible values for IWN_BSM_WR_MEM_DST. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TEXT_BASE 0x00000000
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_DATA_BASE 0x00800000
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_RESET. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RESET_NEVO (1U << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RESET_SW (1U << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RESET_MASTER_DISABLED (1U << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RESET_STOP_MASTER (1U << 9)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RESET_LINK_PWR_MGMT_DIS (1U << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_GP_CNTRL. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL_MAC_ACCESS_ENA (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL_MAC_CLOCK_READY (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL_INIT_DONE (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL_MAC_ACCESS_REQ (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL_SLEEP (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_CNTRL_RFKILL (1 << 27)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_HW_REV. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_SHIFT 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_MASK 0x000001f0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_4965 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_5300 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_5350 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_5150 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_5100 5
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_1000 6
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_6000 7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_6050 8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_6005 11
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Types 6030 and 6035 also return 11 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_2030 12
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_2000 16
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_105 17
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_HW_REV_TYPE_135 18
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_GIO_CHICKEN. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GIO_CHICKEN_L1A_NO_L0S_RX (1 << 23)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GIO_CHICKEN_DIS_L0S_TIMER (1 << 29)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_GIO. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GIO_L0S_ENA (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_GP_DRIVER. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER_RADIO_3X3_HYB (0 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER_RADIO_2X2_HYB (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER_RADIO_2X2_IPA (2 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER_CALIB_VER6 (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER_6050_1X2 (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GP_DRIVER_RADIO_IQ_INVERT (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_UCODE_GP1_CLR. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UCODE_GP1_RFKILL (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UCODE_GP1_CMD_BLOCKED (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UCODE_GP1_CTEMP_STOP_RF (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags/values for register IWN_LED. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LED_BSM_CTRL (1 << 5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LED_OFF 0x00000038
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LED_ON 0x00000078
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_DRAM_INT_TBL. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_DRAM_INT_TBL_WRAP_CHECK (1 << 27)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_DRAM_INT_TBL_ENABLE (1 << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible values for register IWN_ANA_PLL. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANA_PLL_INIT 0x00880300
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_FH_RX_STATUS. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_STATUS_IDLE (1 << 24)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_BSM_WR_CTRL. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_WR_CTRL_START_EN (1 << 30)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BSM_WR_CTRL_START (1 << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_INT. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_ALIVE (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_WAKEUP (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_SW_RX (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_CT_REACHED (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_RF_TOGGLED (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_SW_ERR (1 << 25)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_SCHED (1 << 26)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_FH_TX (1 << 27)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_RX_PERIODIC (1 << 28)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_HW_ERR (1 << 29)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_FH_RX (1U << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Shortcut. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_INT_MASK_DEF \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld (IWN_INT_SW_ERR | IWN_INT_HW_ERR | IWN_INT_FH_TX | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_INT_FH_RX | IWN_INT_ALIVE | IWN_INT_WAKEUP | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_INT_SW_RX | IWN_INT_CT_REACHED | IWN_INT_RF_TOGGLED)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_FH_INT. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_INT_TX_CHNL(x) (1 << (x))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_INT_RX_CHNL(x) (1 << ((x) + 16))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_INT_HI_PRIOR (1 << 30)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Shortcuts for the above. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_INT_TX \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld (IWN_FH_INT_TX_CHNL(0) | IWN_FH_INT_TX_CHNL(1))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_INT_RX \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld (IWN_FH_INT_RX_CHNL(0) | IWN_FH_INT_RX_CHNL(1) | IWN_FH_INT_HI_PRIOR)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags/values for register IWN_FH_TX_CONFIG. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CONFIG_DMA_PAUSE 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CONFIG_DMA_ENA (1U << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CONFIG_CIRQ_HOST_ENDTFD (1U << 20)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags/values for register IWN_FH_TXBUF_STATUS. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TXBUF_STATUS_TBNUM(x) ((x) << 20)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TXBUF_STATUS_TBIDX(x) ((x) << 12)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TXBUF_STATUS_TFBD_VALID 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_FH_TX_CHICKEN. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CHICKEN_SCHED_RETRY (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_FH_TX_STATUS. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_STATUS_IDLE(chnl) (1 << ((chnl) + 16))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_FH_RX_CONFIG. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_ENA (1U << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_NRBD(x) ((x) << 20)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_RB_SIZE_8K (1U << 16)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_SINGLE_FRAME (1U << 15)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_IRQ_DST_HOST (1U << 12)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_RB_TIMEOUT(x) ((x) << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_RX_CONFIG_IGN_RXF_EMPTY (1U << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_FH_TX_CONFIG. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CONFIG_DMA_ENA (1U << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FH_TX_CONFIG_DMA_CREDIT_ENA (1U << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_EEPROM. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_READ_VALID (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CMD (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_EEPROM_GP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_GP_IF_OWNER 0x00000180
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_OTP_GP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_OTP_GP_DEV_SEL_OTP (1 << 16)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_OTP_GP_RELATIVE_ACCESS (1 << 17)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_OTP_GP_ECC_CORR_STTS (1 << 20)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_OTP_GP_ECC_UNCORR_STTS (1 << 21)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_SCHED_QUEUE_STATUS. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_TXQ_STATUS_ACTIVE 0x0007fc01
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_TXQ_STATUS_INACTIVE 0x0007fc00
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_TXQ_STATUS_AGGR_ENA (1 << 5 | 1 << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_TXQ_STATUS_CHGACT (1 << 10)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_TXQ_STATUS_ACTIVE 0x00ff0018
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_TXQ_STATUS_INACTIVE 0x00ff0010
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_TXQ_STATUS_CHGACT (1 << 19)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for registers IWN_APMG_CLK_*. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_CLK_CTRL_DMA_CLK_RQT (1 << 9)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_CLK_CTRL_BSM_CLK_RQT (1 << 11)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_APMG_PS. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS_EARLY_PWROFF_DIS (1 << 22)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS_PWR_SRC(x) ((x) << 24)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS_PWR_SRC_VMAIN 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS_PWR_SRC_VAUX 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS_PWR_SRC_MASK IWN_APMG_PS_PWR_SRC(3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PS_RESET_REQ (1 << 26)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_APMG_DIGITAL_SVR. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_DIGITAL_SVR_VOLTAGE(x) (((x) & 0xf) << 5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_DIGITAL_SVR_VOLTAGE_MASK \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_APMG_DIGITAL_SVR_VOLTAGE(0xf)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_DIGITAL_SVR_VOLTAGE_1_32 \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_APMG_DIGITAL_SVR_VOLTAGE(3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for IWN_APMG_PCI_STT. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_APMG_PCI_STT_L1A_DIS (1 << 11)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for register IWN_BSM_DRAM_TEXT_SIZE. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_UPDATED (1U << 31)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SCHED_WINSZ 64
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SCHED_LIMIT 64
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHED_COUNT 512
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHED_COUNT (IWN_TX_RING_COUNT + IWN_SCHED_WINSZ)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_SCHEDSZ (IWN4965_NTXQUEUES * IWN4965_SCHED_COUNT * 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_SCHEDSZ (IWN5000_NTXQUEUES * IWN5000_SCHED_COUNT * 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_tx_desc {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t nsegs;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t addr;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed segs[IWN_MAX_SCATTER];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* Pad to 128 bytes. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_status {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t closed_count;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t closed_rx_count;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t finished_count;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t finished_rx_count;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_desc {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UC_READY 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ADD_NODE_DONE 24
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_DONE 28
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_CALIBRATION_RESULT 102
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_CALIBRATION_DONE 103
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_START_SCAN 130
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_STOP_SCAN 132
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_STATISTICS 156
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BEACON_STATISTICS 157
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_STATE_CHANGED 161
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BEACON_MISSED 162
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_PHY 192
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MPDU_RX_DONE 193
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_DONE 195
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_COMPRESSED_BA 197
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t idx;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t qid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible RX status flags. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_NO_CRC_ERR (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_NO_OVFL_ERR (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Shortcut for the above. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_NOERROR (IWN_RX_NO_CRC_ERR | IWN_RX_NO_OVFL_ERR)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_MPDU_MIC_OK (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_CIPHER_MASK (7 << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_CIPHER_CCMP (2 << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_MPDU_DEC (1 << 11)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_DECRYPT_MASK (3 << 11)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RX_DECRYPT_OK (3 << 11)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_tx_cmd {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t code;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_RXON 16
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_RXON_ASSOC 17
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_EDCA_PARAMS 19
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_TIMING 20
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_ADD_NODE 24
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_TX_DATA 28
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_SET_LED 72
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_LINK_QUALITY 78
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_CMD_WIMAX_COEX 90
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_CMD_CALIB_CONFIG 101
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_SET_POWER_MODE 119
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_SCAN 128
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_TXPOWER_DBM 149
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_TXPOWER 151
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_CMD_TX_ANT_CONFIG 152
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_BT_COEX 155
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_GET_STATISTICS 156
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_SET_CRITICAL_TEMP 164
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_SET_SENSITIVITY 168
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_PHY_CALIB 176
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_BT_COEX_PRIO_TABLE 204
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CMD_BT_COEX_PROT 205
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t idx;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t qid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t data[136];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Antenna flags, used in various commands. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANT_A (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANT_B (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANT_C (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Shortcuts. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANT_AB (IWN_ANT_A | IWN_ANT_B)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANT_BC (IWN_ANT_B | IWN_ANT_C)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ANT_ABC (IWN_ANT_A | IWN_ANT_B | IWN_ANT_C)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_RXON. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rxon {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t myaddr[IEEE80211_ADDR_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t bssid[IEEE80211_ADDR_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t wlap[IEEE80211_ADDR_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved3;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t mode;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MODE_HOSTAP 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MODE_STA 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MODE_IBSS 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MODE_MONITOR 6
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t air;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t rxchain;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_DRIVER_FORCE (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_VALID(x) (((x) & IWN_ANT_ABC) << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_FORCE_SEL(x) (((x) & IWN_ANT_ABC) << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_FORCE_MIMO_SEL(x) (((x) & IWN_ANT_ABC) << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_IDLE_COUNT(x) ((x) << 10)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_MIMO_COUNT(x) ((x) << 12)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXCHAIN_MIMO_FORCE (1 << 14)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ofdm_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t cck_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t associd;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_24GHZ (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_CCK (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_AUTO (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_SHSLOT (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_SHPREAMBLE (1 << 5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_NODIVERSITY (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_ANTENNA_A (1 << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_ANTENNA_B (1 << 9)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_TSF (1 << 15)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RXON_CTS_TO_SELF (1 << 30)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t filter;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_PROMISC (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_CTL (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_MULTICAST (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_NODECRYPT (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_MC_NODECRYPT (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_BSS (1 << 5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FILTER_BEACON (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ht_single_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ht_dual_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* The following fields are for >=5000 Series only. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ht_triple_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved5;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t acquisition;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved6;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_RXONSZ (sizeof (struct iwn_rxon) - 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_RXONSZ (sizeof (struct iwn_rxon))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_ASSOCIATE. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_assoc {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t filter;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ofdm_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t cck_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_EDCA_PARAMS. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_edca_params {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EDCA_UPDATE (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EDCA_TXOP (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t cwmin;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t cwmax;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t aifsn;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t txoplimit;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed ac[WME_NUM_AC];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_TIMING. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_cmd_timing {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t tstamp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t bintval;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t atim;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t binitval;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t lintval;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_ADD_NODE. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_node_info {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t control;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_NODE_UPDATE (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t macaddr[IEEE80211_ADDR_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ID_BSS 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_ID_BROADCAST 15
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_ID_BROADCAST 31
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FLAG_SET_KEY (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FLAG_SET_DISABLE_TID (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FLAG_SET_TXRATE (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FLAG_SET_ADDBA (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FLAG_SET_DELBA (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved3;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t kflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KFLAG_CCMP (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KFLAG_MAP (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KFLAG_KID(kid) ((kid) << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KFLAG_INVALID (1 << 11)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KFLAG_GROUP (1 << 14)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tsc2; /* TKIP TSC2 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ttak[5];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t kid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved5;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t key[16];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* The following 3 fields are for 5000 Series only. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t tsc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rxmic[IEEE80211_TKIP_MICLEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t txmic[IEEE80211_TKIP_MICLEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t htflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_AMDPU_SIZE_FACTOR(x) ((x) << 19)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_AMDPU_DENSITY(x) ((x) << 23)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t disable_tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved6;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t addba_tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t delba_tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t addba_ssn;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved7;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn4965_node_info {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t control;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t macaddr[IEEE80211_ADDR_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved3;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t kflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tsc2; /* TKIP TSC2 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ttak[5];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t kid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved5;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t key[16];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t htflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t disable_tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved6;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t addba_tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t delba_tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t addba_ssn;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved7;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFLAG_CCK (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFLAG_ANT(x) ((x) << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_TX_DATA. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_cmd_data {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t lnext;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_NEED_PROTECTION (1 << 0) /* 5000 only */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_NEED_RTS (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_NEED_CTS (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_NEED_ACK (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_LINKQ (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_IMM_BA (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_FULL_TXOP (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_BT_DISABLE (1 << 12) /* bluetooth coexistence */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_AUTO_SEQ (1 << 13)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_MORE_FRAG (1 << 14)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_INSERT_TSTAMP (1 << 16)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_TX_NEED_PADDING (1 << 20)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t scratch;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t plcp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t xrflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t security;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CIPHER_WEP40 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CIPHER_CCMP 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CIPHER_TKIP 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CIPHER_WEP104 9
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t linkq;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t key[16];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t fnext;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved3;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t lifetime;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LIFETIME_INFINITE 0xffffffff
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t loaddr;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t hiaddr;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rts_ntries;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t data_ntries;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t txop;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_LINK_QUALITY. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MAX_TX_RETRIES 16
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_cmd_link_quality {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ctl;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t mimo;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t antmsk_1stream;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t antmsk_2stream;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ridx[WME_NUM_AC];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ampdu_limit;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ampdu_threshold;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ampdu_max;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t plcp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t xrflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed retry[IWN_MAX_TX_RETRIES];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved3;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_SET_LED. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_cmd_led {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t unit; /* multiplier (in usecs) */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t which;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LED_ACTIVITY 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LED_LINK 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t off;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t on;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN5000_CMD_WIMAX_COEX. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_wimax_coex {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_WIMAX_COEX_STA_TABLE_VALID (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_WIMAX_COEX_UNASSOC_WA_UNMASK (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_WIMAX_COEX_ASSOC_WA_UNMASK (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_WIMAX_COEX_ENABLE (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn5000_wimax_event {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t request;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t window;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed events[16];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for command IWN5000_CMD_CALIB_CONFIG. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_calib_elem {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t enable;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t start;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_CALIB_DC (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t send;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t apply;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_calib_status {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn5000_calib_elem once;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn5000_calib_elem perd;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_calib_config {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn5000_calib_status ucode;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn5000_calib_status driver;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_SET_POWER_MODE. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_pmgt_cmd {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PS_ALLOW_SLEEP (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PS_NOTIFY (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PS_SLEEP_OVER_DTIM (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PS_PCI_PMGT (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PS_FAST_PD (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t keepalive;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t debug;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rxtimeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t txtimeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t intval[5];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t beacons;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for command IWN_CMD_SCAN. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_scan_essid {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t data[IEEE80211_NWID_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_scan_hdr {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t scan_flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SCAN_PASSIVE2ACTIVE (1<<5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t nchan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t quiet_time;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t quiet_threshold;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t crc_threshold;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t rxchain;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_svc; /* background scans */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t pause_svc; /* background scans */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t filter;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* Followed by a struct iwn_cmd_data. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* Followed by an array of 20 structs iwn_scan_essid. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* Followed by probe request body. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* Followed by an array of ``nchan'' structs iwn_scan_chan. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_scan_chan {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CHAN_ACTIVE (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CHAN_NPBREQS(x) (((1 << (x)) - 1) << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rf_gain;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t dsp_gain;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t active; /* msecs */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t passive; /* msecs */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Maximum size of a scan command. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SCAN_MAXSZ 4092
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * For active scan, listen ACTIVE_DWELL_TIME (msec) on each channel after
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * sending probe req. This should be set long enough to hear probe responses
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * from more than one AP.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ACTIVE_DWELL_TIME_2GHZ (30) /* all times in msec */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ACTIVE_DWELL_TIME_5GHZ (20)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ACTIVE_DWELL_FACTOR_2GHZ (3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_ACTIVE_DWELL_FACTOR_5GHZ (2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * For passive scan, listen PASSIVE_DWELL_TIME (msec) on each channel.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Must be set longer than active dwell time.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * For the most reliable scan, set > AP beacon interval (typically 100msec).
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PASSIVE_DWELL_TIME_2GHZ (20) /* all times in msec */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PASSIVE_DWELL_TIME_5GHZ (10)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_PASSIVE_DWELL_BASE (100)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CHANNEL_TUNE_TIME (5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * If active scanning is requested but a certain channel is
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * marked passive, we can do active scanning if we detect
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * transmissions.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld *
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * There is an issue with some firmware versions that triggers
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * a sysassert on a "good CRC threshold" of zero (== disabled),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * on a radar channel even though this means that we should NOT
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * send probes.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld *
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * The "good CRC threshold" is the number of frames that we
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * need to receive during our dwell time on a channel before
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * sending out probes -- setting this to a huge value will
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * mean we never reach it, but at the same time work around
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * the aforementioned issue. Thus use IWN_GOOD_CRC_TH_NEVER
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * here instead of IWN_GOOD_CRC_TH_DISABLED.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld *
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * This was fixed in later versions along with some other
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * scan changes, and the threshold behaves as a flag in those
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * versions.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GOOD_CRC_TH_DISABLED 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GOOD_CRC_TH_DEFAULT htole16(1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_GOOD_CRC_TH_NEVER htole16(0xffff)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_TXPOWER (4965AGN only.) */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RIDX_MAX 32
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn4965_cmd_txpower {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t band;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rf_gain[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t dsp_gain[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed power[IWN_RIDX_MAX + 1];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_TXPOWER_DBM (5000 Series only.) */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_cmd_txpower {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t global_limit; /* in half-dBm */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_TXPOWER_AUTO 0x7f
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_TXPOWER_MAX_DBM 16
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_TXPOWER_NO_CLOSED (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t srv_limit; /* in half-dBm */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_BT_COEX. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_bluetooth {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_COEX_CHAN_ANN (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_COEX_BT_PRIO (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_COEX_2_WIRE (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_COEX_ENABLE (IWN_BT_COEX_CHAN_ANN | IWN_BT_COEX_BT_PRIO)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t lead_time;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_LEAD_TIME_DEF 30
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t max_kill;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_MAX_KILL_DEF 5
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t bt3_timer_t7_value;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BT3_T7_DEF 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t kill_ack_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_KILL_ACK_MASK_DEF htole32(0xffff0000)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t kill_cts_mask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_KILL_CTS_MASK_DEF htole32(0xffff0000)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_bt_basic {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_bluetooth bt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_CHAN_INHIBITION 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_MODE_MASK ((1 << 3) | (1 << 4) | (1 << 5))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_MODE_SHIFT 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_MODE_DISABLED 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_MODE_LEGACY_2W 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_MODE_3W 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BASIC_MODE_4W 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_UCODE_DEFAULT (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_SYNC_2_BT_DISABLE (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t bt3_prio_sample_time;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BT3_PRIO_SAMPLE_DEF 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t bt3_timer_t2_value;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_BT3_T2_DEF 12
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t bt4_reaction_time; /* unused */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bt3_lookup_table[12];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reduce_txpower; /* bit 0 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#if 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * The original code causes problems with lint. These declarations
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * could be fixed with lint tags, but the assignment to
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * reduce_txpower in iwn_config_bt_coex_adv_config() cannot.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * For reference it remains here but is ifdef'ed out.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld union {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reduce_txpower; /* bit 0 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld };
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t bt4_decision;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld };
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#endif
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t valid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_ENABLE_FLAGS htole16(1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_BOOST htole16(1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_MAX_KILL htole16(1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_3W_TIMERS htole16(1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_KILL_ACK_MASK htole16(1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_KILL_CTS_MASK htole16(1 << 5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_REDUCED_TX_PWR htole16(1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_VALID_3W_LUT htole16(1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_ALL_VALID_MASK (IWN_BT_VALID_ENABLE_FLAGS | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_BOOST | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_MAX_KILL | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_3W_TIMERS | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_KILL_ACK_MASK | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_KILL_CTS_MASK | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_REDUCED_TX_PWR | \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_BT_VALID_3W_LUT)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_bt_adv1 {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_bt_basic basic;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t prio_boost;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_PRIO_BOOST_DEF 0xf0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* set IWLAGN_BT_VALID_BOOST to "1" in "valid" bitmask for */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tx_prio_boost;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t rx_prio_boost;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_bt_adv2 {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_bt_basic basic;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t prio_boost;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BT_PRIO_BOOST_DEF32 0xf0f0f0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* set IWLAGN_BT_VALID_BOOST to "1" in "valid" bitmask for */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tx_prio_boost;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t rx_prio_boost;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_BT_COEX_PRIOTABLE */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_btcoex_priotable {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t calib_init1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t calib_init2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t calib_periodic_low1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t calib_periodic_low2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t calib_periodic_high1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t calib_periodic_high2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t dtim;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t scan52;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t scan24;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved[7];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_BT_COEX_PROT */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_btcoex_prot {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t open;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_SET_CRITICAL_TEMP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_critical_temp {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tempM;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tempR;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* degK <-> degC conversion macros. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CTOK(c) ((c) + 273)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_KTOC(k) ((k) - 273)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CTOMUK(c) (((c) * 1000000) + 273150000)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for command IWN_CMD_SET_SENSITIVITY. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_sensitivity_cmd {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t which;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SENSITIVITY_DEFAULTTBL 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SENSITIVITY_WORKTBL 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t energy_cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t energy_ofdm;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_mrc_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_cck_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_barker;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_barker_mrc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_cck_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t energy_ofdm_th;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_enhanced_sensitivity_cmd {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t which;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t energy_cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t energy_ofdm;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_mrc_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_cck_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_ofdm_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_barker;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_barker_mrc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_cck_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t energy_ofdm_th;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* "Enhanced" part. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ina_det_ofdm;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ina_det_cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t corr_11_9_en;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ofdm_det_slope_mrc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ofdm_det_icept_mrc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ofdm_det_slope;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ofdm_det_icept;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t cck_det_slope_mrc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t cck_det_icept_mrc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t cck_det_slope;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t cck_det_icept;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for command IWN_CMD_PHY_CALIB. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_phy_calib {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t code;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_PHY_CALIB_DIFF_GAIN 7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_DC 8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_LO 9
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_TX_IQ 11
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_CRYSTAL 15
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_BASE_BAND 16
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_TX_IQ_PERIODIC 17
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_RESET_NOISE_GAIN 18
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_NOISE_GAIN 19
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN6000_PHY_CALIB_TEMP_OFFSET 18
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN2000_PHY_CALIB_TEMP_OFFSET 18
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_PHY_CALIB_MAX 253
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t group;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ngroups;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t isvalid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_phy_calib_crystal {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t code;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t group;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ngroups;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t isvalid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t cap_pin[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn6000_phy_calib_temp_offset {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t code;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t group;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ngroups;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t isvalid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int16_t offset;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_DEFAULT_TEMP_OFFSET 2700
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn2000_phy_calib_temp_offset {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t code;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t group;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ngroups;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t isvalid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int16_t offset_high;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int16_t offset_low;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int16_t burnt_voltage_ref;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_phy_calib_gain {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t code;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t group;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ngroups;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t isvalid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t gain[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for command IWN_CMD_SPECTRUM_MEASUREMENT. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_spectrum_cmd {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t token;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t origin;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t periodic;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t start;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t filter;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t nchan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t duration;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_BASIC (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_CCA (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_RPI_HISTOGRAM (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_NOISE_HISTOGRAM (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_FRAME (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_IDLE (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed chan[10];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_UC_READY notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_NATTEN_GROUPS 5
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_ucode_info {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t minor;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t major;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t revision[8];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t subtype;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UCODE_RUNTIME 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_UCODE_INIT 9
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t logptr;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t errptr;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tstamp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t valid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* The following fields are for UCODE_INIT only. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int32_t volt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int32_t chan20MHz;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int32_t chan40MHz;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } __packed temp[4];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int32_t atten[IWN_NATTEN_GROUPS][2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for IWN_TX_DONE notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn4965_tx_stat {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t nframes;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t btkillcnt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rtsfailcnt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ackfailcnt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rate;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t xrflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t duration;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t power[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t status;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_tx_stat {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t nframes;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t btkillcnt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rtsfailcnt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ackfailcnt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rate;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t xrflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t duration;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t power[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t info;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t seq;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tlc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t ratid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t fc[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t status;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t sequence;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_BEACON_MISSED notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_beacon_missed {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t consecutive;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t total;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t expected;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t received;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_MPDU_RX_DONE notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_mpdu {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for IWN_RX_DONE and IWN_MPDU_RX_DONE notifications. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn4965_rx_phystat {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t antenna;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t agc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rssi[6];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_rx_phystat {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t agc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t rssi[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_stat {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t phy_len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t cfg_phy_len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_STAT_MAXLEN 20
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t tstamp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t beacon;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_STAT_FLAG_SHPREAMBLE (1 << 2)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t phybuf[32];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rate;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t xrflags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserve3;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RSSI_TO_DBM 44
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_RX_COMPRESSED_BA notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_compressed_ba {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t macaddr[IEEE80211_ADDR_LEN];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t tid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t seq;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t bitmap;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t qid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t ssn;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_START_SCAN notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_start_scan {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t tstamp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tbeacon;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t band;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t status;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_STOP_SCAN notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_stop_scan {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t nchan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t status;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t tsf;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structure for IWN_SPECTRUM_MEASUREMENT notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_spectrum_notif {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t token;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t idx;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t state;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_START 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_STOP 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t start;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t band;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cca_ofdm;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cca_cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cca_time;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t basic;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved2[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ofdm[8];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cck[8];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t stop;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t status;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_OK 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_CONCURRENT 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_CSA_CONFLICT 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_TGH_CONFLICT 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_STOPPED 6
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_TIMEOUT 7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MEASUREMENT_FAILED 8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Structures for IWN_{RX,BEACON}_STATISTICS notification. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_phy_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ina;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t fina;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_plcp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_crc32;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t overrun;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t eoverrun;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t good_crc32;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t fa;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_fina_sync;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t sfd_timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t fina_timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t no_rts_ack;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rxe_limit;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ack;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cts;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ba_resp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t dsp_kill;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_mh;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rssi_sum;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_general_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_cts;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_ack;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t not_bss;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t filtered;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t beacons;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t missed_beacons;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t adc_saturated; /* time in 0.8us */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ina_searched; /* time in 0.8us */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int32_t noise[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t load;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t fa;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rssi[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t energy[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_ht_phy_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_plcp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t overrun;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t eoverrun;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t good_crc32;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_crc32;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bad_mh;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t good_ampdu_crc32;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ampdu;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t fragment;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_rx_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_rx_phy_stats ofdm;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_rx_phy_stats cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_rx_general_stats general;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_rx_ht_phy_stats ht;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_tx_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t preamble;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rx_detected;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bt_defer;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bt_kill;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t short_len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cts_timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ack_timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t exp_ack;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ack;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t msdu;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t busrt_err1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t burst_err2;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t cts_collision;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ack_collision;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ba_timeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ba_resched;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t query_ampdu;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t query;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t query_ampdu_frag;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t query_mismatch;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t not_ready;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t underrun;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t bt_ht_kill;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rx_ba_resp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_general_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t temp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t temp_m;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t burst_check;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t burst;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved1[4];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t sleep;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t slot_out;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t slot_idle;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t ttl_tstamp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tx_ant_a;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tx_ant_b;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t exec;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t probe;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved2[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rx_enabled;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t reserved3[3];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_stats {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_rx_stats rx;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_tx_stats tx;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn_general_stats general;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Firmware error dump. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_fw_dump {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t valid;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t id;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t pc;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t branch_link[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t interrupt_link[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t error_data[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t src_line;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t tsf;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t time[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* TLV firmware header. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_fw_tlv_hdr {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t zero; /* Always 0, to differentiate from legacy. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t signature;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_SIGNATURE 0x0a4c5749 /* "IWL\n" */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t descr[64];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rev;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_API(x) (((x) >> 8) & 0xff)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t build;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint64_t altmask;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* TLV header. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_fw_tlv {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_MAIN_TEXT 1
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_MAIN_DATA 2
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_INIT_TEXT 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_INIT_DATA 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_BOOT_TEXT 5
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_PBREQ_MAXLEN 6
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_ENH_SENS 14
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_PHY_CALIB 15
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_TLV_FLAGS 18
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t alt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t len;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_FW_TEXT_MAXSZ ( 96 * 1024)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_FW_DATA_MAXSZ ( 40 * 1024)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_FW_TEXT_MAXSZ (256 * 1024)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_FW_DATA_MAXSZ ( 80 * 1024)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_FW_BOOT_TEXT_MAXSZ 1024
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_FWSZ (IWN4965_FW_TEXT_MAXSZ + IWN4965_FW_DATA_MAXSZ)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_FWSZ IWN5000_FW_TEXT_MAXSZ
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/**
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * enum iwn_ucode_tlv_flag - ucode API flags
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_PAN: This is PAN capable microcode; this previously
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * was a separate TLV but moved here to save space.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_NEWSCAN: new uCode scan behaviour on hidden SSID,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * treats good CRC threshold as a boolean
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_MFP: This uCode image supports MFP (802.11w).
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_P2P: This uCode image supports P2P.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_DW_BC_TABLE: The SCD byte count table is in DWORDS
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_UAPSD: This uCode image supports uAPSD
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_SHORT_BL: 16 entries of black list instead of 64 in scan
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * offload profile config command.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_RX_ENERGY_API: supports rx signal strength api
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_TIME_EVENT_API_V2: using the new time event API.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS: D3 image supports up to six
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * (rather than two) IPv6 addresses
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_BF_UPDATED: new beacon filtering API
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_NO_BASIC_SSID: not sending a probe with the SSID element
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * from the probe request template.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_D3_CONTINUITY_API: modified D3 API to allow keeping
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * connection when going back to D0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL: new NS offload (small version)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE: new NS offload (large version)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_SCHED_SCAN: this uCode image supports scheduled scan.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_STA_KEY_CMD: new ADD_STA and ADD_STA_KEY command API
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * @IWN_UCODE_TLV_FLAGS_DEVICE_PS_CMD: support device wide power command
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * containing CAM (Continuous Active Mode) indication.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldenum iwn_ucode_tlv_flag {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_PAN = (1 << 0),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_NEWSCAN = (1 << 1),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_MFP = (1 << 2),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_P2P = (1 << 3),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_DW_BC_TABLE = (1 << 4),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_NEWBT_COEX = (1 << 5),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_UAPSD = (1 << 6),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_SHORT_BL = (1 << 7),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_RX_ENERGY_API = (1 << 8),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_TIME_EVENT_API_V2 = (1 << 9),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_D3_6_IPV6_ADDRS = (1 << 10),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_BF_UPDATED = (1 << 11),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_NO_BASIC_SSID = (1 << 12),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_D3_CONTINUITY_API = (1 << 14),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_NEW_NSOFFL_SMALL = (1 << 15),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_NEW_NSOFFL_LARGE = (1 << 16),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_SCHED_SCAN = (1 << 17),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_STA_KEY_CMD = (1 << 19),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_UCODE_TLV_FLAGS_DEVICE_PS_CMD = (1 << 20),
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Offsets into EEPROM.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_MAC 0x015
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_SKU_CAP 0x045
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_RFCFG 0x048
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_DOMAIN 0x060
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND1 0x063
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_REG 0x066
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_CAL 0x067
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND2 0x072
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND3 0x080
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND4 0x08d
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND5 0x099
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND6 0x0a0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BAND7 0x0a8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_MAXPOW 0x0e8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_VOLTAGE 0x0e9
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_EEPROM_BANDS 0x0ea
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Indirect offsets. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_DOMAIN 0x001
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND1 0x004
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND2 0x013
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND3 0x021
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND4 0x02e
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND5 0x03a
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND6 0x041
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_BAND7 0x049
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN6000_EEPROM_ENHINFO 0x054
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_CRYSTAL 0x128
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_TEMP 0x12a
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN5000_EEPROM_VOLT 0x12b
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN2000_EEPROM_RAWTEMP 0x12b
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for IWN_EEPROM_SKU_CAP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_SKU_CAP_11N (1 << 6)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_SKU_CAP_AMT (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_SKU_CAP_IPAN (1 << 8)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Possible flags for IWN_EEPROM_RFCFG. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFCFG_TYPE(x) (((x) >> 0) & 0x3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFCFG_STEP(x) (((x) >> 2) & 0x3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFCFG_DASH(x) (((x) >> 4) & 0x3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFCFG_TXANTMSK(x) (((x) >> 8) & 0xf)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RFCFG_RXANTMSK(x) (((x) >> 12) & 0xf)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_eeprom_chan {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CHAN_VALID (1 << 0)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CHAN_IBSS (1 << 1)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CHAN_ACTIVE (1 << 3)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CHAN_RADAR (1 << 4)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CHAN_WIDE (1 << 5)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_EEPROM_CHAN_DFS (1 << 7)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t maxpwr;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_eeprom_enhinfo {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t chan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t chain[3]; /* max power in half-dBm */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t reserved;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t mimo2; /* max power in half-dBm */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t mimo3; /* max power in half-dBm */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn5000_eeprom_calib_hdr {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t version;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t pa_type;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint16_t volt;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_NSAMPLES 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn4965_eeprom_chan_samples {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t num;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t temp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t gain;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t power;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int8_t pa_det;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld } samples[2][IWN_NSAMPLES];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_NBANDS 8
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn4965_eeprom_band {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t lo; /* low channel number */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t hi; /* high channel number */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld struct iwn4965_eeprom_chan_samples chans[2];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} __packed;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Offsets of channels descriptions in EEPROM.
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint32_t iwn4965_regulatory_bands[IWN_NBANDS] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND1,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND2,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND3,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND4,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND5,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND6,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN4965_EEPROM_BAND7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint32_t iwn5000_regulatory_bands[IWN_NBANDS] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND1,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND2,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND3,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND4,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND5,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND6,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN5000_EEPROM_BAND7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CHAN_BANDS_COUNT 7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_MAX_CHAN_PER_BAND 14
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_chan_band {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t nchan;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t chan[IWN_MAX_CHAN_PER_BAND];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} iwn_bands[] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* 20MHz channels, 2GHz band. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 14, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 } },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* 20MHz channels, 5GHz band. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 13, { 183, 184, 185, 187, 188, 189, 192, 196, 7, 8, 11, 12, 16 } },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 12, { 34, 36, 38, 40, 42, 44, 46, 48, 52, 56, 60, 64 } },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 11, { 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140 } },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 6, { 145, 149, 153, 157, 161, 165 } },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* 40MHz channels (primary channels), 2GHz band. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 7, { 1, 2, 3, 4, 5, 6, 7 } },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* 40MHz channels (primary channels), 5GHz band. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 11, { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157 } }
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN1000_OTP_NBLOCKS 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN6000_OTP_NBLOCKS 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN6050_OTP_NBLOCKS 7
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* HW rate indices. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RIDX_CCK1 0
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_RIDX_OFDM6 4
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_rate {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t rate;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t plcp;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint8_t flags;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} iwn_rates[IWN_RIDX_MAX + 1] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 2, 10, IWN_RFLAG_CCK },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 4, 20, IWN_RFLAG_CCK },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 11, 55, IWN_RFLAG_CCK },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 22, 110, IWN_RFLAG_CCK },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 12, 0xd, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 18, 0xf, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 24, 0x5, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 36, 0x7, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 48, 0x9, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 72, 0xb, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 96, 0x1, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 108, 0x3, 0 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 120, 0x3, 0 }
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN4965_MAX_PWR_INDEX 107
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * RF Tx gain values from highest to lowest power (values obtained from
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * the reference driver.)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint8_t iwn4965_rf_gain_2ghz[IWN4965_MAX_PWR_INDEX + 1] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x3f, 0x3f, 0x3f, 0x3e, 0x3e, 0x3e, 0x3d, 0x3d, 0x3d, 0x3c, 0x3c,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x3c, 0x3b, 0x3b, 0x3b, 0x3a, 0x3a, 0x3a, 0x39, 0x39, 0x39, 0x38,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x35, 0x35, 0x35,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x34, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32, 0x31, 0x31,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x31, 0x30, 0x30, 0x30, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x04, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint8_t iwn4965_rf_gain_5ghz[IWN4965_MAX_PWR_INDEX + 1] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3e, 0x3e, 0x3e, 0x3d, 0x3d, 0x3d,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x3c, 0x3c, 0x3c, 0x3b, 0x3b, 0x3b, 0x3a, 0x3a, 0x3a, 0x39, 0x39,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x39, 0x38, 0x38, 0x38, 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x35,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x35, 0x35, 0x34, 0x34, 0x34, 0x33, 0x33, 0x33, 0x32, 0x32, 0x32,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x31, 0x31, 0x31, 0x30, 0x30, 0x30, 0x25, 0x25, 0x25, 0x24, 0x24,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x24, 0x23, 0x23, 0x23, 0x22, 0x18, 0x18, 0x17, 0x17, 0x17, 0x16,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x16, 0x16, 0x15, 0x15, 0x15, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x12, 0x08, 0x08, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x05, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * DSP pre-DAC gain values from highest to lowest power (values obtained
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * from the reference driver.)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint8_t iwn4965_dsp_gain_2ghz[IWN4965_MAX_PWR_INDEX + 1] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x6e, 0x68, 0x62, 0x61, 0x60, 0x5f, 0x5e, 0x5d, 0x5c, 0x5b, 0x5a,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x59, 0x58, 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4f,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x4e, 0x4d, 0x4c, 0x4b, 0x4a, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x43, 0x42, 0x41, 0x40, 0x3f, 0x3e, 0x3d, 0x3c, 0x3b
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint8_t iwn4965_dsp_gain_5ghz[IWN4965_MAX_PWR_INDEX + 1] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x7b, 0x75, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e, 0x68, 0x62, 0x6e,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 0x68, 0x62, 0x6e, 0x68, 0x62, 0x5d, 0x58, 0x53, 0x4e
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * Power saving settings (values obtained from the reference driver.)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_NDTIMRANGES 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_NPOWERLEVELS 6
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_pmgt {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t rxtimeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t txtimeout;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int32_t intval[5];
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld int skip_dtim;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld} iwn_pmgt[IWN_NDTIMRANGES][IWN_NPOWERLEVELS] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* DTIM <= 2 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0, 0, { 0, 0, 0, 0, 0 }, 0 }, /* CAM */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 200, 500, { 1, 2, 2, 2, -1 }, 0 }, /* PS level 1 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 200, 300, { 1, 2, 2, 2, -1 }, 0 }, /* PS level 2 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 50, 100, { 2, 2, 2, 2, -1 }, 0 }, /* PS level 3 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 50, 25, { 2, 2, 4, 4, -1 }, 1 }, /* PS level 4 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 25, 25, { 2, 2, 4, 6, -1 }, 2 } /* PS level 5 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* 3 <= DTIM <= 10 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0, 0, { 0, 0, 0, 0, 0 }, 0 }, /* CAM */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 200, 500, { 1, 2, 3, 4, 4 }, 0 }, /* PS level 1 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 200, 300, { 1, 2, 3, 4, 7 }, 0 }, /* PS level 2 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 50, 100, { 2, 4, 6, 7, 9 }, 0 }, /* PS level 3 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 50, 25, { 2, 4, 6, 9, 10 }, 1 }, /* PS level 4 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 25, 25, { 2, 4, 7, 10, 10 }, 2 } /* PS level 5 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld /* DTIM >= 11 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0, 0, { 0, 0, 0, 0, 0 }, 0 }, /* CAM */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 200, 500, { 1, 2, 3, 4, -1 }, 0 }, /* PS level 1 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 200, 300, { 2, 4, 6, 7, -1 }, 0 }, /* PS level 2 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 50, 100, { 2, 7, 9, 9, -1 }, 0 }, /* PS level 3 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 50, 25, { 2, 7, 9, 9, -1 }, 0 }, /* PS level 4 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 25, 25, { 4, 7, 10, 10, -1 }, 0 } /* PS level 5 */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld }
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstruct iwn_sensitivity_limits {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_ofdm_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_ofdm_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_ofdm_mrc_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_ofdm_mrc_x1;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_ofdm_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_ofdm_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_ofdm_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_ofdm_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_cck_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_cck_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_cck_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t max_cck_mrc_x4;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t min_energy_cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t energy_cck;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld uint32_t energy_ofdm;
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/*
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld * RX sensitivity limits (values obtained from the reference driver.)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_sensitivity_limits iwn4965_sensitivity_limits = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 105, 140,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 220, 270,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 85, 120,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 210,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 125, 200,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 200, 400,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 97,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 100,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 100
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_sensitivity_limits iwn5000_sensitivity_limits = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 120, 120, /* min = max for performance bug in DSP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 240, 240, /* min = max for performance bug in DSP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 90, 120,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 210,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 125, 200,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 400,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_sensitivity_limits iwn5150_sensitivity_limits = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 105, 105, /* min = max for performance bug in DSP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 220, 220, /* min = max for performance bug in DSP. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 90, 120,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 210,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 125, 200,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 400,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_sensitivity_limits iwn1000_sensitivity_limits = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 120, 155,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 240, 290,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 90, 120,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 210,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 125, 200,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 170, 400,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 95
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_sensitivity_limits iwn6000_sensitivity_limits = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 105, 110,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 192, 232,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 80, 145,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 128, 232,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 125, 175,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 160, 310,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 97,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 97,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 100
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn_sensitivity_limits iwn2000_sensitivity_limits = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 105, 110,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 192, 232,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 80, 145,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 128, 232,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 125, 175,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 160, 310,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 97,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 97,
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 100
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#ifndef IEEE80211_NO_HT
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Map TID to TX scheduler's FIFO. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const uint8_t iwn_tid2fifo[] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld 1, 0, 0, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 3
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#endif
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#ifdef notyet
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* WiFi/WiMAX coexist event priority table for 6050. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const struct iwn5000_wimax_event iwn6050_wimax_events[] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x03 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x03 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x03 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x07 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x03 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x03 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x06, 0x03, 0x00, 0x07 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x06, 0x06, 0x00, 0x03 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x07 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 },
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld { 0x04, 0x03, 0x00, 0x00 }
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#endif
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Firmware errors. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeldstatic const char * const iwn_fw_errmsg[] = {
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "OK",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "FAIL",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "BAD_PARAM",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "BAD_CHECKSUM",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_WDG",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "SYSASSERT",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "FATAL_ERROR",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "BAD_COMMAND",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "HW_ERROR_TUNE_LOCK",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "HW_ERROR_TEMPERATURE",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "ILLEGAL_CHAN_FREQ",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "VCC_NOT_STABLE",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "FH_ERROR",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_HOST",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_ACTION_PT",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_UNKNOWN",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "UCODE_VERSION_MISMATCH",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "HW_ERROR_ABS_LOCK",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "HW_ERROR_CAL_LOCK_FAIL",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_INST_ACTION_PT",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_DATA_ACTION_PT",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_TRM_HW_ER",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_TRM",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "NMI_INTERRUPT_BREAKPOINT"
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "DEBUG_0",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "DEBUG_1",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "DEBUG_2",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "DEBUG_3",
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld "ADVANCED_SYSASSERT"
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld};
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld/* Find least significant bit that is set. */
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_LSB(x) ((((x) - 1) & (x)) ^ (x))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_READ(sc, reg) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld iwn_read(sc, reg)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_WRITE(sc, reg, val) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld iwn_write(sc, reg, val)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_WRITE_1(sc, reg, val) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld iwn_write_1(sc, reg, val)
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_SETBITS(sc, reg, mask) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_WRITE(sc, reg, IWN_READ(sc, reg) | (mask))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_CLRBITS(sc, reg, mask) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld IWN_WRITE(sc, reg, IWN_READ(sc, reg) & ~(mask))
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BARRIER_WRITE(sc) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld membar_producer()
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#define IWN_BARRIER_READ_WRITE(sc) \
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld (membar_producer(), membar_consumer())
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld
fd43cf6ea90d0f421f98ca45675340de695681acHans Rosenfeld#endif /* _IF_IWNREG_H */