Home | History | Annotate | Line # | Download | only in pci
if_wpireg.h revision 1.2
      1  1.2   joerg /*  $NetBSD: if_wpireg.h,v 1.2 2006/10/31 21:53:41 joerg Exp $    */
      2  1.1  simonb 
      3  1.1  simonb /*-
      4  1.1  simonb  * Copyright (c) 2006
      5  1.1  simonb  *	Damien Bergamini <damien.bergamini (at) free.fr>
      6  1.1  simonb  *
      7  1.1  simonb  * Permission to use, copy, modify, and distribute this software for any
      8  1.1  simonb  * purpose with or without fee is hereby granted, provided that the above
      9  1.1  simonb  * copyright notice and this permission notice appear in all copies.
     10  1.1  simonb  *
     11  1.1  simonb  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     12  1.1  simonb  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     13  1.1  simonb  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     14  1.1  simonb  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     15  1.1  simonb  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     16  1.1  simonb  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     17  1.1  simonb  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     18  1.1  simonb  */
     19  1.1  simonb 
     20  1.1  simonb #define WPI_TX_RING_COUNT	256
     21  1.1  simonb #define WPI_SVC_RING_COUNT	256
     22  1.1  simonb #define WPI_CMD_RING_COUNT	256
     23  1.1  simonb #define WPI_RX_RING_COUNT	64
     24  1.1  simonb 
     25  1.1  simonb /*
     26  1.1  simonb  * Rings must be aligned on a four 4K-pages boundary.
     27  1.1  simonb  * I had a hard time figuring this out.
     28  1.1  simonb  */
     29  1.1  simonb #define WPI_RING_DMA_ALIGN	0x4000
     30  1.1  simonb 
     31  1.1  simonb /* maximum scatter/gather */
     32  1.1  simonb #define WPI_MAX_SCATTER	4
     33  1.1  simonb 
     34  1.1  simonb /*
     35  1.1  simonb  * Control and status registers.
     36  1.1  simonb  */
     37  1.1  simonb #define WPI_HWCONFIG		0x000
     38  1.1  simonb #define WPI_INTR		0x008
     39  1.1  simonb #define WPI_MASK		0x00c
     40  1.1  simonb #define WPI_INTR_STATUS		0x010
     41  1.1  simonb #define WPI_GPIO_STATUS		0x018
     42  1.1  simonb #define WPI_RESET		0x020
     43  1.1  simonb #define WPI_GPIO_CTL		0x024
     44  1.1  simonb #define WPI_EEPROM_CTL		0x02c
     45  1.1  simonb #define WPI_EEPROM_STATUS	0x030
     46  1.1  simonb #define WPI_UCODE_CLR		0x05c
     47  1.1  simonb #define WPI_TEMPERATURE		0x060
     48  1.1  simonb #define WPI_CHICKEN		0x100
     49  1.1  simonb #define WPI_PLL_CTL		0x20c
     50  1.1  simonb #define WPI_FW_TARGET		0x410
     51  1.1  simonb #define WPI_WRITE_MEM_ADDR  	0x444
     52  1.1  simonb #define WPI_READ_MEM_ADDR   	0x448
     53  1.1  simonb #define WPI_WRITE_MEM_DATA  	0x44c
     54  1.1  simonb #define WPI_READ_MEM_DATA   	0x450
     55  1.1  simonb #define WPI_TX_WIDX		0x460
     56  1.1  simonb #define WPI_TX_CTL(qid)		(0x940 + (qid) * 8)
     57  1.1  simonb #define WPI_TX_BASE(qid)	(0x944 + (qid) * 8)
     58  1.1  simonb #define WPI_TX_DESC(qid)	(0x980 + (qid) * 80)
     59  1.1  simonb #define WPI_RX_CONFIG		0xc00
     60  1.1  simonb #define WPI_RX_BASE		0xc04
     61  1.1  simonb #define WPI_RX_WIDX		0xc20
     62  1.1  simonb #define WPI_RX_RIDX_PTR		0xc24
     63  1.1  simonb #define WPI_RX_CTL		0xcc0
     64  1.1  simonb #define WPI_RX_STATUS		0xcc4
     65  1.1  simonb #define WPI_TX_CONFIG(qid)	(0xd00 + (qid) * 32)
     66  1.1  simonb #define WPI_TX_CREDIT(qid)	(0xd04 + (qid) * 32)
     67  1.1  simonb #define WPI_TX_STATE(qid)	(0xd08 + (qid) * 32)
     68  1.1  simonb #define WPI_TX_BASE_PTR		0xe80
     69  1.1  simonb #define WPI_MSG_CONFIG		0xe88
     70  1.1  simonb #define WPI_TX_STATUS		0xe90
     71  1.1  simonb 
     72  1.1  simonb 
     73  1.1  simonb /*
     74  1.1  simonb  * NIC internal memory offsets.
     75  1.1  simonb  */
     76  1.1  simonb #define WPI_MEM_MODE		0x2e00
     77  1.1  simonb #define WPI_MEM_RA		0x2e04
     78  1.1  simonb #define WPI_MEM_TXCFG		0x2e10
     79  1.1  simonb #define WPI_MEM_MAGIC4		0x2e14
     80  1.1  simonb #define WPI_MEM_MAGIC5		0x2e20
     81  1.1  simonb #define WPI_MEM_BYPASS1		0x2e2c
     82  1.1  simonb #define WPI_MEM_BYPASS2		0x2e30
     83  1.1  simonb #define WPI_MEM_CLOCK1		0x3004
     84  1.1  simonb #define WPI_MEM_CLOCK2		0x3008
     85  1.1  simonb #define WPI_MEM_POWER		0x300c
     86  1.1  simonb #define WPI_MEM_PCIDEV		0x3010
     87  1.1  simonb #define WPI_MEM_UCODE_CTL	0x3400
     88  1.1  simonb #define WPI_MEM_UCODE_SRC	0x3404
     89  1.1  simonb #define WPI_MEM_UCODE_DST	0x3408
     90  1.1  simonb #define WPI_MEM_UCODE_SIZE	0x340c
     91  1.1  simonb #define WPI_MEM_UCODE_BASE	0x3800
     92  1.1  simonb 
     93  1.1  simonb 
     94  1.1  simonb /* possible flags for register WPI_HWCONFIG */
     95  1.1  simonb #define WPI_HW_ALM_MB	(1 << 8)
     96  1.1  simonb #define WPI_HW_ALM_MM	(1 << 9)
     97  1.1  simonb #define WPI_HW_SKU_MRC	(1 << 10)
     98  1.1  simonb #define WPI_HW_REV_D	(1 << 11)
     99  1.1  simonb #define WPI_HW_TYPE_B	(1 << 12)
    100  1.1  simonb 
    101  1.1  simonb /* possible flags for registers WPI_READ_MEM_ADDR/WPI_WRITE_MEM_ADDR */
    102  1.1  simonb #define WPI_MEM_4	((sizeof (uint32_t) - 1) << 24)
    103  1.1  simonb 
    104  1.1  simonb /* possible values for WPI_FW_TARGET */
    105  1.1  simonb #define WPI_FW_TEXT	0x00000000
    106  1.1  simonb #define WPI_FW_DATA	0x00800000
    107  1.1  simonb 
    108  1.1  simonb /* possible flags for WPI_GPIO_STATUS */
    109  1.1  simonb #define WPI_POWERED		(1 << 9)
    110  1.1  simonb 
    111  1.1  simonb /* possible flags for register WPI_RESET */
    112  1.1  simonb #define WPI_NEVO_RESET		(1 << 0)
    113  1.1  simonb #define WPI_SW_RESET		(1 << 7)
    114  1.1  simonb #define WPI_MASTER_DISABLED	(1 << 8)
    115  1.1  simonb #define WPI_STOP_MASTER		(1 << 9)
    116  1.1  simonb 
    117  1.1  simonb /* possible flags for register WPI_GPIO_CTL */
    118  1.1  simonb #define WPI_GPIO_CLOCK		(1 << 0)
    119  1.1  simonb #define WPI_GPIO_INIT		(1 << 2)
    120  1.1  simonb #define WPI_GPIO_MAC		(1 << 3)
    121  1.1  simonb #define WPI_GPIO_SLEEP		(1 << 4)
    122  1.1  simonb #define WPI_GPIO_PWR_STATUS	0x07000000
    123  1.1  simonb #define WPI_GPIO_PWR_SLEEP	(4 << 24)
    124  1.1  simonb 
    125  1.1  simonb /* possible flags for register WPI_CHICKEN */
    126  1.1  simonb #define WPI_CHICKEN_RXNOLOS	(1 << 23)
    127  1.1  simonb 
    128  1.1  simonb /* possible flags for register WPI_PLL_CTL */
    129  1.1  simonb #define WPI_PLL_INIT		(1 << 24)
    130  1.1  simonb 
    131  1.1  simonb /* possible flags for register WPI_UCODE_CLR */
    132  1.1  simonb #define WPI_RADIO_OFF		(1 << 1)
    133  1.1  simonb #define WPI_DISABLE_CMD		(1 << 2)
    134  1.1  simonb 
    135  1.1  simonb /* possible flags for WPI_RX_STATUS */
    136  1.1  simonb #define	WPI_RX_IDLE	(1 << 24)
    137  1.1  simonb 
    138  1.1  simonb /* possible flags for register WPI_UC_CTL */
    139  1.1  simonb #define WPI_UC_RUN	(1 << 30)
    140  1.1  simonb 
    141  1.1  simonb /* possible flags for register WPI_INTR_CSR */
    142  1.1  simonb #define WPI_ALIVE_INTR	(1 << 0)
    143  1.1  simonb #define WPI_WAKEUP_INTR	(1 << 1)
    144  1.1  simonb #define WPI_SW_ERROR	(1 << 25)
    145  1.1  simonb #define WPI_TX_INTR	(1 << 27)
    146  1.1  simonb #define WPI_HW_ERROR	(1 << 29)
    147  1.1  simonb #define WPI_RX_INTR	(1 << 31)
    148  1.1  simonb 
    149  1.1  simonb #define WPI_INTR_MASK							\
    150  1.1  simonb 	(WPI_SW_ERROR | WPI_HW_ERROR | WPI_TX_INTR | WPI_RX_INTR |	\
    151  1.1  simonb 	 WPI_ALIVE_INTR | WPI_WAKEUP_INTR)
    152  1.1  simonb 
    153  1.1  simonb /* possible flags for register WPI_TX_STATUS */
    154  1.1  simonb #define WPI_TX_IDLE(qid)	(1 << ((qid) + 24) | 1 << ((qid) + 16))
    155  1.1  simonb 
    156  1.1  simonb /* possible flags for register WPI_EEPROM_CTL */
    157  1.1  simonb #define WPI_EEPROM_READY	(1 << 0)
    158  1.1  simonb 
    159  1.1  simonb /* possible flags for register WPI_EEPROM_STATUS */
    160  1.1  simonb #define WPI_EEPROM_VERSION	0x00000007
    161  1.1  simonb #define WPI_EEPROM_LOCKED	0x00000180
    162  1.1  simonb 
    163  1.1  simonb 
    164  1.1  simonb struct wpi_shared {
    165  1.1  simonb 	uint32_t	txbase[8];
    166  1.1  simonb 	uint32_t	next;
    167  1.1  simonb 	uint32_t	reserved[2];
    168  1.1  simonb } __attribute__((__packed__));
    169  1.1  simonb 
    170  1.1  simonb #define WPI_MAX_SEG_LEN	65520
    171  1.1  simonb struct wpi_tx_desc {
    172  1.1  simonb 	uint32_t	flags;
    173  1.1  simonb #define WPI_PAD32(x)	((((x) + 3) & ~3) - (x))
    174  1.1  simonb 
    175  1.1  simonb 	struct {
    176  1.1  simonb 		uint32_t	addr;
    177  1.1  simonb 		uint32_t	len;
    178  1.1  simonb 	} __attribute__((__packed__))	segs[WPI_MAX_SCATTER];
    179  1.1  simonb 	uint8_t		reserved[28];
    180  1.1  simonb } __attribute__((__packed__));
    181  1.1  simonb 
    182  1.1  simonb struct wpi_tx_stat {
    183  1.1  simonb 	uint8_t		nrts;
    184  1.1  simonb 	uint8_t		ntries;
    185  1.1  simonb 	uint8_t		nkill;
    186  1.1  simonb 	uint8_t		rate;
    187  1.1  simonb 	uint32_t	duration;
    188  1.1  simonb 	uint32_t	status;
    189  1.1  simonb } __attribute__((__packed__));
    190  1.1  simonb 
    191  1.1  simonb struct wpi_rx_desc {
    192  1.1  simonb 	uint32_t	len;
    193  1.1  simonb 	uint8_t		type;
    194  1.1  simonb #define WPI_UC_READY		  1
    195  1.1  simonb #define WPI_RX_DONE		 27
    196  1.1  simonb #define WPI_TX_DONE		 28
    197  1.1  simonb #define WPI_START_SCAN		130
    198  1.1  simonb #define WPI_STOP_SCAN		132
    199  1.1  simonb #define WPI_STATE_CHANGED	161
    200  1.1  simonb 
    201  1.1  simonb 	uint8_t		flags;
    202  1.1  simonb 	uint8_t		idx;
    203  1.1  simonb 	uint8_t		qid;
    204  1.1  simonb } __attribute__((__packed__));
    205  1.1  simonb 
    206  1.1  simonb struct wpi_rx_stat {
    207  1.1  simonb 	uint8_t		len;
    208  1.1  simonb #define WPI_STAT_MAXLEN	20
    209  1.1  simonb 
    210  1.1  simonb 	uint8_t		id;
    211  1.1  simonb 	uint8_t		rssi;	/* received signal strength */
    212  1.1  simonb #define WPI_RSSI_OFFSET	95
    213  1.1  simonb 
    214  1.1  simonb 	uint8_t		agc;	/* access gain control */
    215  1.1  simonb 	uint16_t	signal;
    216  1.1  simonb 	uint16_t	noise;
    217  1.1  simonb } __attribute__((__packed__));
    218  1.1  simonb 
    219  1.1  simonb struct wpi_rx_head {
    220  1.1  simonb 	uint16_t	chan;
    221  1.1  simonb 	uint16_t	flags;
    222  1.1  simonb 	uint8_t		reserved;
    223  1.1  simonb 	uint8_t		rate;
    224  1.1  simonb 	uint16_t	len;
    225  1.1  simonb } __attribute__((__packed__));
    226  1.1  simonb 
    227  1.1  simonb struct wpi_rx_tail {
    228  1.1  simonb 	uint32_t	flags;
    229  1.1  simonb #define WPI_RX_NO_CRC_ERR	(1 << 0)
    230  1.1  simonb #define WPI_RX_NO_OVFL_ERR	(1 << 1)
    231  1.1  simonb /* shortcut for the above */
    232  1.1  simonb #define WPI_RX_NOERROR		(WPI_RX_NO_CRC_ERR | WPI_RX_NO_OVFL_ERR)
    233  1.1  simonb 
    234  1.1  simonb 	uint64_t	tstamp;
    235  1.1  simonb 	uint32_t	tbeacon;
    236  1.1  simonb } __attribute__((__packed__));
    237  1.1  simonb 
    238  1.1  simonb struct wpi_tx_cmd {
    239  1.1  simonb 	uint8_t	code;
    240  1.1  simonb #define WPI_CMD_CONFIGURE	 16
    241  1.1  simonb #define WPI_CMD_ASSOCIATE	 17
    242  1.1  simonb #define WPI_CMD_SET_WME          19
    243  1.1  simonb #define WPI_CMD_TSF		 20
    244  1.1  simonb #define WPI_CMD_ADD_NODE	 24
    245  1.1  simonb #define WPI_CMD_TX_DATA		 28
    246  1.1  simonb #define WPI_CMD_MRR_SETUP	 71
    247  1.1  simonb #define WPI_CMD_SET_LED		 72
    248  1.1  simonb #define WPI_CMD_SET_POWER_MODE	119
    249  1.1  simonb #define WPI_CMD_SCAN		128
    250  1.1  simonb #define WPI_CMD_SET_BEACON	145
    251  1.1  simonb #define WPI_CMD_BLUETOOTH	155
    252  1.1  simonb #define WPI_CMD_TXPOWER		176
    253  1.1  simonb 
    254  1.1  simonb 	uint8_t	flags;
    255  1.1  simonb 	uint8_t	idx;
    256  1.1  simonb 	uint8_t	qid;
    257  1.1  simonb 	uint8_t	data[124];
    258  1.1  simonb } __attribute__((__packed__));
    259  1.1  simonb 
    260  1.1  simonb /* structure for WPI_CMD_CONFIGURE */
    261  1.1  simonb struct wpi_config {
    262  1.1  simonb 	uint8_t		myaddr[IEEE80211_ADDR_LEN];
    263  1.1  simonb 	uint16_t	reserved1;
    264  1.1  simonb 	uint8_t		bssid[IEEE80211_ADDR_LEN];
    265  1.1  simonb 	uint16_t	reserved2;
    266  1.1  simonb 	uint32_t	reserved3[2];
    267  1.1  simonb 	uint8_t		mode;
    268  1.1  simonb #define WPI_MODE_HOSTAP		1
    269  1.1  simonb #define WPI_MODE_STA		3
    270  1.1  simonb #define WPI_MODE_IBSS		4
    271  1.1  simonb #define WPI_MODE_MONITOR	6
    272  1.1  simonb 
    273  1.1  simonb 	uint8_t		reserved4[3];
    274  1.1  simonb 	uint8_t		ofdm_mask;
    275  1.1  simonb 	uint8_t		cck_mask;
    276  1.1  simonb 	uint16_t	state;
    277  1.1  simonb #define WPI_STATE_ASSOCIATED	4
    278  1.1  simonb 
    279  1.1  simonb 	uint32_t	flags;
    280  1.1  simonb #define WPI_CONFIG_24GHZ	(1 << 0)
    281  1.1  simonb #define WPI_CONFIG_CCK		(1 << 1)
    282  1.1  simonb #define WPI_CONFIG_AUTO		(1 << 2)
    283  1.1  simonb #define WPI_CONFIG_SHSLOT	(1 << 4)
    284  1.1  simonb #define WPI_CONFIG_SHPREAMBLE	(1 << 5)
    285  1.1  simonb #define WPI_CONFIG_NODIVERSITY	(1 << 7)
    286  1.1  simonb #define WPI_CONFIG_ANTENNA_A	(1 << 8)
    287  1.1  simonb #define WPI_CONFIG_ANTENNA_B	(1 << 9)
    288  1.1  simonb #define WPI_CONFIG_TSF		(1 << 15)
    289  1.1  simonb 
    290  1.1  simonb 	uint32_t	filter;
    291  1.1  simonb #define WPI_FILTER_PROMISC	(1 << 0)
    292  1.1  simonb #define WPI_FILTER_CTL		(1 << 1)
    293  1.1  simonb #define WPI_FILTER_MULTICAST	(1 << 2)
    294  1.1  simonb #define WPI_FILTER_NODECRYPT	(1 << 3)
    295  1.1  simonb #define WPI_FILTER_BSS		(1 << 5)
    296  1.1  simonb #define WPI_FILTER_BEACON	(1 << 6)
    297  1.1  simonb 
    298  1.1  simonb 	uint8_t		chan;
    299  1.1  simonb 	uint8_t		reserved6[3];
    300  1.1  simonb } __attribute__((__packed__));
    301  1.1  simonb 
    302  1.1  simonb /* structure for command WPI_CMD_ASSOCIATE */
    303  1.1  simonb struct wpi_assoc {
    304  1.1  simonb 	uint32_t	flags;
    305  1.1  simonb 	uint32_t	filter;
    306  1.1  simonb 	uint8_t		ofdm_mask;
    307  1.1  simonb 	uint8_t		cck_mask;
    308  1.1  simonb 	uint16_t	reserved;
    309  1.1  simonb } __attribute__((__packed__));
    310  1.1  simonb 
    311  1.1  simonb /* structure for command WPI_CMD_SET_WME */
    312  1.1  simonb struct wpi_wme_setup {
    313  1.1  simonb 	uint32_t	flags;
    314  1.1  simonb 	struct {
    315  1.1  simonb 		uint16_t	cwmin;
    316  1.1  simonb 		uint16_t	cwmax;
    317  1.1  simonb 		uint8_t		aifsn;
    318  1.1  simonb 		uint8_t		reserved;
    319  1.1  simonb 		uint16_t	txop;
    320  1.1  simonb 	} __packed	ac[WME_NUM_AC];
    321  1.1  simonb } __packed;
    322  1.1  simonb 
    323  1.1  simonb /* structure for command WPI_CMD_TSF */
    324  1.1  simonb struct wpi_cmd_tsf {
    325  1.1  simonb 	uint64_t	tstamp;
    326  1.1  simonb 	uint16_t	bintval;
    327  1.1  simonb 	uint16_t	atim;
    328  1.1  simonb 	uint32_t	binitval;
    329  1.1  simonb 	uint16_t	lintval;
    330  1.1  simonb 	uint16_t	reserved;
    331  1.1  simonb } __attribute__((__packed__));
    332  1.1  simonb 
    333  1.1  simonb /* structure for WPI_CMD_ADD_NODE */
    334  1.2   joerg struct wpi_node_info {
    335  1.1  simonb 	uint8_t		control;
    336  1.1  simonb #define WPI_NODE_UPDATE	(1 << 0)
    337  1.1  simonb 
    338  1.1  simonb 	uint8_t		reserved1[3];
    339  1.1  simonb 	uint8_t		bssid[IEEE80211_ADDR_LEN];
    340  1.1  simonb 	uint16_t	reserved2;
    341  1.1  simonb 	uint8_t		id;
    342  1.1  simonb #define WPI_ID_BSS		0
    343  1.1  simonb #define WPI_ID_BROADCAST	24
    344  1.1  simonb 
    345  1.1  simonb 	uint8_t		sta_mask;
    346  1.1  simonb 	uint16_t	reserved3;
    347  1.1  simonb 	uint16_t	key_flags;
    348  1.1  simonb 	uint8_t		tkip;
    349  1.1  simonb 	uint8_t		reserved4;
    350  1.1  simonb 	uint16_t	ttak[5];
    351  1.1  simonb 	uint16_t	reserved5;
    352  1.1  simonb 	uint8_t		key[IEEE80211_KEYBUF_SIZE];
    353  1.1  simonb 	uint32_t	flags;
    354  1.1  simonb 	uint32_t	mask;
    355  1.1  simonb 	uint16_t	tid;
    356  1.1  simonb 	uint8_t		rate;
    357  1.1  simonb 	uint8_t		reserved6;
    358  1.1  simonb 	uint8_t		add_imm;
    359  1.1  simonb 	uint8_t		del_imm;
    360  1.1  simonb 	uint16_t	add_imm_start;
    361  1.1  simonb } __attribute__((__packed__));
    362  1.1  simonb 
    363  1.1  simonb /* structure for command WPI_CMD_TX_DATA */
    364  1.1  simonb struct wpi_cmd_data {
    365  1.1  simonb 	uint16_t	len;
    366  1.1  simonb 	uint16_t	lnext;
    367  1.1  simonb 	uint32_t	flags;
    368  1.1  simonb #define WPI_TX_NEED_RTS		(1 <<  1)
    369  1.1  simonb #define WPI_TX_NEED_ACK		(1 <<  3)
    370  1.1  simonb #define WPI_TX_FULL_TXOP	(1 <<  7)
    371  1.1  simonb #define WPI_TX_AUTO_SEQ		(1 << 13)
    372  1.1  simonb #define WPI_TX_INSERT_TSTAMP	(1 << 16)
    373  1.1  simonb 
    374  1.1  simonb 	uint8_t		rate;
    375  1.1  simonb 	uint8_t		id;
    376  1.1  simonb 	uint8_t		tid;
    377  1.1  simonb 	uint8_t		security;
    378  1.1  simonb 	uint8_t		key[IEEE80211_KEYBUF_SIZE];
    379  1.1  simonb 	uint8_t		tkip[IEEE80211_WEP_MICLEN];
    380  1.1  simonb 	uint32_t	fnext;
    381  1.1  simonb 	uint32_t	lifetime;
    382  1.1  simonb 	uint8_t		ofdm_mask;
    383  1.1  simonb 	uint8_t		cck_mask;
    384  1.1  simonb 	uint8_t		rts_ntries;
    385  1.1  simonb 	uint8_t		data_ntries;
    386  1.1  simonb 	uint16_t	timeout;
    387  1.1  simonb 	uint16_t	txop;
    388  1.1  simonb 	struct		ieee80211_frame wh;
    389  1.1  simonb } __attribute__((__packed__));
    390  1.1  simonb 
    391  1.1  simonb /* structure for command WPI_CMD_SET_BEACON */
    392  1.1  simonb struct wpi_cmd_beacon {
    393  1.1  simonb 	uint16_t	len;
    394  1.1  simonb 	uint16_t	reserved1;
    395  1.1  simonb 	uint32_t	flags;	/* same as wpi_cmd_data */
    396  1.1  simonb 	uint8_t		rate;
    397  1.1  simonb 	uint8_t		id;
    398  1.1  simonb 	uint8_t		reserved2[30];
    399  1.1  simonb 	uint32_t	lifetime;
    400  1.1  simonb 	uint8_t		ofdm_mask;
    401  1.1  simonb 	uint8_t		cck_mask;
    402  1.1  simonb 	uint16_t	reserved3[3];
    403  1.1  simonb 	uint16_t	tim;
    404  1.1  simonb 	uint8_t		timsz;
    405  1.1  simonb 	uint8_t		reserved4;
    406  1.1  simonb 	struct		ieee80211_frame wh;
    407  1.1  simonb } __attribute__((__packed__));
    408  1.1  simonb 
    409  1.1  simonb /* structure for WPI_CMD_MRR_SETUP */
    410  1.1  simonb struct wpi_mrr_setup {
    411  1.1  simonb 	uint32_t	which;
    412  1.1  simonb #define WPI_MRR_CTL	0
    413  1.1  simonb #define WPI_MRR_DATA	1
    414  1.1  simonb 
    415  1.1  simonb 	struct {
    416  1.1  simonb 		uint8_t	plcp;
    417  1.1  simonb 		uint8_t	flags;
    418  1.1  simonb 		uint8_t	ntries;
    419  1.1  simonb 		uint8_t	next;
    420  1.1  simonb #define WPI_OFDM6	0
    421  1.1  simonb #define WPI_OFDM54	7
    422  1.1  simonb #define WPI_CCK1	8
    423  1.1  simonb #define WPI_CCK2	9
    424  1.1  simonb #define WPI_CCK11	11
    425  1.1  simonb 
    426  1.1  simonb 	} __attribute__((__packed__))	rates[WPI_CCK11 + 1];
    427  1.1  simonb } __attribute__((__packed__));
    428  1.1  simonb 
    429  1.1  simonb /* structure for WPI_CMD_SET_LED */
    430  1.1  simonb struct wpi_cmd_led {
    431  1.1  simonb 	uint32_t	unit;	/* multiplier (in usecs) */
    432  1.1  simonb 	uint8_t		which;
    433  1.1  simonb #define WPI_LED_ACTIVITY	1
    434  1.1  simonb #define WPI_LED_LINK		2
    435  1.1  simonb 
    436  1.1  simonb 	uint8_t		off;
    437  1.1  simonb 	uint8_t		on;
    438  1.1  simonb 	uint8_t		reserved;
    439  1.1  simonb } __attribute__((__packed__));
    440  1.1  simonb 
    441  1.1  simonb /* structure for WPI_CMD_SET_POWER_MODE */
    442  1.1  simonb struct wpi_power {
    443  1.1  simonb 	uint32_t	flags;
    444  1.1  simonb 	uint32_t	rx_timeout;
    445  1.1  simonb 	uint32_t	tx_timeout;
    446  1.1  simonb 	uint32_t	sleep[5];
    447  1.1  simonb } __attribute__((__packed__));
    448  1.1  simonb 
    449  1.1  simonb /* structure for command WPI_CMD_SCAN */
    450  1.1  simonb struct wpi_scan_hdr {
    451  1.1  simonb 	uint8_t		len;
    452  1.1  simonb 	uint8_t		first;
    453  1.1  simonb 	uint8_t		reserved1;
    454  1.1  simonb 	uint8_t		nchan;
    455  1.1  simonb 	uint16_t	quiet;
    456  1.1  simonb 	uint16_t	threshold;
    457  1.1  simonb 	uint16_t	band;
    458  1.1  simonb #define WPI_SCAN_5GHZ 1
    459  1.1  simonb 	uint16_t	reserved2[5];
    460  1.1  simonb 	uint32_t	flags;
    461  1.1  simonb 	uint32_t	filter;
    462  1.1  simonb 	uint16_t	pbrlen;
    463  1.1  simonb 	uint16_t	reserved4;
    464  1.1  simonb 	uint32_t	magic1;
    465  1.1  simonb 	uint8_t		rate;
    466  1.1  simonb 	uint8_t		id;
    467  1.1  simonb 	uint16_t	reserved5;
    468  1.1  simonb 	uint32_t	reserved6[7];
    469  1.1  simonb 	uint32_t	mask;
    470  1.1  simonb 	uint32_t	reserved7[2];
    471  1.1  simonb 	uint8_t		reserved8;
    472  1.1  simonb 	uint8_t		esslen;
    473  1.1  simonb 	uint8_t		essid[134];
    474  1.1  simonb 
    475  1.1  simonb 	/* followed by probe request body */
    476  1.1  simonb 	/* followed by nchan x wpi_scan_chan */
    477  1.1  simonb } __attribute__((__packed__));
    478  1.1  simonb 
    479  1.1  simonb struct wpi_scan_chan {
    480  1.1  simonb 	uint8_t		flags;
    481  1.1  simonb 	uint8_t		chan;
    482  1.1  simonb #define WPI_CHAN_ACTIVE	3
    483  1.1  simonb 	uint16_t	magic;		/* XXX */
    484  1.1  simonb 	uint16_t	active;		/* msecs */
    485  1.1  simonb 	uint16_t	passive;	/* msecs */
    486  1.1  simonb } __attribute__((__packed__));
    487  1.1  simonb 
    488  1.1  simonb /* structure for WPI_CMD_BLUETOOTH */
    489  1.1  simonb struct wpi_bluetooth {
    490  1.1  simonb 	uint8_t		flags;
    491  1.1  simonb 	uint8_t		lead;
    492  1.1  simonb 	uint8_t		kill;
    493  1.1  simonb 	uint8_t		reserved;
    494  1.1  simonb 	uint32_t	ack;
    495  1.1  simonb 	uint32_t	cts;
    496  1.1  simonb } __attribute__((__packed__));
    497  1.1  simonb 
    498  1.1  simonb /* structure for command WPI_CMD_TXPOWER */
    499  1.1  simonb struct wpi_txpower {
    500  1.1  simonb 	uint32_t	reserved1;
    501  1.1  simonb 	uint16_t	pwr1[14];
    502  1.1  simonb 	uint32_t	reserved2[2];
    503  1.1  simonb 	uint16_t	pwr2[14];
    504  1.1  simonb 	uint32_t	reserved3[2];
    505  1.1  simonb } __attribute__((__packed__));
    506  1.1  simonb 
    507  1.1  simonb 
    508  1.1  simonb /* firmware image header */
    509  1.1  simonb struct wpi_firmware_hdr {
    510  1.1  simonb 	uint32_t	version;
    511  1.1  simonb 	uint32_t	textsz;
    512  1.1  simonb 	uint32_t	datasz;
    513  1.1  simonb 	uint32_t	bootsz;
    514  1.1  simonb } __attribute__((__packed__));
    515  1.1  simonb 
    516  1.1  simonb /* structure for WPI_UC_READY notification */
    517  1.1  simonb struct wpi_ucode_info {
    518  1.1  simonb 	uint32_t	version;
    519  1.1  simonb 	uint8_t		revision[8];
    520  1.1  simonb 	uint8_t		type;
    521  1.1  simonb 	uint8_t		subtype;
    522  1.1  simonb 	uint16_t	reserved;
    523  1.1  simonb 	uint32_t	logptr;
    524  1.1  simonb 	uint32_t	errorptr;
    525  1.1  simonb 	uint32_t	timestamp;
    526  1.1  simonb 	uint32_t	valid;
    527  1.1  simonb } __attribute__((__packed__));
    528  1.1  simonb 
    529  1.1  simonb /* structure for WPI_START_SCAN notification */
    530  1.1  simonb struct wpi_start_scan {
    531  1.1  simonb 	uint64_t	tstamp;
    532  1.1  simonb 	uint32_t	tbeacon;
    533  1.1  simonb 	uint8_t		chan;
    534  1.1  simonb 	uint8_t		band;
    535  1.1  simonb 	uint16_t	reserved;
    536  1.1  simonb 	uint32_t	status;
    537  1.1  simonb } __attribute__((__packed__));
    538  1.1  simonb 
    539  1.1  simonb /* structure for WPI_STOP_SCAN notification */
    540  1.1  simonb struct wpi_stop_scan {
    541  1.1  simonb 	uint8_t		nchan;
    542  1.1  simonb 	uint8_t		status;
    543  1.1  simonb 	uint8_t		reserved;
    544  1.1  simonb 	uint8_t		chan;
    545  1.1  simonb 	uint64_t	tsf;
    546  1.1  simonb } __packed;
    547  1.1  simonb 
    548  1.1  simonb #define WPI_EEPROM_MAC		0x015
    549  1.1  simonb #define WPI_EEPROM_REVISION	0x035
    550  1.1  simonb #define WPI_EEPROM_CAPABILITIES	0x045
    551  1.1  simonb #define WPI_EEPROM_TYPE		0x04a
    552  1.1  simonb #define WPI_EEPROM_PWR1		0x1ae
    553  1.1  simonb #define WPI_EEPROM_PWR2		0x1bc
    554  1.1  simonb 
    555  1.1  simonb #define WPI_READ(sc, reg)						\
    556  1.1  simonb 	bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg))
    557  1.1  simonb 
    558  1.1  simonb #define WPI_WRITE(sc, reg, val)						\
    559  1.1  simonb 	bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
    560  1.1  simonb 
    561  1.1  simonb #define WPI_WRITE_REGION_4(sc, offset, datap, count)			\
    562  1.1  simonb 	bus_space_write_region_4((sc)->sc_st, (sc)->sc_sh, (offset),	\
    563  1.1  simonb 		(datap), (count))
    564