xref: /openbsd-src/sys/dev/ic/bwireg.h (revision 4b1a56afb1a28c97103da3911d326d1216798a6e)
1*4b1a56afSjsg /*	$OpenBSD: bwireg.h,v 1.11 2022/01/09 05:42:38 jsg Exp $	*/
20ad0890cSmglocker 
31efc4635Sjsg /*
41efc4635Sjsg  * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
51efc4635Sjsg  *
61efc4635Sjsg  * This code is derived from software contributed to The DragonFly Project
71efc4635Sjsg  * by Sepherosa Ziehau <sepherosa@gmail.com>
81efc4635Sjsg  *
91efc4635Sjsg  * Redistribution and use in source and binary forms, with or without
101efc4635Sjsg  * modification, are permitted provided that the following conditions
111efc4635Sjsg  * are met:
121efc4635Sjsg  *
131efc4635Sjsg  * 1. Redistributions of source code must retain the above copyright
141efc4635Sjsg  *    notice, this list of conditions and the following disclaimer.
151efc4635Sjsg  * 2. Redistributions in binary form must reproduce the above copyright
161efc4635Sjsg  *    notice, this list of conditions and the following disclaimer in
171efc4635Sjsg  *    the documentation and/or other materials provided with the
181efc4635Sjsg  *    distribution.
191efc4635Sjsg  * 3. Neither the name of The DragonFly Project nor the names of its
201efc4635Sjsg  *    contributors may be used to endorse or promote products derived
211efc4635Sjsg  *    from this software without specific, prior written permission.
221efc4635Sjsg  *
231efc4635Sjsg  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
241efc4635Sjsg  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
251efc4635Sjsg  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
261efc4635Sjsg  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
271efc4635Sjsg  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
281efc4635Sjsg  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
291efc4635Sjsg  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
301efc4635Sjsg  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
311efc4635Sjsg  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
321efc4635Sjsg  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
331efc4635Sjsg  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
341efc4635Sjsg  * SUCH DAMAGE.
351efc4635Sjsg  *
361efc4635Sjsg  * $DragonFly: src/sys/dev/netif/bwi/if_bwireg.h,v 1.1 2007/09/08 06:15:54 sephe Exp $
371efc4635Sjsg  */
381efc4635Sjsg 
391efc4635Sjsg #ifndef _IF_BWIREG_H
401efc4635Sjsg #define _IF_BWIREG_H
411efc4635Sjsg 
421efc4635Sjsg /*
431efc4635Sjsg  * Registers for all of the register windows
441efc4635Sjsg  */
4514b491c0Smglocker #define BWI_FLAGS			0x00000f18
46b2ffa9ccSmglocker #define BWI_FLAGS_INTR_MASK		0x0000003f
471efc4635Sjsg 
4814b491c0Smglocker #define BWI_IMSTATE			0x00000f90
49b2ffa9ccSmglocker #define BWI_IMSTATE_INBAND_ERR		(1 << 17)
50b2ffa9ccSmglocker #define BWI_IMSTATE_TIMEOUT		(1 << 18)
511efc4635Sjsg 
5214b491c0Smglocker #define BWI_INTRVEC			0x00000f94
531efc4635Sjsg 
5414b491c0Smglocker #define BWI_STATE_LO			0x00000f98
55b2ffa9ccSmglocker #define BWI_STATE_LO_RESET		(1 << 0)
56b2ffa9ccSmglocker #define BWI_STATE_LO_DISABLE1		(1 << 1)
57b2ffa9ccSmglocker #define BWI_STATE_LO_DISABLE2		(1 << 2)
58b2ffa9ccSmglocker #define BWI_STATE_LO_CLOCK		(1 << 16)
59b2ffa9ccSmglocker #define BWI_STATE_LO_GATED_CLOCK	(1 << 17)
60b2ffa9ccSmglocker #define BWI_STATE_LO_FLAG_PHYCLKEN	(1 << 0)
61b2ffa9ccSmglocker #define BWI_STATE_LO_FLAG_PHYRST	(1 << 1)
62b2ffa9ccSmglocker #define BWI_STATE_LO_FLAG_PHYLNK	(1 << 11)
63b2ffa9ccSmglocker #define BWI_STATE_LO_FLAGS_MASK		0x3ffc0000
641efc4635Sjsg 
6514b491c0Smglocker #define BWI_STATE_HI			0x00000f9c
66b2ffa9ccSmglocker #define BWI_STATE_HI_SERROR		(1 << 0)
67b2ffa9ccSmglocker #define BWI_STATE_HI_BUSY		(1 << 2)
681efc4635Sjsg #define BWI_STATE_HI_FLAG_MAGIC1	0x1
691efc4635Sjsg #define BWI_STATE_HI_FLAG_MAGIC2	0x2
701efc4635Sjsg #define BWI_STATE_HI_FLAG_64BIT		0x1000
71b2ffa9ccSmglocker #define BWI_STATE_HI_FLAGS_MASK		0x1fff0000
721efc4635Sjsg 
7314b491c0Smglocker #define BWI_CONF_LO			0x00000fa8
74b2ffa9ccSmglocker #define BWI_CONF_LO_SERVTO_MASK		0x00000007	/* service timeout */
751efc4635Sjsg #define BWI_CONF_LO_SERVTO		2
76b2ffa9ccSmglocker #define BWI_CONF_LO_REQTO_MASK		0x00000070	/* request timeout */
771efc4635Sjsg #define BWI_CONF_LO_REQTO		3
781efc4635Sjsg 
7914b491c0Smglocker #define BWI_ID_LO			0x00000ff8
80b2ffa9ccSmglocker #define BWI_ID_LO_BUSREV_MASK		0xf0000000
811efc4635Sjsg /* Bus revision */
821efc4635Sjsg #define BWI_BUSREV_0			0
831efc4635Sjsg #define BWI_BUSREV_1			1
841efc4635Sjsg 
8514b491c0Smglocker #define BWI_ID_HI			0x00000ffc
861efc4635Sjsg #define BWI_ID_HI_REGWIN_REV(v)		(((v) & 0xf) | (((v) & 0x7000) >> 8))
871efc4635Sjsg #define BWI_ID_HI_REGWIN_TYPE(v)	(((v) & 0x8ff0) >> 4)
88b2ffa9ccSmglocker #define BWI_ID_HI_REGWIN_VENDOR_MASK	0xffff0000
891efc4635Sjsg 
901efc4635Sjsg /*
911efc4635Sjsg  * Registers for common register window
921efc4635Sjsg  */
9314b491c0Smglocker #define BWI_INFO			0x00000000
94b2ffa9ccSmglocker #define BWI_INFO_BBPID_MASK		0x0000ffff
95b2ffa9ccSmglocker #define BWI_INFO_BBPREV_MASK		0x000f0000
96b2ffa9ccSmglocker #define BWI_INFO_BBPPKG_MASK		0x00f00000
97b2ffa9ccSmglocker #define BWI_INFO_NREGWIN_MASK		0x0f000000
981efc4635Sjsg 
9914b491c0Smglocker #define BWI_CAPABILITY			0x00000004
100b2ffa9ccSmglocker #define BWI_CAP_CLKMODE			(1 << 18)
1011efc4635Sjsg 
10214b491c0Smglocker #define BWI_CONTROL			0x00000028
1031efc4635Sjsg #define BWI_CONTROL_MAGIC0		0x3a4
1041efc4635Sjsg #define BWI_CONTROL_MAGIC1		0xa4
1051efc4635Sjsg #define BWI_PLL_ON_DELAY		0xb0
1061efc4635Sjsg #define BWI_FREQ_SEL_DELAY		0xb4
1071efc4635Sjsg 
10814b491c0Smglocker #define BWI_CLOCK_CTRL			0x000000b8
109b2ffa9ccSmglocker #define BWI_CLOCK_CTRL_CLKSRC		(7 << 0)
110b2ffa9ccSmglocker #define BWI_CLOCK_CTRL_SLOW		(1 << 11)
111b2ffa9ccSmglocker #define BWI_CLOCK_CTRL_IGNPLL		(1 << 12)
112b2ffa9ccSmglocker #define BWI_CLOCK_CTRL_NODYN		(1 << 13)
113b2ffa9ccSmglocker #define BWI_CLOCK_CTRL_FDIV		(0xffff << 16)	/* freq divisor */
1141efc4635Sjsg 
1151efc4635Sjsg /* Possible values for BWI_CLOCK_CTRL_CLKSRC */
1161efc4635Sjsg #define BWI_CLKSRC_LP_OSC		0	/* Low power oscillator */
1171efc4635Sjsg #define BWI_CLKSRC_CS_OSC		1	/* Crystal oscillator */
1181efc4635Sjsg #define BWI_CLKSRC_PCI			2
1191efc4635Sjsg #define BWI_CLKSRC_MAX			3	/* Maximum of clock source */
1201efc4635Sjsg /* Min/Max frequency for given clock source */
1211efc4635Sjsg #define BWI_CLKSRC_LP_OSC_FMIN		25000
1221efc4635Sjsg #define BWI_CLKSRC_LP_OSC_FMAX		43000
1231efc4635Sjsg #define BWI_CLKSRC_CS_OSC_FMIN		19800000
1241efc4635Sjsg #define BWI_CLKSRC_CS_OSC_FMAX		20200000
1251efc4635Sjsg #define BWI_CLKSRC_PCI_FMIN		25000000
1261efc4635Sjsg #define BWI_CLKSRC_PCI_FMAX		34000000
1271efc4635Sjsg 
12814b491c0Smglocker #define BWI_CLOCK_INFO			0x000000c0
129b2ffa9ccSmglocker #define BWI_CLOCK_INFO_FDIV		(0xffff << 16)	/* freq divisor */
1301efc4635Sjsg 
1311efc4635Sjsg /*
1321efc4635Sjsg  * Registers for bus register window
1331efc4635Sjsg  */
13414b491c0Smglocker #define BWI_BUS_ADDR			0x00000050
1351efc4635Sjsg #define BWI_BUS_ADDR_MAGIC		0xfd8
1361efc4635Sjsg 
13714b491c0Smglocker #define BWI_BUS_DATA			0x00000054
1381efc4635Sjsg 
13914b491c0Smglocker #define BWI_BUS_CONFIG			0x00000108
140b2ffa9ccSmglocker #define BWI_BUS_CONFIG_PREFETCH		(1 << 2)
141b2ffa9ccSmglocker #define BWI_BUS_CONFIG_BURST		(1 << 3)
142b2ffa9ccSmglocker #define BWI_BUS_CONFIG_MRM		(1 << 5)
1431efc4635Sjsg 
1441efc4635Sjsg /*
1451efc4635Sjsg  * Register for MAC
1461efc4635Sjsg  */
1471efc4635Sjsg #define BWI_TXRX_INTR_STATUS_BASE	0x20
1481efc4635Sjsg #define BWI_TXRX_INTR_MASK_BASE		0x24
1491efc4635Sjsg #define BWI_TXRX_INTR_STATUS(i)		(BWI_TXRX_INTR_STATUS_BASE + ((i) * 8))
1501efc4635Sjsg #define BWI_TXRX_INTR_MASK(i)		(BWI_TXRX_INTR_MASK_BASE + ((i) * 8))
1511efc4635Sjsg 
15214b491c0Smglocker #define BWI_MAC_STATUS			0x00000120
15361e87b28Sderaadt #define BWI_MAC_STATUS_ENABLE		(1U << 0)
15461e87b28Sderaadt #define BWI_MAC_STATUS_UCODE_START	(1U << 1)
15561e87b28Sderaadt #define BWI_MAC_STATUS_UCODE_JUMP0	(1U << 2)
15661e87b28Sderaadt #define BWI_MAC_STATUS_IHREN		(1U << 10)
15761e87b28Sderaadt #define BWI_MAC_STATUS_GPOSEL_MASK	(3U << 14)
15861e87b28Sderaadt #define BWI_MAC_STATUS_BSWAP		(1U << 16)
15961e87b28Sderaadt #define BWI_MAC_STATUS_INFRA		(1U << 17)
16061e87b28Sderaadt #define BWI_MAC_STATUS_OPMODE_HOSTAP	(1U << 18)
16161e87b28Sderaadt #define BWI_MAC_STATUS_RFLOCK		(1U << 19)
16261e87b28Sderaadt #define BWI_MAC_STATUS_PASS_BCN		(1U << 20)
16361e87b28Sderaadt #define BWI_MAC_STATUS_PASS_BADPLCP	(1U << 21)
16461e87b28Sderaadt #define BWI_MAC_STATUS_PASS_CTL		(1U << 22)
16561e87b28Sderaadt #define BWI_MAC_STATUS_PASS_BADFCS	(1U << 23)
16661e87b28Sderaadt #define BWI_MAC_STATUS_PROMISC		(1U << 24)
16761e87b28Sderaadt #define BWI_MAC_STATUS_HW_PS		(1U << 25)
16861e87b28Sderaadt #define BWI_MAC_STATUS_WAKEUP		(1U << 26)
16961e87b28Sderaadt #define BWI_MAC_STATUS_PHYLNK		(1U << 31)
1701efc4635Sjsg 
17114b491c0Smglocker #define BWI_MAC_INTR_STATUS		0x00000128
17214b491c0Smglocker #define BWI_MAC_INTR_MASK		0x0000012c
1731efc4635Sjsg 
17414b491c0Smglocker #define BWI_MAC_TMPLT_CTRL		0x00000130
17514b491c0Smglocker #define BWI_MAC_TMPLT_DATA		0x00000134
1761efc4635Sjsg 
17714b491c0Smglocker #define BWI_MAC_PS_STATUS		0x00000140
1781efc4635Sjsg 
17914b491c0Smglocker #define BWI_MOBJ_CTRL			0x00000160
1801efc4635Sjsg #define BWI_MOBJ_CTRL_VAL(objid, ofs)	((objid) << 16 | (ofs))
18114b491c0Smglocker #define BWI_MOBJ_DATA			0x00000164
18214b491c0Smglocker #define BWI_MOBJ_DATA_UNALIGN		0x0166
183f4ee82a0Smglocker 
1841efc4635Sjsg /*
1851efc4635Sjsg  * Memory object IDs
1861efc4635Sjsg  */
1871efc4635Sjsg #define BWI_WR_MOBJ_AUTOINC		0x100	/* Auto-increment wr */
1881efc4635Sjsg #define BWI_RD_MOBJ_AUTOINC		0x200	/* Auto-increment rd */
1891efc4635Sjsg /* Firmware ucode object */
1901efc4635Sjsg #define BWI_FW_UCODE_MOBJ		0x0
1911efc4635Sjsg /* Common object */
1921efc4635Sjsg #define BWI_COMM_MOBJ			0x1
1931efc4635Sjsg #define BWI_COMM_MOBJ_FWREV		0x0
1941efc4635Sjsg #define BWI_COMM_MOBJ_FWPATCHLV		0x2
1951efc4635Sjsg #define BWI_COMM_MOBJ_SLOTTIME		0x10
1961efc4635Sjsg #define BWI_COMM_MOBJ_MACREV		0x16
1971efc4635Sjsg #define BWI_COMM_MOBJ_TX_ACK		0x22
1981efc4635Sjsg #define BWI_COMM_MOBJ_UCODE_STATE	0x40
1991efc4635Sjsg #define BWI_COMM_MOBJ_SHRETRY_FB	0x44
2001efc4635Sjsg #define BWI_COMM_MOBJ_LGRETEY_FB	0x46
2011efc4635Sjsg #define BWI_COMM_MOBJ_TX_BEACON		0x54
2021efc4635Sjsg #define BWI_COMM_MOBJ_KEYTABLE_OFS	0x56
2031efc4635Sjsg #define BWI_COMM_MOBJ_TSSI_DS		0x58
2041efc4635Sjsg #define BWI_COMM_MOBJ_HFLAGS_LO		0x5e
2051efc4635Sjsg #define BWI_COMM_MOBJ_HFLAGS_MI		0x60
2061efc4635Sjsg #define BWI_COMM_MOBJ_HFLAGS_HI		0x62
2071efc4635Sjsg #define BWI_COMM_MOBJ_RF_ATTEN		0x64
2081efc4635Sjsg #define BWI_COMM_MOBJ_TSSI_OFDM		0x70
2091efc4635Sjsg #define BWI_COMM_MOBJ_PROBE_RESP_TO	0x74
2101efc4635Sjsg #define BWI_COMM_MOBJ_CHAN		0xa0
2111efc4635Sjsg #define BWI_COMM_MOBJ_KEY_ALGO		0x100
2121efc4635Sjsg #define BWI_COMM_MOBJ_TX_PROBE_RESP	0x188
2131efc4635Sjsg #define BWI_HFLAG_AUTO_ANTDIV		0x1ULL
2141efc4635Sjsg #define BWI_HFLAG_SYM_WA		0x2ULL	/* ??? SYM work around */
2151efc4635Sjsg #define BWI_HFLAG_PWR_BOOST_DS		0x8ULL
2161efc4635Sjsg #define BWI_HFLAG_GDC_WA		0x20ULL	/* ??? GDC work around */
2171efc4635Sjsg #define BWI_HFLAG_OFDM_PA		0x40ULL
2181efc4635Sjsg #define BWI_HFLAG_NOT_JAPAN		0x80ULL
2191efc4635Sjsg #define BWI_HFLAG_MAGIC1		0x200ULL
2201efc4635Sjsg #define BWI_UCODE_STATE_PS		4
221b2ffa9ccSmglocker #define BWI_LO_TSSI_MASK		0x00ff
222b2ffa9ccSmglocker #define BWI_HI_TSSI_MASK		0xff00
2231efc4635Sjsg #define BWI_INVALID_TSSI		0x7f
2241efc4635Sjsg /* 802.11 object */
2251efc4635Sjsg #define BWI_80211_MOBJ			0x2
2261efc4635Sjsg #define BWI_80211_MOBJ_CWMIN		0xc
2271efc4635Sjsg #define BWI_80211_MOBJ_CWMAX		0x10
2281efc4635Sjsg #define BWI_80211_MOBJ_SHRETRY		0x18
2291efc4635Sjsg #define BWI_80211_MOBJ_LGRETRY		0x1c
2301efc4635Sjsg /* Firmware PCM object */
2311efc4635Sjsg #define BWI_FW_PCM_MOBJ			0x3
2321efc4635Sjsg /* MAC address of pairwise keys */
2331efc4635Sjsg #define BWI_PKEY_ADDR_MOBJ		0x4
2341efc4635Sjsg 
23514b491c0Smglocker #define BWI_TXSTATUS_0			0x00000170
236b2ffa9ccSmglocker #define BWI_TXSTATUS_0_MORE		(1 << 0)
237b2ffa9ccSmglocker #define BWI_TXSTATUS_0_TXID_MASK	0xffff0000
2381efc4635Sjsg #define BWI_TXSTATUS_0_INFO(st)		(((st) & 0xfff0) | (((st) & 0xf) >> 1))
23914b491c0Smglocker #define BWI_TXSTATUS_1			0x00000174
2401efc4635Sjsg 
2411efc4635Sjsg #define BWI_TXRX_CTRL_BASE		0x200
2421efc4635Sjsg #define BWI_TX32_CTRL			0x0
2431efc4635Sjsg #define BWI_TX32_RINGINFO		0x4
2441efc4635Sjsg #define BWI_TX32_INDEX			0x8
2451efc4635Sjsg #define BWI_TX32_STATUS			0xc
246b2ffa9ccSmglocker #define BWI_TX32_STATUS_STATE_MASK	0xf000
2471efc4635Sjsg #define BWI_TX32_STATUS_STATE_DISABLED	0
2481efc4635Sjsg #define BWI_TX32_STATUS_STATE_IDLE	2
2491efc4635Sjsg #define BWI_TX32_STATUS_STATE_STOPPED	3
2501efc4635Sjsg #define BWI_RX32_CTRL			0x10
251b2ffa9ccSmglocker #define BWI_RX32_CTRL_HDRSZ_MASK	0x00fe
2521efc4635Sjsg #define BWI_RX32_RINGINFO		0x14
2531efc4635Sjsg #define BWI_RX32_INDEX			0x18
2541efc4635Sjsg #define BWI_RX32_STATUS			0x1c
255b2ffa9ccSmglocker #define BWI_RX32_STATUS_INDEX_MASK	0x0fff
256b2ffa9ccSmglocker #define BWI_RX32_STATUS_STATE_MASK	0xf000
2571efc4635Sjsg #define BWI_RX32_STATUS_STATE_DISABLED	0
2581efc4635Sjsg /* Shared by 32bit TX/RX CTRL */
259b2ffa9ccSmglocker #define BWI_TXRX32_CTRL_ENABLE		(1 << 0)
260b2ffa9ccSmglocker #define BWI_TXRX32_CTRL_ADDRHI_MASK	0x00030000
2611efc4635Sjsg /* Shared by 32bit TX/RX RINGINFO */
2621efc4635Sjsg #define BWI_TXRX32_RINGINFO_FUNC_TXRX	0x1
263b2ffa9ccSmglocker #define BWI_TXRX32_RINGINFO_FUNC_MASK	0xc0000000
264b2ffa9ccSmglocker #define BWI_TXRX32_RINGINFO_ADDR_MASK	0x3fffffff
2651efc4635Sjsg 
26614b491c0Smglocker #define BWI_PHYINFO			0x03e0
267b2ffa9ccSmglocker #define BWI_PHYINFO_REV_MASK		0x000f
268b2ffa9ccSmglocker #define BWI_PHYINFO_TYPE_MASK		0x0f00
2691efc4635Sjsg #define BWI_PHYINFO_TYPE_11A		0
2701efc4635Sjsg #define BWI_PHYINFO_TYPE_11B		1
2711efc4635Sjsg #define BWI_PHYINFO_TYPE_11G		2
2721efc4635Sjsg #define BWI_PHYINFO_TYPE_11N		5
273b2ffa9ccSmglocker #define BWI_PHYINFO_VER_MASK		0xf000
2741efc4635Sjsg 
27514b491c0Smglocker #define BWI_RF_ANTDIV			0x03e2	/* Antenna Diversity ?? */
2761efc4635Sjsg 
27714b491c0Smglocker #define BWI_PHY_MAGIC_REG1		0x03e4
2781efc4635Sjsg #define BWI_PHY_MAGIC_REG1_VAL1		0x3000
27914b491c0Smglocker #define BWI_PHY_MAGIC_REG1_VAL2		0x0009
2801efc4635Sjsg 
28114b491c0Smglocker #define BWI_BBP_ATTEN			0x03e6
28214b491c0Smglocker #define BWI_BBP_ATTEN_MAGIC		0x00f4
2831efc4635Sjsg #define BWI_BBP_ATTEN_MAGIC2		0x8140
2841efc4635Sjsg 
28514b491c0Smglocker #define BWI_BPHY_CTRL			0x03ec
2861efc4635Sjsg #define BWI_BPHY_CTRL_INIT		0x3f22
2871efc4635Sjsg 
28814b491c0Smglocker #define BWI_RF_CHAN			0x03f0
28914b491c0Smglocker #define BWI_RF_CHAN_EX			0x03f4
2901efc4635Sjsg 
29114b491c0Smglocker #define BWI_RF_CTRL			0x03f6
2921efc4635Sjsg /* Register values for BWI_RF_CTRL */
2931efc4635Sjsg #define BWI_RF_CTRL_RFINFO		0x1
2941efc4635Sjsg /* XXX extra bits for reading from radio */
2951efc4635Sjsg #define BWI_RF_CTRL_RD_11A		0x40
2961efc4635Sjsg #define BWI_RF_CTRL_RD_11BG		0x80
2971efc4635Sjsg #define BWI_RF_DATA_HI			0x3f8
2981efc4635Sjsg #define BWI_RF_DATA_LO			0x3fa
2991efc4635Sjsg /* Values read from BWI_RF_DATA_{HI,LO} after BWI_RF_CTRL_RFINFO */
300b2ffa9ccSmglocker #define BWI_RFINFO_MANUFACT_MASK	0x0fff
3011efc4635Sjsg #define BWI_RF_MANUFACT_BCM		0x17f		/* XXX */
302b2ffa9ccSmglocker #define BWI_RFINFO_TYPE_MASK		0x0ffff000
3031efc4635Sjsg #define BWI_RF_T_BCM2050		0x2050
3041efc4635Sjsg #define BWI_RF_T_BCM2053		0x2053
3051efc4635Sjsg #define BWI_RF_T_BCM2060		0x2060
306b2ffa9ccSmglocker #define BWI_RFINFO_REV_MASK		0xf0000000
3071efc4635Sjsg 
30814b491c0Smglocker #define BWI_PHY_CTRL			0x03fc
30914b491c0Smglocker #define BWI_PHY_DATA			0x03fe
3101efc4635Sjsg 
31114b491c0Smglocker #define BWI_ADDR_FILTER_CTRL		0x0420
31214b491c0Smglocker #define BWI_ADDR_FILTER_CTRL_SET	0x0020
3131efc4635Sjsg #define BWI_ADDR_FILTER_MYADDR		0
3141efc4635Sjsg #define BWI_ADDR_FILTER_BSSID		3
3151efc4635Sjsg #define BWI_ADDR_FILTER_DATA		0x422
3161efc4635Sjsg 
317418fe01fSmglocker #define BWI_MAC_GPIO_CTRL		0x049c
31814b491c0Smglocker #define BWI_MAC_GPIO_MASK		0x049e
31914b491c0Smglocker #define BWI_MAC_PRE_TBTT		0x0612
32014b491c0Smglocker #define BWI_MAC_SLOTTIME		0x0684
3211efc4635Sjsg #define BWI_MAC_SLOTTIME_ADJUST		510
32214b491c0Smglocker #define BWI_MAC_POWERUP_DELAY		0x06a8
3231efc4635Sjsg 
3241efc4635Sjsg /*
3251efc4635Sjsg  * Special registers
3261efc4635Sjsg  */
3271efc4635Sjsg /*
3281efc4635Sjsg  * GPIO control
3291efc4635Sjsg  * If common regwin exists, then it is within common regwin,
3301efc4635Sjsg  * else it is in bus regwin.
3311efc4635Sjsg  */
33214b491c0Smglocker #define BWI_GPIO_CTRL			0x0000006c
3331efc4635Sjsg 
3341efc4635Sjsg /*
3351109d94fSbcook  * Core reset
3361109d94fSbcook  */
3371109d94fSbcook #define BWI_RESET_CTRL          0x1800
3381109d94fSbcook #define BWI_RESET_STATUS        0x1804
3391109d94fSbcook #define BWI_RESET_CTRL_RESET    (1 << 0)
3401109d94fSbcook 
3411109d94fSbcook /*
3421efc4635Sjsg  * Extended PCI registers
3431efc4635Sjsg  */
3441efc4635Sjsg #define BWI_PCIR_BAR			PCIR_BAR(0)
34514b491c0Smglocker #define BWI_PCIR_SEL_REGWIN		0x00000080
3461efc4635Sjsg /* Register value for BWI_PCIR_SEL_REGWIN */
3471efc4635Sjsg #define BWI_PCIM_REGWIN(id)		(((id) * 0x1000) + 0x18000000)
34814b491c0Smglocker #define BWI_PCIR_GPIO_IN		0x000000b0
34914b491c0Smglocker #define BWI_PCIR_GPIO_OUT		0x000000b4
350b2ffa9ccSmglocker #define BWI_PCIM_GPIO_OUT_CLKSRC	(1 << 4)
35114b491c0Smglocker #define BWI_PCIR_GPIO_ENABLE		0x000000b8
3521efc4635Sjsg /* Register values for BWI_PCIR_GPIO_{IN,OUT,ENABLE} */
353b2ffa9ccSmglocker #define BWI_PCIM_GPIO_PWR_ON		(1 << 6)
354b2ffa9ccSmglocker #define BWI_PCIM_GPIO_PLL_PWR_OFF	(1 << 7)
35514b491c0Smglocker #define BWI_PCIR_INTCTL			0x00000094
3561efc4635Sjsg 
3571efc4635Sjsg /*
3581efc4635Sjsg  * PCI subdevice IDs
3591efc4635Sjsg  */
3601efc4635Sjsg #define BWI_PCI_SUBDEVICE_BU4306	0x416
3611efc4635Sjsg #define BWI_PCI_SUBDEVICE_BCM4309G	0x421
3621efc4635Sjsg 
3631efc4635Sjsg #define BWI_IS_BRCM_BU4306(sc)					\
3641efc4635Sjsg 	((sc)->sc_pci_subvid == PCI_VENDOR_BROADCOM &&		\
3651efc4635Sjsg 	 (sc)->sc_pci_subdid == BWI_PCI_SUBDEVICE_BU4306)
3661efc4635Sjsg #define BWI_IS_BRCM_BCM4309G(sc)				\
3671efc4635Sjsg 	((sc)->sc_pci_subvid == PCI_VENDOR_BROADCOM &&		\
3681efc4635Sjsg 	 (sc)->sc_pci_subdid == BWI_PCI_SUBDEVICE_BCM4309G)
3691efc4635Sjsg 
3701efc4635Sjsg /*
3711efc4635Sjsg  * EEPROM start address
3721efc4635Sjsg  */
3731efc4635Sjsg #define BWI_SPROM_START			0x1000
3741efc4635Sjsg #define BWI_SPROM_11BG_EADDR		0x48
3751efc4635Sjsg #define BWI_SPROM_11A_EADDR		0x54
3761efc4635Sjsg #define BWI_SPROM_CARD_INFO		0x5c
377b2ffa9ccSmglocker #define BWI_SPROM_CARD_INFO_LOCALE	(0x0f << 8)
3781efc4635Sjsg #define BWI_SPROM_LOCALE_JAPAN		5
3791efc4635Sjsg #define BWI_SPROM_PA_PARAM_11BG		0x5e
380418fe01fSmglocker #define BWI_SPROM_GPIO01		0x64
381418fe01fSmglocker #define BWI_SPROM_GPIO_0		0x00ff
382418fe01fSmglocker #define BWI_SPROM_GPIO_1		0xff00
383418fe01fSmglocker #define BWI_SPROM_GPIO23		0x0066
384418fe01fSmglocker #define BWI_SPROM_GPIO_2		0x00ff
385418fe01fSmglocker #define BWI_SPROM_GPIO_3		0xff00
3861efc4635Sjsg #define BWI_SPROM_MAX_TXPWR		0x68
387b2ffa9ccSmglocker #define BWI_SPROM_MAX_TXPWR_MASK_11BG	0x00ff		/* XXX */
388b2ffa9ccSmglocker #define BWI_SPROM_MAX_TXPWR_MASK_11A	0xff00		/* XXX */
3891efc4635Sjsg #define BWI_SPROM_PA_PARAM_11A		0x6a
3901efc4635Sjsg #define BWI_SPROM_IDLE_TSSI		0x70
391b2ffa9ccSmglocker #define BWI_SPROM_IDLE_TSSI_MASK_11BG	0x00ff		/* XXX */
392b2ffa9ccSmglocker #define BWI_SPROM_IDLE_TSSI_MASK_11A	0xff00		/* XXX */
3931efc4635Sjsg #define BWI_SPROM_CARD_FLAGS		0x72
3941efc4635Sjsg #define BWI_SPROM_ANT_GAIN		0x74
395b2ffa9ccSmglocker #define BWI_SPROM_ANT_GAIN_MASK_11A	0x00ff
396b2ffa9ccSmglocker #define BWI_SPROM_ANT_GAIN_MASK_11BG	0xff00
3971efc4635Sjsg 
3981efc4635Sjsg /*
3991efc4635Sjsg  * SPROM card flags
4001efc4635Sjsg  */
401b2ffa9ccSmglocker #define BWI_CARD_F_PA_GPIO9		(1 << 1)	/* GPIO 9 controls PA */
402b2ffa9ccSmglocker #define BWI_CARD_F_SW_NRSSI		(1 << 3)
403b2ffa9ccSmglocker #define BWI_CARD_F_NO_SLOWCLK		(1 << 5)	/* no slow clock */
404b2ffa9ccSmglocker #define BWI_CARD_F_EXT_LNA		(1 << 12)	/* external LNA */
405b2ffa9ccSmglocker #define BWI_CARD_F_ALT_IQ		(1 << 15)	/* alternate I/Q */
4061efc4635Sjsg 
4071efc4635Sjsg /*
408418fe01fSmglocker  * PROM GPIO
409418fe01fSmglocker  */
410418fe01fSmglocker #define BWI_LED_ACT_LOW			(1 << 7)
411418fe01fSmglocker #define BWI_LED_ACT_MASK		0x7f
412418fe01fSmglocker #define BWI_LED_ACT_OFF			0
413418fe01fSmglocker #define BWI_LED_ACT_ON			1
4148a1cd61dSmglocker #define BWI_LED_ACT_BLINK		2
4158a1cd61dSmglocker #define BWI_LED_ACT_RF_ENABLED		3
416418fe01fSmglocker #define BWI_LED_ACT_5GHZ		4
417418fe01fSmglocker #define BWI_LED_ACT_2GHZ		5
418418fe01fSmglocker #define BWI_LED_ACT_11G			6
4198a1cd61dSmglocker #define BWI_LED_ACT_BLINK_SLOW		7
4208a1cd61dSmglocker #define BWI_LED_ACT_BLINK_POLL		8
421418fe01fSmglocker #define BWI_LED_ACT_UNKN		9
4228a1cd61dSmglocker #define BWI_LED_ACT_ASSOC		10
423418fe01fSmglocker #define BWI_LED_ACT_NULL		11
424418fe01fSmglocker 
4258a1cd61dSmglocker #define BWI_VENDOR_LED_ACT_COMPAQ	\
4268a1cd61dSmglocker 	BWI_LED_ACT_RF_ENABLED,		\
4278a1cd61dSmglocker 	BWI_LED_ACT_2GHZ,		\
4288a1cd61dSmglocker 	BWI_LED_ACT_5GHZ,		\
4298a1cd61dSmglocker 	BWI_LED_ACT_OFF
4308a1cd61dSmglocker 
4318a1cd61dSmglocker #define BWI_VENDOR_LED_ACT_LINKSYS	\
4328a1cd61dSmglocker 	BWI_LED_ACT_ASSOC,		\
4338a1cd61dSmglocker 	BWI_LED_ACT_2GHZ,		\
4348a1cd61dSmglocker 	BWI_LED_ACT_5GHZ,		\
4358a1cd61dSmglocker 	BWI_LED_ACT_OFF
4368a1cd61dSmglocker 
4378a1cd61dSmglocker #define BWI_VENDOR_LED_ACT_DEFAULT	\
4388a1cd61dSmglocker 	BWI_LED_ACT_BLINK,		\
4398a1cd61dSmglocker 	BWI_LED_ACT_2GHZ,		\
4408a1cd61dSmglocker 	BWI_LED_ACT_5GHZ,		\
4418a1cd61dSmglocker 	BWI_LED_ACT_OFF
4428a1cd61dSmglocker 
443418fe01fSmglocker /*
4441efc4635Sjsg  * BBP IDs
4451efc4635Sjsg  */
4461efc4635Sjsg #define BWI_BBPID_BCM4301		0x4301
4471efc4635Sjsg #define BWI_BBPID_BCM4306		0x4306
4481efc4635Sjsg #define BWI_BBPID_BCM4317		0x4317
4491efc4635Sjsg #define BWI_BBPID_BCM4320		0x4320
4501efc4635Sjsg #define BWI_BBPID_BCM4321		0x4321
4511efc4635Sjsg 
4521efc4635Sjsg /*
4531efc4635Sjsg  * Register window types
4541efc4635Sjsg  */
4551efc4635Sjsg #define BWI_REGWIN_T_COM		0x800
4561efc4635Sjsg #define BWI_REGWIN_T_BUSPCI		0x804
4571efc4635Sjsg #define BWI_REGWIN_T_MAC		0x812
4581efc4635Sjsg #define BWI_REGWIN_T_BUSPCIE		0x820
4591efc4635Sjsg 
4601efc4635Sjsg /*
4611efc4635Sjsg  * MAC interrupts
4621efc4635Sjsg  */
463b2ffa9ccSmglocker #define BWI_INTR_READY			(1 << 0)
464b2ffa9ccSmglocker #define BWI_INTR_BEACON			(1 << 1)
465b2ffa9ccSmglocker #define BWI_INTR_TBTT			(1 << 2)
466b2ffa9ccSmglocker #define BWI_INTR_EO_ATIM		(1 << 5)	/* End of ATIM */
467b2ffa9ccSmglocker #define BWI_INTR_PMQ			(1 << 6)	/* XXX?? */
468b2ffa9ccSmglocker #define BWI_INTR_MAC_TXERR		(1 << 9)
469b2ffa9ccSmglocker #define BWI_INTR_PHY_TXERR		(1 << 11)
470b2ffa9ccSmglocker #define BWI_INTR_TIMER1			(1 << 14)
471b2ffa9ccSmglocker #define BWI_INTR_RX_DONE		(1 << 15)
472b2ffa9ccSmglocker #define BWI_INTR_TX_FIFO		(1 << 16)	/* XXX?? */
473b2ffa9ccSmglocker #define BWI_INTR_NOISE			(1 << 18)
474b2ffa9ccSmglocker #define BWI_INTR_RF_DISABLED		(1 << 28)
475b2ffa9ccSmglocker #define BWI_INTR_TX_DONE		(1 << 29)
4761efc4635Sjsg 
4771efc4635Sjsg #define BWI_INIT_INTRS							\
4781efc4635Sjsg 	(BWI_INTR_READY | BWI_INTR_BEACON | BWI_INTR_TBTT |		\
4791efc4635Sjsg 	 BWI_INTR_EO_ATIM | BWI_INTR_PMQ | BWI_INTR_MAC_TXERR |		\
4801efc4635Sjsg 	 BWI_INTR_PHY_TXERR | BWI_INTR_RX_DONE | BWI_INTR_TX_FIFO |	\
4811efc4635Sjsg 	 BWI_INTR_NOISE | BWI_INTR_RF_DISABLED | BWI_INTR_TX_DONE)
4821efc4635Sjsg #define BWI_ALL_INTRS			0xffffffff
4831efc4635Sjsg 
4841efc4635Sjsg /*
4851efc4635Sjsg  * TX/RX interrupts
4861efc4635Sjsg  */
487a0fd6b98Sstsp 
488a0fd6b98Sstsp /* from brcmsmac */
489a0fd6b98Sstsp #define	BWI_I_PC		(1 << 10)	/* pci descriptor error */
490a0fd6b98Sstsp #define	BWI_I_PD		(1 << 11)	/* pci data error */
491a0fd6b98Sstsp #define	BWI_I_DE		(1 << 12)	/* descriptor protocol error */
492a0fd6b98Sstsp #define	BWI_I_RU		(1 << 13)	/* receive descriptor underflow */
493a0fd6b98Sstsp #define	BWI_I_RO		(1 << 14)	/* receive fifo overflow */
494a0fd6b98Sstsp #define	BWI_I_XU		(1 << 15)	/* transmit fifo underflow */
495a0fd6b98Sstsp #define	BWI_I_RI		(1 << 16)	/* receive interrupt */
496a0fd6b98Sstsp #define	BWI_I_XI		(1 << 24)	/* transmit interrupt */
497a0fd6b98Sstsp 
498a0fd6b98Sstsp #define BWI_TXRX_INTR_ERROR		(BWI_I_XU | BWI_I_RO | BWI_I_DE | \
499a0fd6b98Sstsp 					 BWI_I_PD | BWI_I_PC)
500a0fd6b98Sstsp #define BWI_TXRX_INTR_RX		BWI_I_RI
5011efc4635Sjsg #define BWI_TXRX_TX_INTRS		BWI_TXRX_INTR_ERROR
5021efc4635Sjsg #define BWI_TXRX_RX_INTRS		(BWI_TXRX_INTR_ERROR | BWI_TXRX_INTR_RX)
5031efc4635Sjsg #define BWI_TXRX_IS_RX(i)		((i) % 3 == 0)
5041efc4635Sjsg 
5051efc4635Sjsg /* PHY */
5061efc4635Sjsg 
5071efc4635Sjsg #define BWI_PHYR_NRSSI_THR_11B		0x020
5081efc4635Sjsg #define BWI_PHYR_BBP_ATTEN		0x060
5091efc4635Sjsg #define BWI_PHYR_TBL_CTRL_11A		0x072
5101efc4635Sjsg #define BWI_PHYR_TBL_DATA_LO_11A	0x073
5111efc4635Sjsg #define BWI_PHYR_TBL_DATA_HI_11A	0x074
5121efc4635Sjsg #define BWI_PHYR_TBL_CTRL_11G		0x472
5131efc4635Sjsg #define BWI_PHYR_TBL_DATA_LO_11G	0x473
5141efc4635Sjsg #define BWI_PHYR_TBL_DATA_HI_11G	0x474
5151efc4635Sjsg #define BWI_PHYR_NRSSI_THR_11G		0x48a
5161efc4635Sjsg #define BWI_PHYR_NRSSI_CTRL		0x803
5171efc4635Sjsg #define BWI_PHYR_NRSSI_DATA		0x804
5181efc4635Sjsg #define BWI_PHYR_RF_LO			0x810
5191efc4635Sjsg 
5201efc4635Sjsg /*
5211efc4635Sjsg  * PHY Tables
5221efc4635Sjsg  */
5231efc4635Sjsg /*
5241efc4635Sjsg  * http://bcm-specs.sipsolutions.net/APHYSetup/FineFrequency
5251efc4635Sjsg  * G PHY
5261efc4635Sjsg  */
5271efc4635Sjsg #define BWI_PHY_FREQ_11G_REV1						\
5281efc4635Sjsg 	0x0089,	0x02e9,	0x0409,	0x04e9,	0x05a9,	0x0669,	0x0709,	0x0789,	\
5291efc4635Sjsg 	0x0829,	0x08a9,	0x0929,	0x0989,	0x0a09,	0x0a69,	0x0ac9,	0x0b29,	\
5301efc4635Sjsg 	0x0ba9,	0x0be9,	0x0c49,	0x0ca9,	0x0d09,	0x0d69,	0x0da9,	0x0e09,	\
5311efc4635Sjsg 	0x0e69,	0x0ea9,	0x0f09,	0x0f49,	0x0fa9,	0x0fe9,	0x1029,	0x1089,	\
5321efc4635Sjsg 	0x10c9,	0x1109,	0x1169,	0x11a9,	0x11e9,	0x1229,	0x1289,	0x12c9,	\
5331efc4635Sjsg 	0x1309,	0x1349,	0x1389,	0x13c9,	0x1409,	0x1449,	0x14a9,	0x14e9,	\
5341efc4635Sjsg 	0x1529,	0x1569,	0x15a9,	0x15e9,	0x1629,	0x1669,	0x16a9,	0x16e8,	\
5351efc4635Sjsg 	0x1728,	0x1768,	0x17a8,	0x17e8,	0x1828,	0x1868,	0x18a8,	0x18e8,	\
5361efc4635Sjsg 	0x1928,	0x1968,	0x19a8,	0x19e8,	0x1a28,	0x1a68,	0x1aa8,	0x1ae8,	\
5371efc4635Sjsg 	0x1b28,	0x1b68,	0x1ba8,	0x1be8,	0x1c28,	0x1c68,	0x1ca8,	0x1ce8,	\
5381efc4635Sjsg 	0x1d28,	0x1d68,	0x1dc8,	0x1e08,	0x1e48,	0x1e88,	0x1ec8,	0x1f08,	\
5391efc4635Sjsg 	0x1f48,	0x1f88,	0x1fe8,	0x2028,	0x2068,	0x20a8,	0x2108,	0x2148,	\
5401efc4635Sjsg 	0x2188,	0x21c8,	0x2228,	0x2268,	0x22c8,	0x2308,	0x2348,	0x23a8,	\
5411efc4635Sjsg 	0x23e8,	0x2448,	0x24a8,	0x24e8,	0x2548,	0x25a8,	0x2608,	0x2668,	\
5421efc4635Sjsg 	0x26c8,	0x2728,	0x2787,	0x27e7,	0x2847,	0x28c7,	0x2947,	0x29a7,	\
5431efc4635Sjsg 	0x2a27,	0x2ac7,	0x2b47,	0x2be7,	0x2ca7,	0x2d67,	0x2e47,	0x2f67,	\
5441efc4635Sjsg 	0x3247,	0x3526,	0x3646,	0x3726,	0x3806,	0x38a6,	0x3946,	0x39e6,	\
5451efc4635Sjsg 	0x3a66,	0x3ae6,	0x3b66,	0x3bc6,	0x3c45,	0x3ca5,	0x3d05,	0x3d85,	\
5461efc4635Sjsg 	0x3de5,	0x3e45,	0x3ea5,	0x3ee5,	0x3f45,	0x3fa5,	0x4005,	0x4045,	\
5471efc4635Sjsg 	0x40a5,	0x40e5,	0x4145,	0x4185,	0x41e5,	0x4225,	0x4265,	0x42c5,	\
5481efc4635Sjsg 	0x4305,	0x4345,	0x43a5,	0x43e5,	0x4424,	0x4464,	0x44c4,	0x4504,	\
5491efc4635Sjsg 	0x4544,	0x4584,	0x45c4,	0x4604,	0x4644,	0x46a4,	0x46e4,	0x4724,	\
5501efc4635Sjsg 	0x4764,	0x47a4,	0x47e4,	0x4824,	0x4864,	0x48a4,	0x48e4,	0x4924,	\
5511efc4635Sjsg 	0x4964,	0x49a4,	0x49e4,	0x4a24,	0x4a64,	0x4aa4,	0x4ae4,	0x4b23,	\
5521efc4635Sjsg 	0x4b63,	0x4ba3,	0x4be3,	0x4c23,	0x4c63,	0x4ca3,	0x4ce3,	0x4d23,	\
5531efc4635Sjsg 	0x4d63,	0x4da3,	0x4de3,	0x4e23,	0x4e63,	0x4ea3,	0x4ee3,	0x4f23,	\
5541efc4635Sjsg 	0x4f63,	0x4fc3,	0x5003,	0x5043,	0x5083,	0x50c3,	0x5103,	0x5143,	\
5551efc4635Sjsg 	0x5183,	0x51e2,	0x5222,	0x5262,	0x52a2,	0x52e2,	0x5342,	0x5382,	\
5561efc4635Sjsg 	0x53c2,	0x5402,	0x5462,	0x54a2,	0x5502,	0x5542,	0x55a2,	0x55e2,	\
5571efc4635Sjsg 	0x5642,	0x5682,	0x56e2,	0x5722,	0x5782,	0x57e1,	0x5841,	0x58a1,	\
5581efc4635Sjsg 	0x5901,	0x5961,	0x59c1,	0x5a21,	0x5aa1,	0x5b01,	0x5b81,	0x5be1,	\
5591efc4635Sjsg 	0x5c61,	0x5d01,	0x5d80,	0x5e20,	0x5ee0,	0x5fa0,	0x6080,	0x61c0
5601efc4635Sjsg 
5611efc4635Sjsg /*
5621efc4635Sjsg  * http://bcm-specs.sipsolutions.net/APHYSetup/noise_table
5631efc4635Sjsg  */
5641efc4635Sjsg /* G PHY Revision 1 */
5651efc4635Sjsg #define BWI_PHY_NOISE_11G_REV1 \
5661efc4635Sjsg 	0x013c,	0x01f5,	0x031a,	0x0631,	0x0001,	0x0001,	0x0001,	0x0001
5671efc4635Sjsg /* G PHY generic */
5681efc4635Sjsg #define BWI_PHY_NOISE_11G \
5691efc4635Sjsg 	0x5484, 0x3c40, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
5701efc4635Sjsg 
5711efc4635Sjsg /*
5721efc4635Sjsg  * http://bcm-specs.sipsolutions.net/APHYSetup/rotor_table
5731efc4635Sjsg  * G PHY Revision 1
5741efc4635Sjsg  */
5751efc4635Sjsg #define BWI_PHY_ROTOR_11G_REV1				\
5761efc4635Sjsg 	0xfeb93ffd, 0xfec63ffd, 0xfed23ffd, 0xfedf3ffd,	\
5771efc4635Sjsg 	0xfeec3ffe, 0xfef83ffe, 0xff053ffe, 0xff113ffe,	\
5781efc4635Sjsg 	0xff1e3ffe, 0xff2a3fff, 0xff373fff, 0xff443fff,	\
5791efc4635Sjsg 	0xff503fff, 0xff5d3fff, 0xff693fff, 0xff763fff,	\
5801efc4635Sjsg 	0xff824000, 0xff8f4000, 0xff9b4000, 0xffa84000,	\
5811efc4635Sjsg 	0xffb54000, 0xffc14000, 0xffce4000, 0xffda4000,	\
5821efc4635Sjsg 	0xffe74000, 0xfff34000, 0x00004000, 0x000d4000,	\
5831efc4635Sjsg 	0x00194000, 0x00264000, 0x00324000, 0x003f4000,	\
5841efc4635Sjsg 	0x004b4000, 0x00584000, 0x00654000, 0x00714000,	\
5851efc4635Sjsg 	0x007e4000, 0x008a3fff, 0x00973fff, 0x00a33fff,	\
5861efc4635Sjsg 	0x00b03fff, 0x00bc3fff, 0x00c93fff, 0x00d63fff,	\
5871efc4635Sjsg 	0x00e23ffe, 0x00ef3ffe, 0x00fb3ffe, 0x01083ffe,	\
5881efc4635Sjsg 	0x01143ffe, 0x01213ffd, 0x012e3ffd, 0x013a3ffd,	\
5891efc4635Sjsg 	0x01473ffd
5901efc4635Sjsg 
5911efc4635Sjsg /*
5921efc4635Sjsg  * http://bcm-specs.sipsolutions.net/APHYSetup/noise_scale_table
5931efc4635Sjsg  */
5941efc4635Sjsg /* G PHY Revision [0,2] */
5951efc4635Sjsg #define BWI_PHY_NOISE_SCALE_11G_REV2					\
5961efc4635Sjsg 	0x6c77,	0x5162,	0x3b40,	0x3335,	0x2f2d,	0x2a2a,	0x2527,	0x1f21,	\
5971efc4635Sjsg 	0x1a1d,	0x1719,	0x1616,	0x1414,	0x1414,	0x1400,	0x1414,	0x1614,	\
5981efc4635Sjsg 	0x1716,	0x1a19,	0x1f1d,	0x2521,	0x2a27,	0x2f2a,	0x332d,	0x3b35,	\
5991efc4635Sjsg 	0x5140,	0x6c62,	0x0077
600*4b1a56afSjsg /* G PHY Revision 7 */
6011efc4635Sjsg #define BWI_PHY_NOISE_SCALE_11G_REV7					\
6021efc4635Sjsg 	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	\
6031efc4635Sjsg 	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa400,	0xa4a4,	0xa4a4,	\
6041efc4635Sjsg 	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	0xa4a4,	\
6051efc4635Sjsg 	0xa4a4,	0xa4a4,	0x00a4
6061efc4635Sjsg /* G PHY generic */
6071efc4635Sjsg #define BWI_PHY_NOISE_SCALE_11G						\
6081efc4635Sjsg 	0xd8dd,	0xcbd4,	0xbcc0,	0xb6b7,	0xb2b0,	0xadad,	0xa7a9,	0x9fa1,	\
6091efc4635Sjsg 	0x969b,	0x9195,	0x8f8f,	0x8a8a,	0x8a8a,	0x8a00,	0x8a8a,	0x8f8a,	\
6101efc4635Sjsg 	0x918f,	0x9695,	0x9f9b,	0xa7a1,	0xada9,	0xb2ad,	0xb6b0,	0xbcb7,	\
6111efc4635Sjsg 	0xcbc0,	0xd8d4,	0x00dd
6121efc4635Sjsg 
6131efc4635Sjsg /*
6141efc4635Sjsg  * http://bcm-specs.sipsolutions.net/APHYSetup/sigma_square_table
6151efc4635Sjsg  */
6161efc4635Sjsg /* G PHY Revision 2 */
6171efc4635Sjsg #define BWI_PHY_SIGMA_SQ_11G_REV2					\
6181efc4635Sjsg 	0x007a,	0x0075,	0x0071,	0x006c,	0x0067,	0x0063,	0x005e,	0x0059,	\
6191efc4635Sjsg 	0x0054,	0x0050,	0x004b,	0x0046,	0x0042,	0x003d,	0x003d,	0x003d,	\
6201efc4635Sjsg 	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	\
6211efc4635Sjsg 	0x003d,	0x003d,	0x0000,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	\
6221efc4635Sjsg 	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	0x003d,	\
6231efc4635Sjsg 	0x0042,	0x0046,	0x004b,	0x0050,	0x0054,	0x0059,	0x005e,	0x0063,	\
6241efc4635Sjsg 	0x0067,	0x006c,	0x0071,	0x0075,	0x007a
6251efc4635Sjsg /* G PHY Revision (2,7] */
6261efc4635Sjsg #define BWI_PHY_SIGMA_SQ_11G_REV7					\
6271efc4635Sjsg 	0x00de,	0x00dc,	0x00da,	0x00d8,	0x00d6,	0x00d4,	0x00d2,	0x00cf,	\
6281efc4635Sjsg 	0x00cd,	0x00ca,	0x00c7,	0x00c4,	0x00c1,	0x00be,	0x00be,	0x00be,	\
6291efc4635Sjsg 	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	\
6301efc4635Sjsg 	0x00be,	0x00be,	0x0000,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	\
6311efc4635Sjsg 	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	0x00be,	\
6321efc4635Sjsg 	0x00c1,	0x00c4,	0x00c7,	0x00ca,	0x00cd,	0x00cf,	0x00d2,	0x00d4,	\
6331efc4635Sjsg 	0x00d6,	0x00d8,	0x00da,	0x00dc,	0x00de
6341efc4635Sjsg 
6351efc4635Sjsg /*
6361efc4635Sjsg  * http://bcm-specs.sipsolutions.net/APHYSetup/retard_table
6371efc4635Sjsg  * G PHY
6381efc4635Sjsg  */
6391efc4635Sjsg #define BWI_PHY_DELAY_11G_REV1				\
6401efc4635Sjsg 	0xdb93cb87, 0xd666cf64, 0xd1fdd358, 0xcda6d826,	\
6411efc4635Sjsg 	0xca38dd9f, 0xc729e2b4, 0xc469e88e, 0xc26aee2b,	\
6421efc4635Sjsg 	0xc0def46c, 0xc073fa62, 0xc01d00d5, 0xc0760743,	\
6431efc4635Sjsg 	0xc1560d1e, 0xc2e51369, 0xc4ed18ff, 0xc7ac1ed7,	\
6441efc4635Sjsg 	0xcb2823b2, 0xcefa28d9, 0xd2f62d3f, 0xd7bb3197,	\
6451efc4635Sjsg 	0xdce53568, 0xe1fe3875, 0xe7d13b35, 0xed663d35,	\
6461efc4635Sjsg 	0xf39b3ec4, 0xf98e3fa7, 0x00004000, 0x06723fa7,	\
6471efc4635Sjsg 	0x0c653ec4, 0x129a3d35, 0x182f3b35, 0x1e023875,	\
6481efc4635Sjsg 	0x231b3568, 0x28453197, 0x2d0a2d3f, 0x310628d9,	\
6491efc4635Sjsg 	0x34d823b2, 0x38541ed7, 0x3b1318ff, 0x3d1b1369,	\
6501efc4635Sjsg 	0x3eaa0d1e, 0x3f8a0743, 0x3fe300d5, 0x3f8dfa62,	\
6511efc4635Sjsg 	0x3f22f46c, 0x3d96ee2b, 0x3b97e88e, 0x38d7e2b4,	\
6521efc4635Sjsg 	0x35c8dd9f, 0x325ad826, 0x2e03d358, 0x299acf64,	\
6531efc4635Sjsg 	0x246dcb87
6541efc4635Sjsg 
6551efc4635Sjsg /* RF */
6561efc4635Sjsg 
6571efc4635Sjsg #define BWI_RFR_ATTEN			0x43
6581efc4635Sjsg 
6591efc4635Sjsg #define BWI_RFR_TXPWR			0x52
660b2ffa9ccSmglocker #define BWI_RFR_TXPWR1_MASK		0x0070
6611efc4635Sjsg 
6621efc4635Sjsg #define BWI_RFR_BBP_ATTEN		0x60
663b2ffa9ccSmglocker #define BWI_RFR_BBP_ATTEN_CALIB_BIT	(1 << 0)
664b2ffa9ccSmglocker #define BWI_RFR_BBP_ATTEN_CALIB_IDX	(0x0f << 1)
6651efc4635Sjsg 
6661efc4635Sjsg /*
6671efc4635Sjsg  * TSSI -- TX power maps
6681efc4635Sjsg  */
6691efc4635Sjsg /*
6701efc4635Sjsg  * http://bcm-specs.sipsolutions.net/TSSI_to_DBM_Table
6711efc4635Sjsg  * B PHY
6721efc4635Sjsg  */
6731efc4635Sjsg #define BWI_TXPOWER_MAP_11B						\
6741efc4635Sjsg 	0x4d,	0x4c,	0x4b,	0x4a,	0x4a,	0x49,	0x48,	0x47,	\
6751efc4635Sjsg 	0x47,	0x46,	0x45,	0x45,	0x44,	0x43,	0x42,	0x42,	\
6761efc4635Sjsg 	0x41,	0x40,	0x3f,	0x3e,	0x3d,	0x3c,	0x3b,	0x3a,	\
6771efc4635Sjsg 	0x39,	0x38,	0x37,	0x36,	0x35,	0x34,	0x32,	0x31,	\
6781efc4635Sjsg 	0x30,	0x2f,	0x2d,	0x2c,	0x2b,	0x29,	0x28,	0x26,	\
6791efc4635Sjsg 	0x25,	0x23,	0x21,	0x1f,	0x1d,	0x1a,	0x17,	0x14,	\
6801efc4635Sjsg 	0x10,	0x0c,	0x06,	0x00,	-7,	-7,	-7,	-7, 	\
6811efc4635Sjsg 	-7,	-7,	-7,	-7,	-7,	-7,	-7,	-7
6821efc4635Sjsg /*
6831efc4635Sjsg  * http://bcm-specs.sipsolutions.net/TSSI_to_DBM_Table
6841efc4635Sjsg  * G PHY
6851efc4635Sjsg  */
6861efc4635Sjsg #define BWI_TXPOWER_MAP_11G						\
6871efc4635Sjsg 	77,	77,	77,	76,	76,	76,	75,	75,	\
6881efc4635Sjsg 	74,	74,	73,	73,	73,	72,	72,	71,	\
6891efc4635Sjsg 	71,	70,	70,	69,	68,	68,	67,	67,	\
6901efc4635Sjsg 	66,	65,	65,	64,	63,	63,	62,	61,	\
6911efc4635Sjsg 	60,	59,	58,	57,	56,	55,	54,	53,	\
6921efc4635Sjsg 	52,	50,	49,	47,	45,	43,	40,	37,	\
6931efc4635Sjsg 	33,	28,	22,	14,	5,	-7,	-20,	-20,	\
6941efc4635Sjsg 	-20,	-20,	-20,	-20,	-20,	-20,	-20,	-20
6951efc4635Sjsg 
6961efc4635Sjsg /* Find least significant bit that is set */
6971efc4635Sjsg #define	__LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask))
6981efc4635Sjsg 
6991efc4635Sjsg #define	__SHIFTOUT(__x, __mask) (((__x) & (__mask)) / __LOWEST_SET_BIT(__mask))
7001efc4635Sjsg #define	__SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask))
7011efc4635Sjsg #define	__SHIFTOUT_MASK(__mask) __SHIFTOUT((__mask), (__mask))
7021efc4635Sjsg 
7031efc4635Sjsg #endif	/* !_IF_BWIREG_H */
704