2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Ralink Wireless Chip related definition & structures
35 -------- ---------- ----------------------------------------------
38 #ifndef __RTMP_CHIP_H__
39 #define __RTMP_CHIP_H__
41 #include "rtmp_type.h"
55 // We will have a cost down version which mac version is 0x3090xxxx
60 // b) Replacement for RT3090
62 // d) Interference over channel #14
63 // e) New BBP features (e.g., SIG re-modulation)
65 #define IS_RT3090A(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
67 // We will have a cost down version which mac version is 0x3090xxxx
68 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (IS_RT3090A(_pAd)))
70 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
71 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
72 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
74 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000||IS_RT3090A(_pAd))
75 //#define IS_RT305X(_pAd) ((_pAd)->MACVersion == 0x28720200)
77 /* RT3572, 3592, 3562, 3062 share the same MAC version */
78 #define IS_RT3572(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x35720000)
79 #define IS_VERSION_BEFORE_F(_pAd) (((_pAd)->MACVersion&0xffff) <= 0x0211)
80 // F version is 0x0212, E version is 0x0211. 309x can save more power after F version.
81 #define IS_VERSION_AFTER_F(_pAd) ((((_pAd)->MACVersion&0xffff) >= 0x0212) || (((_pAd)->b3090ESpecialChip == TRUE)))
85 // a) Base on RT3090 (RF IC: RT3020)
89 // e) Internal components: PA and LNA
92 #define IS_RT3390(_pAd) (((_pAd)->MACVersion & 0xFFFF0000) == 0x33900000)
94 // ------------------------------------------------------
95 // PCI registers - base address 0x0000
96 // ------------------------------------------------------
97 #define CHIP_PCI_CFG 0x0000
98 #define CHIP_PCI_EECTRL 0x0004
99 #define CHIP_PCI_MCUCTRL 0x0008
103 #define RETRY_LIMIT 10
107 // ------------------------------------------------------
108 // BBP & RF definition
109 // ------------------------------------------------------
114 //-------------------------------------------------------------------------
116 //-------------------------------------------------------------------------
123 #define EEPROM_WRITE_OPCODE 0x05
124 #define EEPROM_READ_OPCODE 0x06
125 #define EEPROM_EWDS_OPCODE 0x10
126 #define EEPROM_EWEN_OPCODE 0x13
128 #define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs
129 #define NUM_EEPROM_TX_G_PARMS 7
130 #define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID
131 #define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID
132 #define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID
133 #define EEPROM_G_TX_PWR_OFFSET 0x52
134 #define EEPROM_G_TX2_PWR_OFFSET 0x60
135 #define EEPROM_LED1_OFFSET 0x3c
136 #define EEPROM_LED2_OFFSET 0x3e
137 #define EEPROM_LED3_OFFSET 0x40
138 #define EEPROM_LNA_OFFSET 0x44
139 #define EEPROM_RSSI_BG_OFFSET 0x46
140 #define EEPROM_TXMIXER_GAIN_2_4G 0x48
141 #define EEPROM_RSSI_A_OFFSET 0x4a
142 #define EEPROM_TXMIXER_GAIN_5G 0x4c
143 #define EEPROM_DEFINE_MAX_TXPWR 0x4e
144 #define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power.
145 #define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power.
146 #define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power.
147 #define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power.
148 #define EEPROM_A_TX_PWR_OFFSET 0x78
149 #define EEPROM_A_TX2_PWR_OFFSET 0xa6
150 //#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j
151 //#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe
152 //#define EEPROM_TSSI_REF_OFFSET 0x54
153 //#define EEPROM_TSSI_DELTA_OFFSET 0x24
154 //#define EEPROM_CCK_TX_PWR_OFFSET 0x62
155 //#define EEPROM_CALIBRATE_OFFSET 0x7c
156 #define EEPROM_VERSION_OFFSET 0x02
157 #define EEPROM_FREQ_OFFSET 0x3a
158 #define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power.
159 #define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ.
160 #define VALID_EEPROM_VERSION 1
164 * EEPROM operation related marcos
166 #define RT28xx_EEPROM_READ16(_pAd, _offset, _value) \
167 (_pAd)->chipOps.eeread((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (PUSHORT)&(_value))
169 #define RT28xx_EEPROM_WRITE16(_pAd, _offset, _value) \
170 (_pAd)->chipOps.eewrite((RTMP_ADAPTER *)(_pAd), (USHORT)(_offset), (USHORT)(_value))
174 // -------------------------------------------------------------------
175 // E2PROM data layout
176 // -------------------------------------------------------------------
179 // MCU_LEDCS: MCU LED Control Setting.
181 typedef union _MCU_LEDCS_STRUC
{
189 #endif // RT_BIG_ENDIAN //
192 } MCU_LEDCS_STRUC
, *PMCU_LEDCS_STRUC
;
196 // EEPROM antenna select format
199 typedef union _EEPROM_ANTENNA_STRUC
{
202 USHORT RfIcType
:4; // see E2PROM document
203 USHORT TxPath
:4; // 1: 1T, 2: 2T
204 USHORT RxPath
:4; // 1: 1R, 2: 2R, 3: 3R
207 } EEPROM_ANTENNA_STRUC
, *PEEPROM_ANTENNA_STRUC
;
209 typedef union _EEPROM_ANTENNA_STRUC
{
211 USHORT RxPath
:4; // 1: 1R, 2: 2R, 3: 3R
212 USHORT TxPath
:4; // 1: 1T, 2: 2T
213 USHORT RfIcType
:4; // see E2PROM document
217 } EEPROM_ANTENNA_STRUC
, *PEEPROM_ANTENNA_STRUC
;
221 typedef union _EEPROM_NIC_CINFIG2_STRUC
{
223 USHORT DACTestBit
:1; // control if driver should patch the DAC issue
224 USHORT Rsv2
:3; // must be 0
225 USHORT AntDiversity
:1; // Antenna diversity
226 USHORT Rsv1
:1; // must be 0
227 USHORT BW40MAvailForA
:1; // 0:enable, 1:disable
228 USHORT BW40MAvailForG
:1; // 0:enable, 1:disable
229 USHORT EnableWPSPBC
:1; // WPS PBC Control bit
230 USHORT BW40MSidebandForA
:1;
231 USHORT BW40MSidebandForG
:1;
232 USHORT CardbusAcceleration
:1; // !!! NOTE: 0 - enable, 1 - disable
233 USHORT ExternalLNAForA
:1; // external LNA enable for 5G
234 USHORT ExternalLNAForG
:1; // external LNA enable for 2.4G
235 USHORT DynamicTxAgcControl
:1; //
236 USHORT HardwareRadioControl
:1; // Whether RF is controlled by driver or HW. 1:enable hw control, 0:disable
239 } EEPROM_NIC_CONFIG2_STRUC
, *PEEPROM_NIC_CONFIG2_STRUC
;
241 typedef union _EEPROM_NIC_CINFIG2_STRUC
{
243 USHORT HardwareRadioControl
:1; // 1:enable, 0:disable
244 USHORT DynamicTxAgcControl
:1; //
245 USHORT ExternalLNAForG
:1; //
246 USHORT ExternalLNAForA
:1; // external LNA enable for 2.4G
247 USHORT CardbusAcceleration
:1; // !!! NOTE: 0 - enable, 1 - disable
248 USHORT BW40MSidebandForG
:1;
249 USHORT BW40MSidebandForA
:1;
250 USHORT EnableWPSPBC
:1; // WPS PBC Control bit
251 USHORT BW40MAvailForG
:1; // 0:enable, 1:disable
252 USHORT BW40MAvailForA
:1; // 0:enable, 1:disable
253 USHORT Rsv1
:1; // must be 0
254 USHORT AntDiversity
:1; // Antenna diversity
255 USHORT Rsv2
:3; // must be 0
256 USHORT DACTestBit
:1; // control if driver should patch the DAC issue
259 } EEPROM_NIC_CONFIG2_STRUC
, *PEEPROM_NIC_CONFIG2_STRUC
;
263 // TX_PWR Value valid range 0xFA(-6) ~ 0x24(36)
266 typedef union _EEPROM_TX_PWR_STRUC
{
268 CHAR Byte1
; // High Byte
269 CHAR Byte0
; // Low Byte
272 } EEPROM_TX_PWR_STRUC
, *PEEPROM_TX_PWR_STRUC
;
274 typedef union _EEPROM_TX_PWR_STRUC
{
276 CHAR Byte0
; // Low Byte
277 CHAR Byte1
; // High Byte
280 } EEPROM_TX_PWR_STRUC
, *PEEPROM_TX_PWR_STRUC
;
284 typedef union _EEPROM_VERSION_STRUC
{
286 UCHAR Version
; // High Byte
287 UCHAR FaeReleaseNumber
; // Low Byte
290 } EEPROM_VERSION_STRUC
, *PEEPROM_VERSION_STRUC
;
292 typedef union _EEPROM_VERSION_STRUC
{
294 UCHAR FaeReleaseNumber
; // Low Byte
295 UCHAR Version
; // High Byte
298 } EEPROM_VERSION_STRUC
, *PEEPROM_VERSION_STRUC
;
302 typedef union _EEPROM_LED_STRUC
{
304 USHORT Rsvd
:3; // Reserved
305 USHORT LedMode
:5; // Led mode.
306 USHORT PolarityGPIO_4
:1; // Polarity GPIO#4 setting.
307 USHORT PolarityGPIO_3
:1; // Polarity GPIO#3 setting.
308 USHORT PolarityGPIO_2
:1; // Polarity GPIO#2 setting.
309 USHORT PolarityGPIO_1
:1; // Polarity GPIO#1 setting.
310 USHORT PolarityGPIO_0
:1; // Polarity GPIO#0 setting.
311 USHORT PolarityACT
:1; // Polarity ACT setting.
312 USHORT PolarityRDY_A
:1; // Polarity RDY_A setting.
313 USHORT PolarityRDY_G
:1; // Polarity RDY_G setting.
316 } EEPROM_LED_STRUC
, *PEEPROM_LED_STRUC
;
318 typedef union _EEPROM_LED_STRUC
{
320 USHORT PolarityRDY_G
:1; // Polarity RDY_G setting.
321 USHORT PolarityRDY_A
:1; // Polarity RDY_A setting.
322 USHORT PolarityACT
:1; // Polarity ACT setting.
323 USHORT PolarityGPIO_0
:1; // Polarity GPIO#0 setting.
324 USHORT PolarityGPIO_1
:1; // Polarity GPIO#1 setting.
325 USHORT PolarityGPIO_2
:1; // Polarity GPIO#2 setting.
326 USHORT PolarityGPIO_3
:1; // Polarity GPIO#3 setting.
327 USHORT PolarityGPIO_4
:1; // Polarity GPIO#4 setting.
328 USHORT LedMode
:5; // Led mode.
329 USHORT Rsvd
:3; // Reserved
332 } EEPROM_LED_STRUC
, *PEEPROM_LED_STRUC
;
336 typedef union _EEPROM_TXPOWER_DELTA_STRUC
{
338 UCHAR TxPowerEnable
:1;// Enable
339 UCHAR Type
:1; // 1: plus the delta value, 0: minus the delta value
340 UCHAR DeltaValue
:6; // Tx Power dalta value (MAX=4)
343 } EEPROM_TXPOWER_DELTA_STRUC
, *PEEPROM_TXPOWER_DELTA_STRUC
;
345 typedef union _EEPROM_TXPOWER_DELTA_STRUC
{
347 UCHAR DeltaValue
:6; // Tx Power dalta value (MAX=4)
348 UCHAR Type
:1; // 1: plus the delta value, 0: minus the delta value
349 UCHAR TxPowerEnable
:1;// Enable
352 } EEPROM_TXPOWER_DELTA_STRUC
, *PEEPROM_TXPOWER_DELTA_STRUC
;
355 #endif // __RTMP_CHIP_H__ //