diff options
Diffstat (limited to 'target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_hw.h')
-rw-r--r-- | target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_hw.h | 1878 |
1 files changed, 1878 insertions, 0 deletions
diff --git a/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_hw.h b/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_hw.h new file mode 100644 index 000000000..333fff4cf --- /dev/null +++ b/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_hw.h @@ -0,0 +1,1878 @@ +/* + * Header file for hardware related definitions + * + * $Id: 8192cd_hw.h,v 1.11.2.6 2010/11/11 07:54:36 button Exp $ + * + * Copyright (c) 2009 Realtek Semiconductor Corp. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef _8192CD_HW_H_ +#define _8192CD_HW_H_ + +#ifdef __KERNEL__ +#include <linux/module.h> +#include <linux/skbuff.h> +#include <asm/io.h> +#endif + +#ifdef __DRAYTEK_OS__ +#include <draytek/skbuff.h> +#endif + +#include "./8192c_reg.h" +#ifdef CONFIG_RTL_92D_SUPPORT +#include "./8192d_reg.h" +#endif +#include "./8192cd_cfg.h" + +#ifndef __KERNEL__ +#include "./sys-support.h" +#endif + +#include "./wifi.h" +#include "./8192cd_phyreg.h" + + +typedef unsigned char UCHAR; +typedef unsigned short USHORT; +typedef unsigned long ULONG; + +//#define RTL8192CD_REGS_SIZE ((0xff + 1) * 16) + + +#if 0 +enum _RF_TYPE_ { + _11BG_RF_ZEBRA_ = 0x07, + _11ABG_RF_OMC8255_ = 0x08, + _11ABG_RF_OMC8255B_ = 0x09, + _11BGN_RF_8256_ = 0x0a, +}; +#endif + +#define VERSION_MASK 0xf00f +enum _CHIP_VERSION_ { + VERSION_8188C = 0x1000, + VERSION_8192C = 0x1001, + VERSION_8192D = 0x1002, +}; + +#if 0 +enum _ZEBRA_VERSION_ { + VERSION_ZEBRA_A = 0, + VERSION_ZEBRA_B = 1, + VERSION_ZEBRA_C = 2, + VERSION_ZEBRA_E = 3, + VERSION_ZEBRA2_A = 4, +}; + +enum _TCR_CONFIG_ { + _DIS_REQ_QSZ_ = BIT(28), + _SAT_ = BIT(24), + + _TX_DMA16_ = 0x0, + _TX_DMA32_ = BIT(21), + _TX_DMA64_ = BIT(22), + _TX_DMA128_ = BIT(22) | BIT(21), + _TX_DMA256_ = BIT(23), + _TX_DMA512_ = BIT(23) | BIT(21), + _TX_DMA1K_ = BIT(23) | BIT(22), + _TX_DMA2K_ = BIT(23) | BIT(22) | BIT(21), + + _DISCW_ = BIT(20), + _ICV_APP_ = BIT(19), + + _MAC_LBK_ = BIT(17), + _BB_LBK_ = BIT(18), + _CNT_TX_ = BIT(18) | BIT(17), + + _DURPROCMODE_SHIFT_ = 30, + _SRL_SHIFT_ = 8, + _LRL_SHIFT_ = 0, +}; + +enum _RCR_CONFIG_ { + _ERLYRXEN_ = BIT(31), + _ENCS2_ = BIT(30), + _ENCS1_ = BIT(29), + _ENMARP_ = BIT(28), + _ENMBID_ = BIT(27), + _CAM_SEARCH_ = BIT(26), + + _CBSSID_ = BIT(23), + _APWRMGT_ = BIT(22), + _ADD3_ = BIT(21), + _AMF_ = BIT(20), + _ACF_ = BIT(19), + _ADF_ = BIT(18), + + _RX_ERLY64_ = BIT(14), + _RX_ERLY128_ = BIT(13) | BIT(14), + _RX_ERLY256_ = BIT(15), + _RX_ERLY512_ = BIT(15) | BIT(13), + _RX_ERLY1K_ = BIT(15) | BIT(14), + _NO_ERLYRX_ = BIT(15) | BIT(14) | BIT(13), + + _AICV_ = BIT(12), + + _RX_DMA16_ = 0x0, + _RX_DMA32_ = BIT(8), + _RX_DMA64_ = BIT(9), + _RX_DMA128_ = BIT(9) | BIT(8), + _RX_DMA256_ = BIT(10), + _RX_DMA512_ = BIT(10) | BIT(8), + _RX_DMA1K_ = BIT(10) | BIT(9), + _RX_DMA2K_ = BIT(10) | BIT(9) | BIT(8), + + _9356SEL_ = BIT(6), + _ACRC32_ = BIT(5), + _AB_ = BIT(3), + _AM_ = BIT(2), + _APM_ = BIT(1), + _AAP_ = BIT(0), +}; + +enum _SCR_CONFIG_ { + _PRIVACY_WEP40_ = BIT(0), + _PRIVACY_WEP104_ = BIT(4), +}; + + +#define ENC_NONE 0 +#define ENC_WEP40 BIT(2)//|BIT(5)//FIX for DEFAULT KEY +#define ENC_TKIP_NO_MIC BIT(3) +#define ENC_TKIP_MIC BIT(3)|BIT(2) +#define ENC_AES BIT(4) +#define ENC_WEP104 BIT(4)|BIT(2)//|BIT(5)//FIX for DEFAULT KEY + +//#if defined(RTL8190) || defined(RTL8192E) +#if 0 +enum _RTL8190_AP_HW_ { + _IDR0_ = 0x0, + _PCIF_ = 0x9, // PCI Function Register + _9346CR_ = 0x0E, + _ANAPAR_ = 0x17, //NOTE: 8192 only register, for triggering pll on ... joshua + _BBGLBRESET_ = 0x20, + + _BSSID_ = 0x2e, + _CR_ = 0x37, + _SIFS_CCK_ = 0x3c, + _SIFS_OFDM_ = 0x3e, + _TCR_ = 0x40, + _RCR_ = 0x44, + _SLOT_ = 0x49, + _EIFS_ = 0x4a, + _ACKTIMEOUT_ = 0x4c, + + _ACBE_PARM_ = 0x50, // BE Parameter + _ACBK_PARM_ = 0x54, // BK Parameter + _ACVO_PARM_ = 0x58, // VO Parameter + _ACVI_PARM_ = 0x5C, // VI Parameter + + _BCNTCFG_ = 0x62, + _TIMER1_ = 0x68, + _TIMER2_ = 0x6c, + _BCNITV_ = 0x70, + _ATIMWIN_ = 0x72, + _DRVERLYINT_ = 0x74, + _BCNDMA_ = 0x76, + + _MBIDCAMCFG_ = 0xc0, + _MBIDCAMCONTENT_ = 0xc4, + + _IMR_ = 0xF4, // Interrupt Mask Register + _ISR_ = 0xF8, // Interrupt Status Register + _DBS_ = 0xFC, // Debug Select + _TXPOLL_ = 0xFD, // Transmit Polling + _TXPOLL_H_ = 0xFE, + _PSR_ = 0xFF, // Page Select Register + _CPURST_ = 0x100, // CPU Reset + _BLDTIME_ = 0x124, +// _BLDUSER0_ = 0x128, +// _BLDUSER1_ = 0x12c, + _TXPKTNUM_ = 0x128, + _RXPKTNUM_ = 0x130, + + _LED1CFG_ = 0x154, + _LED0CFG_ = 0x155, + + _ACM_CTRL_ = 0x171, + + _RQPN1_ = 0x180, + _RQPN2_ = 0x184, + _RQPN3_ = 0x188, + + _TBDA_ = 0x200, // Transmit Beacon Desc Addr + _THPDA_ = 0x204, // Transmit High Priority Desc Addr + _TCDA_ = 0x208, // Transmit Command Desc Addr + _TMGDA_ = 0x20C, // Transmit Management Desc Addr + _HDA_ = 0x210, // HCCA Desc Addr + _TNPDA_ = 0x214, // Transmit VO Desc Addr + _TLPDA_ = 0x218, // Transmit VI Desc Addr + _TBEDA_ = 0x21C, // Transmit BE Desc Addr + _TBKDA_ = 0x220, // Transmit BK Desc Addr + _RCDSA_ = 0x224, // Receive Command Desc Addr + _RDSAR_ = 0x228, // Receive Desc Starting Addr + _MAR0_ = 0x240, + _MAR4_ = 0x244, + _MBIDCTRL_ = 0x260, + _BWOPMODE_ = 0x300, + _MSR_ = 0x303, + _RETRYCNT_ = 0x304, + _TSFTR_L_ = 0x308, + _TSFTR_H_ = 0x30c, + _RRSR_ = 0x310, + _RATR_POLL_ = 0x318, + _RATR0_ = 0x320, + _RATR1_ = 0x324, + _RATR2_ = 0x328, + _RATR3_ = 0x32c, + _RATR4_ = 0x330, + _RATR5_ = 0x334, + _RATR6_ = 0x338, + _RATR7_ = 0x33c, +#ifdef RTL8190 + _MCS_TXAGC_0_ = 0x340, + _MCS_TXAGC_1_ = 0x344, + _CCK_TXAGC_ = 0x348, +#elif defined(RTL8192E) + _ISRD_CPU_ = 0x350, + _FWIMR_ = 0x354, +#endif + _FWPSR_ = 0x3FF, +}; +#endif +//#elif defined(RTL8192SE) + +enum _RTL8190_AP_HW_ { + _RCR_ = RCR, + _MBIDCTRL_ = MBIDCTRL, + _BSSID_ = BSSIDR, + _MBIDCAMCONTENT_ = MBIDCAMCONTENT, + _MBIDCAMCFG_ = MBIDCAMCFG, + _SLOT_ = SLOT_TIME, + _ACBE_PARM_ = EDCAPARA_BE, // BE Parameter + _ACBK_PARM_ = EDCAPARA_BK, // BK Parameter + _ACVO_PARM_ = EDCAPARA_VO, // VO Parameter + _ACVI_PARM_ = EDCAPARA_VI, // VI Parameter + _TIMER1_ = TIMER0, + _TIMER2_ = TIMER1, + _IMR_ = IMR, // Interrupt Mask Register + _ISR_ = ISR, // Interrupt Status Register + _ACM_CTRL_ = ACMHWCTRL, + _TBDA_ = TBDA, // Transmit Beacon Desc Addr + _THPDA_ = THPDA, // Transmit High Priority Desc Addr + _TCDA_ = TCDA, // Transmit Command Desc Addr + _TMGDA_ = TMDA, // Transmit Management Desc Addr + _HDA_ = HDA, // HCCA Desc Addr + _TNPDA_ = TVODA, // Transmit VO Desc Addr + _TLPDA_ = TVIDA, // Transmit VI Desc Addr + _TBEDA_ = TBEDA, // Transmit BE Desc Addr + _TBKDA_ = TBKDA, // Transmit BK Desc Addr + _RCDSA_ = RCDA, // Receive Command Desc Addr + _RDSAR_ = RDSA, // Receive Desc Starting Addr + _BWOPMODE_ = BW_OPMODE, + _MSR_ = MSR, + _TSFTR_L_ = TSFR, + _TSFTR_H_ = (TSFR+4), +#ifdef CONFIG_RTK_MESH + _RRSR_ = RRSR, +#endif + _RATR_POLL_ = 0x320, // need to fix + _RATR0_ = 0x320, // need to fix + _RATR1_ = 0x320, // need to fix + _RATR2_ = 0x320, // need to fix + _RATR3_ = 0x320, // need to fix + _RATR4_ = 0x320, // need to fix + _RATR5_ = 0x320, // need to fix + _RATR6_ = 0x320, // need to fix + _RATR7_ = 0x320, // need to fix +}; +//#endif + + +//#if defined(RTL8190) || defined(RTL8192E) +//enum _AP_SECURITY_REGS_ { +// _CAMCMD_ = 0xa0, +// _CAM_W_ = 0xa4, +// _CAM_R_ = 0xa8, +// _CAMDBG_ = 0xac, +// _WPACFG_ = 0xb0, +//}; +//#elif defined(RTL8192SE) + +enum _AP_SECURITY_REGS_ { + _CAMCMD_ = RWCAM, + _CAM_W_ = WCAMI, + _CAM_R_ = RCAMO, + _CAMDBG_ = CAMDBG, + _WPACFG_ = SECR, +}; + +//#endif + +enum _RTL8190_DESC_CMD_ { + // TX and common + _OWN_ = BIT(31), + _LINIP_ = BIT(30), + _FS_ = BIT(29), + _LS_ = BIT(28), + _CMDINIT_ = BIT(27), + _PIFS_ = BIT(15), + _NOENC_ = BIT(14), + _MFRAG_ = BIT(13), + _USERATE_ = BIT(12), + _DISFB_ = BIT(11), + _RATID_ = BIT(8), + _RATIDSHIFT_ = 8, + _OFFSETSHIFT_ = 16, + _QSELECTSHIFT_ = 16, + + // RX + _EOR_ = BIT(30), + _SWDEC_ = BIT(27), + _PHYST_ = BIT(26), + _SHIFT1_ = BIT(25), + _SHIFT0_ = BIT(24), + _ICV_ = BIT(15), + _CRC32_ = BIT(14), + _RXFRLEN_MSK_ = 0x3fff, + _RXDRVINFOSZ_SHIFT_ = 16, +}; + +enum _IMR_BITFIELD_90_ { +//#ifdef RTL8190 +// _CPUERR_ = BIT(29), +//#elif defined(RTL8192E) + _IllAcess_ = BIT(30), + _BTEvent_ = BIT(29), +//#endif + _ATIMEND_ = BIT(28), + _TBDOK_ = BIT(27), + _TBDER_ = BIT(26), + _BCNDMAINT5_ = BIT(25), + _BCNDMAINT4_ = BIT(24), + _BCNDMAINT3_ = BIT(23), + _BCNDMAINT2_ = BIT(22), + _BCNDOK5_ = BIT(21), + _BCNDOK4_ = BIT(20), + _BCNDOK3_ = BIT(19), + _BCNDOK2_ = BIT(18), + _TIMEOUT2_ = BIT(17), + _TIMEOUT1_ = BIT(16), + _TXFOVW_ = BIT(15), + _PSTIMEOUT_ = BIT(14), + _BCNDMAINT_ = BIT(13), + _RXFOVW_ = BIT(12), + _RDU_ = BIT(11), + _RXCMDOK_ = BIT(10), + _BCNDOK_ = BIT(9), + _THPDOK_ = BIT(8), + _COMDOK_ = BIT(7), + _MGTDOK_ = BIT(6), + _HCCADOK_ = BIT(5), + _TBKDOK_ = BIT(4), + _TBEDOK_ = BIT(3), + _TVIDOK_ = BIT(2), + _TVODOK_ = BIT(1), + _ROK_ = BIT(0), +}; +enum _AP_SECURITY_SETTINGS_ { + //CAM CMD + _CAM_POLL_ = BIT(31), + _CAM_CLR_ = BIT(30), + _CAM_WE_ = BIT(16), + + //CAM DBG + _CAM_INFO_ = BIT(31), + _KEY_FOUND_ = BIT(30), + + //SEC CFG + _NO_SK_MC_ = BIT(5), + _SK_A2_ = BIT(4), + _RX_DEC_ = BIT(3), + _TX_ENC_ = BIT(2), + _RX_USE_DK_ = BIT(1), + _TX_USE_DK_ = BIT(0), +}; +#endif + +enum _RF_TX_RATE_ { + _1M_RATE_ = 2, + _2M_RATE_ = 4, + _5M_RATE_ = 11, + _6M_RATE_ = 12, + _9M_RATE_ = 18, + _11M_RATE_ = 22, + _12M_RATE_ = 24, + _18M_RATE_ = 36, + _22M_RATE_ = 44, + _24M_RATE_ = 48, + _33M_RATE_ = 66, + _36M_RATE_ = 72, + _48M_RATE_ = 96, + _54M_RATE_ = 108, + _MCS0_RATE_ = (0x80 | 0), + _MCS1_RATE_ = (0x80 | 1), + _MCS2_RATE_ = (0x80 | 2), + _MCS3_RATE_ = (0x80 | 3), + _MCS4_RATE_ = (0x80 | 4), + _MCS5_RATE_ = (0x80 | 5), + _MCS6_RATE_ = (0x80 | 6), + _MCS7_RATE_ = (0x80 | 7), + _MCS8_RATE_ = (0x80 | 8), + _MCS9_RATE_ = (0x80 | 9), + _MCS10_RATE_= (0x80 | 10), + _MCS11_RATE_= (0x80 | 11), + _MCS12_RATE_= (0x80 | 12), + _MCS13_RATE_= (0x80 | 13), + _MCS14_RATE_= (0x80 | 14), + _MCS15_RATE_= (0x80 | 15), +}; + +#if 0 +enum _HW_STATE_ { + _HW_STATE_STATION_ = 0x02, + _HW_STATE_ADHOC_ = 0x01, + _HW_STATE_AP_ = 0x03, + _HW_STATE_NOLINK_ = 0x0, +}; +#endif + +enum BANDWIDTH_MODE +{ + BW_OPMODE_11J = BIT(0), + BW_OPMODE_5G = BIT(1), + BW_OPMODE_20MHZ = BIT(2) +}; + +#if 0 +//#ifdef RTL8192SE +enum _FW_REG364_MASK_ +{ + FW_REG364_DIG = BIT(0), + FW_REG364_HP = BIT(1), + FW_REG364_RSSI = BIT(2), +// FW_REG364_IQK = BIT(3) +}; +#endif +enum _ARFR_TABLE_SET_ +{ + ARFR_2T_40M = 0, + ARFR_2T_Band_A_40M = 1, + ARFR_2T_Band_A_20M = 1, + ARFR_2T_20M = 2, + ARFR_1T_40M = 12, + ARFR_1T_20M = 13, + ARFR_BG_MIX = 4, + ARFR_G_ONLY = 5, + ARFR_Band_A_BMC = 5, + ARFR_B_ONLY = 6, + ARFR_BMC = 6, +}; + +//#define HP_UPPER 0x4B //SS = 75% +#define HP_LOWER 0x46 //SS = 70% +#define RSSI_DIFF_PA 10 +#define RSSI_DIFF_LNA 8 + +//---------------------------------------------------------------------------- +// 8192C Rate Definition +//---------------------------------------------------------------------------- +//CCK +#define RATR_1M 0x00000001 +#define RATR_2M 0x00000002 +#define RATR_55M 0x00000004 +#define RATR_11M 0x00000008 +//OFDM +#define RATR_6M 0x00000010 +#define RATR_9M 0x00000020 +#define RATR_12M 0x00000040 +#define RATR_18M 0x00000080 +#define RATR_24M 0x00000100 +#define RATR_36M 0x00000200 +#define RATR_48M 0x00000400 +#define RATR_54M 0x00000800 +//MCS 1 Spatial Stream +#define RATR_MCS0 0x00001000 +#define RATR_MCS1 0x00002000 +#define RATR_MCS2 0x00004000 +#define RATR_MCS3 0x00008000 +#define RATR_MCS4 0x00010000 +#define RATR_MCS5 0x00020000 +#define RATR_MCS6 0x00040000 +#define RATR_MCS7 0x00080000 +//MCS 2 Spatial Stream +#define RATR_MCS8 0x00100000 +#define RATR_MCS9 0x00200000 +#define RATR_MCS10 0x00400000 +#define RATR_MCS11 0x00800000 +#define RATR_MCS12 0x01000000 +#define RATR_MCS13 0x02000000 +#define RATR_MCS14 0x04000000 +#define RATR_MCS15 0x08000000 +// ALL CCK Rate +#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M +#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\ + RATR_36M|RATR_48M|RATR_54M +#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\ + RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7 +#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\ + RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15 + + +#if 0 +//---------------------------------------------------------------------------- +// 8139 (CR9346) 9346 command register bits (offset 0x50, 1 byte) +//---------------------------------------------------------------------------- +#define CR9346_EEDO 0x01 // 9346 data out +#define CR9346_EEDI 0x02 // 9346 data in +#define CR9346_EESK 0x04 // 9346 serial clock +#define CR9346_EECS 0x08 // 9346 chip select +#define CR9346_EEM0 0x40 // select 8139 operating mode +#define CR9346_EEM1 0x80 // 00: normal + // 01: autoload + // 10: 9346 programming + // 11: config write enable +#define CR9346_CFGRW 0xC0 // Config register write +#define CR9346_NORM 0x0 // +//------------------------------------------------------------------------- +// EEPROM bit definitions +//------------------------------------------------------------------------- +//- EEPROM control register bits +#define EN_TRNF 0x10 // Enable turnoff +#define EEDO CR9346_EEDO // EEPROM data out +#define EEDI CR9346_EEDI // EEPROM data in (set for writing data) +#define EECS CR9346_EECS // EEPROM chip select (1=high, 0=low) +#define EESK CR9346_EESK // EEPROM shift clock (1=high, 0=low) + +//- EEPROM opcodes +#define EEPROM_READ_OPCODE 06 +#define EEPROM_WRITE_OPCODE 05 +#define EEPROM_ERASE_OPCODE 07 +#define EEPROM_EWEN_OPCODE 19 // Erase/write enable +#define EEPROM_EWDS_OPCODE 16 // Erase/write disable + +//- EEPROM data locations +#define RTL8180_EEPROM_ID 0x8129 +#define EEPROM_ID 0x0 +//#define EEPROM_RF_CHIP_ID 0x0C +#define EEPROM_RF_CHIP_ID 0x28 +//#define EEPROM_NODE_ADDRESS_BYTE_0 0x0E +#define EEPROM_NODE_ADDRESS_BYTE_0 0x0C // modified by joshua +#define EEPROM_CONFIG2 0x18 +#define EEPROM_ANA_PARM 0x1a +//#define EEPROM_TX_POWER_LEVEL_0 0x20 +#define EEPROM_TX_POWER_LEVEL_0 0x2C // modified by joshua +//#define EEPROM_CHANNEL_PLAN 0x2E +#define EEPROM_CHANNEL_PLAN 0x7C +#define EEPROM_CS_THRESHOLD 0x2F +#define EEPROM_ANA_PARM2 0x32 +#define EEPROM_RF_PARAM 0x32 +#define EEPROM_VERSION 0x3c +#define EEPROM_CIS_DATA 0x80 +//#define EEPROM_11G_CHANNEL_OFDM_TX_POWER_LEVEL_OFFSET 0x40 +#define EEPROM_11G_CHANNEL_OFDM_TX_POWER_LEVEL_OFFSET 0x3A +//#define EEPROM_11A_CHANNEL_TX_POWER_LEVEL_OFFSET 0x4e +#define EEPROM_11A_CHANNEL_TX_POWER_LEVEL_OFFSET 0x2C + +#define EEPROM_FLAGS_WORD_3 3 +#define EEPROM_FLAG_10MC BIT(0) +#define EEPROM_FLAG_100MC BIT(1) + + +#ifdef RTL8192E +#define EEPROM_RFInd_PowerDiff 0x28 +#define EEPROM_ThermalMeter 0x29 +#define EEPROM_TxPwDiff_CrystalCap 0x2A //0x2A~0x2B +#define EEPROM_TxPwIndex_CCK 0x2C //0x2C~0x39 +#define EEPROM_TxPwIndex_OFDM_24G 0x3A //0x3A~0x47 +#endif + + +//---------------------------------------------------------------------------- +// 8180 Config3 Regsiter (offset 0x59, 1 byte) +//---------------------------------------------------------------------------- +#define Config3_GNTSel 0x80 +#define Config3_ParmEn 0x40 // enable write to ANA_PARM + // (0x54) register +#define Config3_Magic 0x20 // Enable Magic Packet Wakeup +#define Config3_CardBEn 0x08 // Cardbus Enable +#define Config3_CLKRUN_En 0x04 // CLKRUN(clock run) Enable +#define Config3_FuncRegEn 0x02 // Function Register Enable +#define Config3_FBtBEn 0x01 // Enable PCI fast-back-to-back +#endif + +#ifdef RX_BUFFER_GATHER +enum { + GATHER_FIRST = 1, + GATHER_MIDDLE = 2, + GATHER_LAST = 4, +}; +#endif + +struct rx_desc { + +//#if defined(RTL8190) || defined(RTL8192) +// volatile unsigned int cmd; +// volatile unsigned int rsvd0; +// volatile unsigned int rsvd1; +// volatile unsigned int paddr; +//#elif defined(RTL8192SE) + + volatile unsigned int Dword0; + volatile unsigned int Dword1; + volatile unsigned int Dword2; + volatile unsigned int Dword3; + volatile unsigned int Dword4; // IV1 + volatile unsigned int Dword5; // TSFL + volatile unsigned int Dword6; // BufferAddress + volatile unsigned int Dword7; // NextRxDescAddress; +// volatile unsigned int Dword8; +//#endif + +}; + +struct rx_desc_info { + void* pbuf; + unsigned int paddr; +}; + +struct rf_misc_info { + unsigned char mimorssi[2]; + signed char mimosq[2]; + int RxSNRdB[2]; +}; + +#ifdef CONFIG_RTK_MESH +struct MESH_HDR { + unsigned char mesh_flag; + INT8 TTL; + UINT16 segNum; + unsigned char DestMACAddr[MACADDRLEN]; // modify for 6 address + unsigned char SrcMACAddr[MACADDRLEN]; +}; +#endif + +struct rx_frinfo { + struct sk_buff* pskb; + struct list_head mpdu_list; + unsigned int pktlen; + struct list_head rx_list; + unsigned char *da; + unsigned char *sa; + unsigned int hdr_len; + unsigned short seq; + unsigned short tid; + unsigned char to_fr_ds; + unsigned char rssi; + unsigned char sq; + unsigned char rx_rate; + unsigned char rx_bw; + unsigned char rx_splcp; + unsigned char driver_info_size; + unsigned char rxbuf_shift; + unsigned char sw_dec; + unsigned char faggr; + unsigned char paggr; +//#ifdef RTL8192SE + unsigned int physt; +//#endif +#if defined(UNIVERSAL_REPEATER) || defined(MBSSID) + unsigned char is_br_mgnt; // is a broadcast management frame (beacon and probe-rsp) +#endif + struct RxFWInfo *driver_info; + struct rf_misc_info rf_info; + signed char cck_mimorssi[4]; + +#ifdef CONFIG_RTK_MESH + // it's a mandatory field, for rx (e.g., validate_mpdu) to distinguish an 11s frame + unsigned char is_11s; ///< 1: 11s + + struct MESH_HDR mesh_header; //modify by Joule for MESH HEADER + + unsigned char prehop_11s[MACADDRLEN]; + +#endif // CONFIG_RTK_MESH + +#ifdef RX_BUFFER_GATHER + int gather_flag; + int gather_len; +#endif +}; + +struct tx_desc { +/* +#if defined(RTL8190) || defined(RTL8192) + volatile unsigned int cmd; + volatile unsigned int opt; + volatile unsigned int flen; + volatile unsigned int paddr; + volatile unsigned int n_desc; + volatile unsigned int rsvd0; + volatile unsigned int rsvd1; + volatile unsigned int rsvd2; +#elif defined(RTL8192SE) +*/ + volatile unsigned int Dword0; + volatile unsigned int Dword1; + volatile unsigned int Dword2; + volatile unsigned int Dword3; + volatile unsigned int Dword4; + volatile unsigned int Dword5; + volatile unsigned int Dword6; + volatile unsigned int Dword7; + volatile unsigned int Dword8; //TxBufferAddr; + volatile unsigned int Dword9; + volatile unsigned int Dword10; //NextTxDescAddress; + volatile unsigned int Dword11; + + // 2008/05/15 MH Because PCIE HW memory R/W 4K limit. And now, our descriptor + // size is 40 bytes. If you use more than 102 descriptor( 103*40>4096), HW will execute + // memoryR/W CRC error. And then all DMA fetch will fail. We must decrease descriptor + // number or enlarge descriptor size as 64 bytes. + unsigned int Reserve_Pass_92S_PCIE_MM_Limit[4]; +//#endif + +}; + +struct tx_desc_info { + unsigned int type; + unsigned int paddr; + void *pframe; + unsigned int len; + struct stat_info *pstat; + unsigned int rate; + struct rtl8192cd_priv *priv; +}; + +typedef struct _BB_REGISTER_DEFINITION { + unsigned int rfintfs; // set software control: + // 0x870~0x877[8 bytes] + unsigned int rfintfi; // readback data: + // 0x8e0~0x8e7[8 bytes] + unsigned int rfintfo; // output data: + // 0x860~0x86f [16 bytes] + unsigned int rfintfe; // output enable: + // 0x860~0x86f [16 bytes] + unsigned int rf3wireOffset; // LSSI data: + // 0x840~0x84f [16 bytes] + unsigned int rfLSSI_Select; // BB Band Select: + // 0x878~0x87f [8 bytes] + unsigned int rfTxGainStage; // Tx gain stage: + // 0x80c~0x80f [4 bytes] + unsigned int rfHSSIPara1; // wire parameter control1 : + // 0x820~0x823,0x828~0x82b, 0x830~0x833, 0x838~0x83b [16 bytes] + unsigned int rfHSSIPara2; // wire parameter control2 : + // 0x824~0x827,0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes] + unsigned int rfSwitchControl; //Tx Rx antenna control : + // 0x858~0x85f [16 bytes] + unsigned int rfAGCControl1; //AGC parameter control1 : + // 0xc50~0xc53,0xc58~0xc5b, 0xc60~0xc63, 0xc68~0xc6b [16 bytes] + unsigned int rfAGCControl2; //AGC parameter control2 : + // 0xc54~0xc57,0xc5c~0xc5f, 0xc64~0xc67, 0xc6c~0xc6f [16 bytes] + unsigned int rfRxIQImbalance; //OFDM Rx IQ imbalance matrix : + // 0xc14~0xc17,0xc1c~0xc1f, 0xc24~0xc27, 0xc2c~0xc2f [16 bytes] + unsigned int rfRxAFE; //Rx IQ DC ofset and Rx digital filter, Rx DC notch filter : + // 0xc10~0xc13,0xc18~0xc1b, 0xc20~0xc23, 0xc28~0xc2b [16 bytes] + unsigned int rfTxIQImbalance; //OFDM Tx IQ imbalance matrix + // 0xc80~0xc83,0xc88~0xc8b, 0xc90~0xc93, 0xc98~0xc9b [16 bytes] + unsigned int rfTxAFE; //Tx IQ DC Offset and Tx DFIR type + // 0xc84~0xc87,0xc8c~0xc8f, 0xc94~0xc97, 0xc9c~0xc9f [16 bytes] + unsigned int rfLSSIReadBack; //LSSI RF readback data + // 0x8a0~0x8af [16 bytes] + unsigned int rfLSSIReadBackPi; //LSSI RF readback data + // 0x8b8~0x8bc [8 bytes] +}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T; + + +#define DESC_DMA_SIZE (NUM_RX_DESC *(sizeof(struct rx_desc))+\ + NUM_TX_DESC *(sizeof(struct tx_desc))*6 +\ + NUM_CMD_DESC *(sizeof(struct rx_desc)) + \ + NUM_CMD_DESC *(sizeof(struct tx_desc))) +\ + 6 * (sizeof(struct tx_desc)) + +#ifndef __KERNEL__ +#define DESC_DMA_PAGE_SIZE ((DESC_DMA_SIZE + (PAGE_SIZE - 1))) +#else +//#define DESC_DMA_PAGE_SIZE ((DESC_DMA_SIZE + (2*PAGE_SIZE - 1)) & (~(PAGE_SIZE - 1))) +#define DESC_DMA_PAGE_SIZE ((DESC_DMA_SIZE + PAGE_SIZE)) +#endif + +struct rtl8192cd_tx_desc_info { + struct tx_desc_info tx_info0[NUM_TX_DESC]; + struct tx_desc_info tx_info1[NUM_TX_DESC]; + struct tx_desc_info tx_info2[NUM_TX_DESC]; + struct tx_desc_info tx_info3[NUM_TX_DESC]; + struct tx_desc_info tx_info4[NUM_TX_DESC]; + struct tx_desc_info tx_info5[NUM_TX_DESC]; +}; + +struct rtl8192cd_hw { + unsigned short seq; // sw seq + +#ifdef WIFI_WMM +// unsigned short AC_seq[8]; + +// switch BE to VI + unsigned int VO_pkt_count; + unsigned int VI_pkt_count; + unsigned int BK_pkt_count; +#endif + +#ifndef PRIV_STA_BUF + unsigned long alloc_dma_buf; +#endif + + unsigned long ring_dma_addr; + unsigned long ring_virt_addr; + unsigned int ring_buf_len; + unsigned int cur_rx; +#ifdef DELAY_REFILL_RX_BUF + unsigned int cur_rx_refill; +#endif + struct rx_desc *rx_descL; + unsigned long rx_ring_addr; + struct rx_desc_info rx_infoL[NUM_RX_DESC]; + + /* For TX DMA Synchronization */ + unsigned long rx_descL_dma_addr[NUM_RX_DESC]; + + unsigned int txhead0; + unsigned int txhead1; + unsigned int txhead2; + unsigned int txhead3; + unsigned int txhead4; + unsigned int txhead5; + + unsigned int txtail0; + unsigned int txtail1; + unsigned int txtail2; + unsigned int txtail3; + unsigned int txtail4; + unsigned int txtail5; + + struct tx_desc *tx_desc0; + struct tx_desc *tx_desc1; + struct tx_desc *tx_desc2; + struct tx_desc *tx_desc3; + struct tx_desc *tx_desc4; + struct tx_desc *tx_desc5; + struct tx_desc *tx_descB; + + /* For TX DMA Synchronization */ + unsigned long tx_desc0_dma_addr[NUM_TX_DESC]; + unsigned long tx_desc1_dma_addr[NUM_TX_DESC]; + unsigned long tx_desc2_dma_addr[NUM_TX_DESC]; + unsigned long tx_desc3_dma_addr[NUM_TX_DESC]; + unsigned long tx_desc4_dma_addr[NUM_TX_DESC]; + unsigned long tx_desc5_dma_addr[NUM_TX_DESC]; + unsigned long tx_descB_dma_addr[NUM_TX_DESC]; + + unsigned long tx_ring0_addr; + unsigned long tx_ring1_addr; + unsigned long tx_ring2_addr; + unsigned long tx_ring3_addr; + unsigned long tx_ring4_addr; + unsigned long tx_ring5_addr; + unsigned long tx_ringB_addr; + + unsigned int cur_rxcmd; + struct rx_desc *rxcmd_desc; + unsigned long rxcmd_ring_addr; + struct rx_desc_info rxcmd_info[NUM_CMD_DESC]; + unsigned long rxcmd_desc_dma_addr[NUM_CMD_DESC]; + + unsigned int txcmdhead; + unsigned int txcmdtail; + struct tx_desc *txcmd_desc; + unsigned long txcmd_desc_dma_addr[NUM_CMD_DESC]; + unsigned long txcmd_ring_addr; + + char MCSTxAgcOffset_A[16]; + char MCSTxAgcOffset_B[16]; + char OFDMTxAgcOffset_A[8]; + char OFDMTxAgcOffset_B[8]; + + //_TXPWR_REDEFINE ?? int or char ?? +#if 0 + int CCKTxAgc_A[4]; + int CCKTxAgc_B[4]; +#endif + char CCKTxAgc_A[4]; + char CCKTxAgc_B[4]; + + unsigned int NumTotalRFPath; + /*PHY related*/ + BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D + + // Joseph test for shorten RF config. + unsigned int RfReg0Value[4]; + + // for DIG checking + unsigned char signal_strength; // 1=low and dig off, 2=normal and dig on, 3=high power and dig on + + // dynamic CCK Tx power by rssi + unsigned char CCKTxAgc_enhanced; + + // dynamic CCK CCA enhance by rssi + unsigned char CCK_CCA_enhanced; + + unsigned char EDCCA_on; + + // for Multicast Rx dynamic mechanism + unsigned char rxmlcst_rssi; + unsigned char initial_gain; + + // MIMO TR hw support checking + unsigned char MIMO_TR_hw_support; + + // dynamic Rx path selection by signal strength + unsigned char ant_off_num; + unsigned char ant_off_bitmap; + unsigned char ant_on_criteria[4]; + unsigned char ant_cck_sel; + + // Tx power control + unsigned char lower_tx_power; + unsigned int power_backup[15]; +/* + // Tx power tracking +#if defined(RTL8190) || defined(RTL8192E) + unsigned char tpt_inited; + unsigned char tpt_ofdm_swing_idx; + unsigned char tpt_cck_swing_idx; + unsigned char tpt_tssi_total; + unsigned char tpt_tssi_num; + unsigned char tpt_tssi_waiting; + unsigned char tpt_tracking_num; +#endif +*/ + struct timer_list tpt_timer; + struct rtl8192cd_tx_desc_info tx_info; + + unsigned char check_reg824; + unsigned int reg824_bit9; + unsigned char InternalPA5G[2]; + unsigned char bNewTxGainTable; +}; + +//1------------------------------------------------------------------- +//1RTL_8192CD related definition +//1--------------------------------------------------------------------- + +//-------------------------------------------------------------------------------- +// 8192S Firmware related +//-------------------------------------------------------------------------------- +typedef struct __RTL8192C_FW_HDR__ { + unsigned int signature:16; + unsigned int category:8; + unsigned int function:8; + + unsigned int version:16; + unsigned int subversion:8; + unsigned int rsvd1:8; + + unsigned int month:8; + unsigned int day:8; + unsigned int hour:8; + unsigned int minute:8; + + unsigned int ram_code_size:16; + unsigned int year:16; + + unsigned int svnidx; + unsigned int rsvd5; + unsigned int rsvd6; + unsigned int rsvd7; +} RTL8192C_FW_HDR, *PRTL8192C_FW_HDR; + +enum __RTL8192C_SIGNATURE__ +{ + RTL8192C_TEST_CHIP = 0x92C0, + RTL8188C_TEST_CHIP = 0x88C0, + RTL8192C_MP_CHIP_A = 0x92C1, + RTL8188C_MP_CHIP_A = 0x88C1, + RTL8192C_MP_CHIP_B = 0x92C2, + RTL8188C_MP_CHIP_B = 0x88C2 +}; + +enum __RTL8192C_FW_CATEGORY__ +{ + RTL8192C_NIC_PCIE = 0, + RTL8192C_NIC_USB = 1, + RTL8192C_AP_PCIE = 4, + RTL8192C_AP_USB = 5 +}; + +enum __RTL8192C_FW_FUNCTION__ +{ + RTL8192C_NIC_NORMAL = 0, + RTL8192C_NIC_WWLAN = 1, + RTL8192C_AP_NORMAL = 2, + RTL8192C_AP_SUSPEND = 3 +}; + +#define RT_8192CD_FIRMWARE_HDR_SIZE 32 + +enum _RTL8192CD_TX_DESC_ { + // TX cmd desc + // Dword 0 + TX_OWN = BIT(31), + TX_GF = BIT(30), + TX_NoACM = BIT(29), + TX_LINIP = BIT(28), + TX_FirstSeg = BIT(27), + TX_LastSeg = BIT(26), + TX_HTC = BIT(25), + TX_BMC = BIT(24), + TX_OffsetSHIFT = 16, + TX_OffsetMask = 0x0FF, + TX_PktSizeSHIFT = 0, + TX_PktSizeMask = 0x0FFFF, + +// TX_AMSDU = BIT(29), +// TX_TYPESHIFT = 24, +// TX_TYPEMask = 0x3, + + + // Dword 1 +// TX_PaddingSHIFT = 24, +// TX_PaddingMask = 0x0FF, + TX_PktOffsetSHIFT = 26, + TX_PktOffsetMask = 0x01F, + TX_SecTypeSHIFT = 22, + TX_SecTypeMask = 0x03, + TX_EnDescID = BIT(21), + TX_NAVUSEHDR = BIT(20), + TX_RateIDSHIFT = 16 , + TX_RateIDMask = 0x0F, + TX_PIFS = BIT(15), + TX_LSigTxopEn = BIT(14), + TX_RdNavExt = BIT(13), + TX_QSelSHIFT = 8, + TX_QSelMask = 0x01F, + TX_RdEn = BIT(7), + TX_BK = BIT(6), + TX_AggEn = BIT(5), + TX_MacIdSHIFT = 0, + TX_MacIdMask = 0x01F, + +// TX_MoreData = BIT(5), +// TX_MoreFrag = BIT(6), +// TX_AckPolicySHIFT = 13, +// TX_AckPolicyMask = 0x3, // 2 bits +// TX_NoACM = BIT(15), +// TX_NonQos = BIT(16), +// TX_KeyIDSHIFT = 17 , +// TX_OUI = BIT(19), +// TX_PktType = BIT(20), +// TX_HTC = BIT(24), //padding0 +// TX_WDS = BIT(25), //padding1 +// TX_HWPC = BIT(31), + + + // DWORD 2 + TX_TxAntHtSHIFT = 30, + TX_TxAntHtMask = 0x03, + TX_TxAntlSHIFT = 28, + TX_TxAntlMask = 0x03, + TX_TxAntCckSHIFT = 26, + TX_TxAntCckMask = 0x03, + TX_AntSelB = BIT(25), + TX_AntSelA = BIT(24), + TX_AmpduDstySHIFT = 20, + TX_AmpduDstyMask = 0x07, + TX_CCX = BIT(19), + TX_RAW = BIT(18), + TX_MoreFrag = BIT(17), + TX_BarRtyThSHIFT = 14, + TX_BarRtyThMask = 0x03, + TX_DataRcSHIFT = 6, + TX_DataRcMask = 0x03F, + TX_RtsRcSHIFT = 0, + TX_RtsRcMask = 0x03F, + +// TX_DataRetryLmtSHIFT = 0, +// TX_DataRetryLmtMask = 0x3F, // 6 bits +// TX_RetryLmtEn = BIT(6), +// TX_TSFLSHIFT = 7, +// TX_TSFLMask = 0x1f, +// TX_RTSRCSHIFT = 12, +// TX_RTSRCMask = 0x3F, // Reserved for HW RTS Retry Count. +// TX_DATARCSHIFT = 18, +// TX_DATARCMask = 0x3F , // Reserved for HW DATA Retry Count. + //TX_Rsvd1:5; +// TX_AggEn =BIT(29), +// TX_BK = BIT(30), //Aggregation break. +// TX_OwnMAC = BIT(31), + + + //DWORD3 + TX_PktIdSHIFT = 28, + TX_PktIdMask = 0x0F, + TX_SeqSHIFT = 16, + TX_SeqMask = 0x0FFF, + TX_TailPageSHIFT = 8, + TX_TailPageMask = 0x0FF, + TX_NextHeadPageSHIFT = 0, + TX_NextHeadPageMask = 0x0FF, + +// TX_FragSHIFT = 28, +// TX_FragMask = 0xF, + + + // DWORD 4 + TX_CtrlStbcSHIFT = 30, + TX_CtrlStbcMask = 0x03, + TX_RtsScSHIFT = 28, + TX_RtsScMask = 0x3, + TX_RtsBw = BIT(27), + TX_RtsShort = BIT(26), + TX_DataBw = BIT(25), + TX_DataShort = BIT(24), + TX_DataStbcSHIFT = 22, + TX_DataStbcMask = 0x03, + TX_DataScSHIFT = 20, + TX_DataScMask = 0x03, + TX_CTS2AP = BIT(19), + TX_WaitDCTS = BIT(18), + TX_HwRtsEn = BIT(13), + TX_RtsEn = BIT(12), + TX_CTS2Self = BIT(11), + TX_DisDataFB = BIT(10), + TX_DisRtsFB = BIT(9), + TX_UseRate = BIT(8), + TX_HwSeqEn = BIT(7), + TX_QOS = BIT(6), + TX_ApDCFE = BIT(5), + TX_RtsRateSHIFT = 0, + TX_RtsRateMask = 0x01F, + +// TX_RTSRateFBLmtSHIFT = 7, +// TX_RTSRateFBLmtMask = 0xF, +// TX_RaBRSRIDSHIFT = 13, //Rate adaptive BRSR ID. +// TX_RaBRSRIDMask = 0x7, // 3bits +// TX_TXHT = BIT(16), +// TX_RD = BIT(23), +// TX_RTSHT = BIT(24), +// TX_RTSSTBCSHIFT = 29, +// TX_RTSSTBCMask = 0x3, + + + // DWORD 5 + TX_UsbAggNumSHIFT = 24, + TX_UsbAggNumMask = 0x0FF, + TX_DataRtyLmtSHIFT = 18, + TX_DataRtyLmtMask = 0x03F, + TX_RtyLmtEn = BIT(17), + TX_RtsRateFBLmtSHIFT = 13, + TX_RtsRateFBLmtMask = 0x0F, + TX_DataRateFBLmtSHIFT = 8, + TX_DataRateFBLmtMask = 0x01F, + TX_CcxTag = BIT(7), + TX_SGI = BIT(6), + TX_DataRateSHIFT = 0, + TX_DataRateMask = 0x03F, + +// TX_PktIDSHIFT = 0, +// TX_PktIDMask = 0x1FF, +// TX_DISFB = BIT(15), +// TX_TxAGCSHIFT = 21, +// TX_TxAGCMask = 0x7FF, + + + // DWORD 6 + TX_MCS7SgiMaxSHIFT = 28, + TX_MCS7SgiMaxMask = 0x0F, + TX_MCS3gMaxSHIFT = 24, + TX_MCS3gMaxMask = 0x0F, + TX_MCS2gMaxSHIFT = 20, + TX_MCS2gMaxMask = 0x0F, + TX_MCS1gMaxSHIFT = 16, + TX_MCS1gMaxMask = 0x0F, + TX_MaxAggNumSHIFT = 11, + TX_MaxAggNumMask = 0x01F, + TX_UseMaxLen = BIT(10), + TX_TxAgcBSHIFT = 5, + TX_TxAgcBMask = 0x01F, + TX_TxAgcASHIFT = 0, + TX_TxAgcAMask = 0x01F, + +// TX_IPChkSumSHIFT = 0, +// TX_IPChkSumMask = 0xFFFF, +// TX_TCPChkSumSHIFT = 16, +// TX_TCPChkSumMask = 0xFFFF, + + + // DWORD 7 + TX_MCS15SgiMaxSHIFT = 28, + TX_MCS15SgiMaxMask = 0x0F, + TX_MCS6gMaxSHIFT = 24, + TX_MCS6gMaxMask = 0x0F, + TX_MCS5gMaxSHIFT = 20, + TX_MCS5gMaxMask = 0x0F, + TX_MCS4gMaxSHIFT = 16, + TX_MCS4gMaxMask = 0x0F, + TX_TxBufSizeSHIFT = 0, + TX_TxBufSizeMask = 0x0FFFF, + +// TX_IPHdrOffsetSHIFT = 16, +// TX_IPHdrOffsetMask = 0xFF, +// unsigned int Rsvd2:7; +// TX_TCPEn = BIT(31), +}; + + + +enum _RTL8192CD_RX_DESC_ { + // RX cmd desc + // Dword 0 + RX_OWN = BIT(31), + RX_EOR = BIT(30), + RX_FirstSeg = BIT(29), + RX_LastSeg = BIT(28), + RX_SwDec = BIT(27), + RX_PHYST = BIT(26), + RX_ShiftSHIFT = 24, + RX_ShiftMask = 0x03, + RX_QOS = BIT(23), + RX_SecuritySHIFT = 20, + RX_SecurityMask = 0x07, + RX_DrvInfoSizeSHIFT = 16, + RX_DrvInfoSizeMask = 0x0F, + RX_ICVERR = BIT(15), + RX_CRC32 = BIT(14), + RX_PktLenSHIFT = 0, + RX_PktLenMask = 0x03FFF, + + + // Dword 1 + RX_BC = BIT(31), + RX_MC = BIT(30), + RX_TypeSHIFT = 28, + RX_TypeMask = 0x03, + RX_MoreFrag = BIT(27), + RX_MoreData = BIT(26), + RX_PWRMGT = BIT(25), + RX_PAM = BIT(24), + RX_A2FitSHIFT = 20, + RX_A2FitSHIFMask = 0x0F, + RX_A1FitSHIFT = 16, + RX_A1FitSHIFMask = 0x0F, + RX_FAGGR = BIT(15), + RX_PAGGR = BIT(14), + RX_AMSDU = BIT(13), + RX_HwRsvdSHIFT = 9, + RX_HwRsvdMask = 0x0F, + RX_TidSHIFT = 5, + RX_TidMask = 0x0F, + RX_MacIdSHIFT = 0, + RX_MacIdMask = 0x01F, + + + // DWORD 2 + RX_NextInd = BIT(30), + RX_NextPktLenSHIFT = 16, + RX_NextPktLenMask = 0x03FFF, + RX_FragSHIFT = 12, + RX_FragMask = 0x0F, + RX_SeqSHIFT = 0, + RX_SeqMask = 0x0FFF, + + + //DWORD3 + RX_IV0SHIFT = 16, + RX_IV0Mask = 0x0FFFF, + RX_HwPCInd = BIT(15), + RX_HwPCErr = BIT(14), + RX_TCPChkValid = BIT(13), + RX_IPChkRpt = BIT(12), + RX_TCPChkRpt = BIT(11), + RX_HTC = BIT(10), + RX_BW = BIT(9), + RX_SPLCP = BIT(8), + RX_GF = BIT(7), + RX_RxHT = BIT(6), + RX_RxMcsSHIFT = 0, + RX_RxMcsMask = 0x03F, + + + //DWORD8 + RX_BaVld = BIT(11), + RX_BaSsnSHIFT = 0, + RX_BaSsnMask = 0x07FF, +}; + + +/*------------------------------------------------------------------------------ + Below we define some useful readline functions... +------------------------------------------------------------------------------*/ +static __inline__ struct sk_buff *get_skb_frlist(struct list_head *list,unsigned int offset) +{ + unsigned long pobj; + + pobj = ((unsigned long)list - offset); + + return ((struct rx_frinfo *)pobj)->pskb; +} + +static __inline__ int get_txhead(struct rtl8192cd_hw *phw, int q_num) +{ + return *(int *)((unsigned int)&(phw->txhead0) + sizeof(int)*q_num); +} + +static __inline__ int get_txtail(struct rtl8192cd_hw *phw, int q_num) +{ + return *(int *)((unsigned int)&(phw->txtail0) + sizeof(int)*q_num); +} + +static __inline__ int *get_txhead_addr(struct rtl8192cd_hw *phw, int q_num) +{ + return (int *)((unsigned int)&(phw->txhead0) + sizeof(int)*q_num); +} + +static __inline__ int *get_txtail_addr(struct rtl8192cd_hw *phw, int q_num) +{ + return (int *)((unsigned int)&(phw->txtail0) + sizeof(int)*q_num); +} + +static __inline__ struct tx_desc *get_txdesc(struct rtl8192cd_hw *phw, int q_num) +{ + return (struct tx_desc *)(*(unsigned int *)((unsigned int)&(phw->tx_desc0) + sizeof(struct tx_desc *)*q_num)); +} + +static __inline__ struct tx_desc_info *get_txdesc_info(struct rtl8192cd_tx_desc_info*pdesc, int q_num) +{ + return (struct tx_desc_info *)((unsigned int)(pdesc->tx_info0) + sizeof(struct tx_desc_info)*q_num*NUM_TX_DESC); +} + +static __inline__ unsigned int *get_txdma_addr(struct rtl8192cd_hw *phw, int q_num) +{ + return (unsigned int *)((unsigned int)&(phw->tx_desc0_dma_addr) + (sizeof(unsigned long)*q_num*NUM_TX_DESC)); +} + + +#define RTL8192CD_REGS_SIZE ((0xff + 1) * 16) //16 pages + + +//---------------------------------------------------------------------------- +// 8192SE EFUSE +//---------------------------------------------------------------------------- +#ifdef EN_EFUSE + +#define EFUSE_MAX_SECTION_BASE 16 +#ifdef CONFIG_RTL_92D_SUPPORT +#define EFUSE_REAL_CONTENT_LEN 1024 +#define EFUSE_MAP_LEN 256 +#define EFUSE_MAX_SECTION 32 +// <Roger_Notes> To prevent out of boundary programming case, leave 1byte and program full section +// 9bytes + 1byt + 5bytes and pre 1byte. +// For worst case: +// | 2byte|----8bytes----|1byte|--7bytes--| //92D +#define EFUSE_OOB_PROTECT_BYTES 18 // PG data exclude header, dummy 7 bytes frome CP test and reserved 1byte. +#else +#define EFUSE_REAL_CONTENT_LEN 512 +#define EFUSE_MAP_LEN 128 +#define EFUSE_MAX_SECTION 16 +// | 1byte|----8bytes----|1byte|--5bytes--| +#define EFUSE_OOB_PROTECT_BYTES 15 // PG data exclude header, dummy 5 bytes frome CP test and reserved 1byte. +#endif +#define EFUSE_MAX_WORD_UNIT 4 +#define EFUSE_INIT_MAP 0 +#define EFUSE_MODIFY_MAP 1 + +#define EFUSE_ERROE_HANDLE +#define PG_STATE_HEADER 0x01 +#define PG_STATE_DATA 0x20 +#define EFUSE_REPEAT_THRESHOLD_ 3 +#define PGPKT_DATA_SIZE 8 +typedef struct PG_PKT_STRUCT_A{ + UINT8 offset; + UINT8 word_en; + UINT8 data[8]; +}PGPKT_STRUCT,*PPGPKT_STRUCT; + +#endif + + +//#if defined(RTL8190) || defined(RTL8192E) + +//#define LoadPktSize 1024 + +//#elif defined(RTL8192SE) + +#define LoadPktSize 32000 + +//#endif + +/* +typedef enum _HW90_BLOCK { + HW90_BLOCK_MAC = 0, + HW90_BLOCK_PHY0 = 1, + HW90_BLOCK_PHY1 = 2, + HW90_BLOCK_RF = 3, + HW90_BLOCK_MAXIMUM = 4, // Never use this +} HW90_BLOCK_E, *PHW90_BLOCK_E; +*/ + +typedef enum _RF92CD_RADIO_PATH_ { + RF92CD_PATH_A = 0, //Radio Path A + RF92CD_PATH_B = 1, //Radio Path B + RF92CD_PATH_MAX //Max RF number 92cd support +} RF92CD_RADIO_PATH_E, *PRF92CD_RADIO_PATH_E; +/* +typedef enum _FW_LOAD_FILE { + BOOT = 0, + MAIN = 1, + DATA = 2, +//#ifdef RTL8192SE + LOAD_IMEM = 3, + LOAD_EMEM = 4, + LOAD_DMEM = 5, +//#endif +} FW_LOAD_FILE; +*/ +typedef enum _PHY_REG_FILE { + AGCTAB, + PHYREG_1T2R, + PHYREG_2T2R, + PHYREG_1T1R, + PHYREG_PG, + PHYREG_MP, + PHYREG, +} PHY_REG_FILE; + +enum REG_FILE_FORMAT { + TWO_COLUMN, + THREE_COLUMN +}; + +#ifdef CONFIG_RTL_92D_SUPPORT +typedef enum _PHYREG_PG_TBL_IDX_ { + BGN_2040_ALL = 0, + BGN_20_CH1_3 = 1, + BGN_20_CH4_9 = 2, + BGN_20_CH10_14 = 3, + BGN_40_CH1_3 = 4, + BGN_40_CH4_9 = 5, + BGN_40_CH10_14 = 6, + AN_20_CH_36_64 = 7, + AN_20_CH_100_140 = 8, + AN_20_CH_149_165 = 9, + AN_40_CH_36_64 = 10, + AN_40_CH_100_140 = 11, + AN_40_CH_149_165 = 12 +}PHYREG_PG_TBL_IDX; + +typedef enum _TXPWR_LMT_TBL_IDX_ { + NO_RESTRICT = 0, + FCC_CCK = 1, + FCC_OFDM = 2, + FCC_20M1S = 3, + FCC_20M2S = 4, + FCC_40M1S = 5, + FCC_40M2S = 6, +}TXPWR_LMT_TBL_IDX; + +#endif + +typedef enum _MIMO_TR_STATUS { + MIMO_1T2R = 1, +// MIMO_2T4R = 2, + MIMO_2T2R = 3, + MIMO_1T1R = 4 +} MIMO_TR_STATUS; + +typedef enum _PHY_BAND_SELECT_ { + PHY_BAND_2G = BIT(0), + PHY_BAND_5G = BIT(1) +} PHY_BAND_SELECT; + +typedef enum _MAC_PHY_MODE_ { + SINGLEMAC_SINGLEPHY = 0, + DUALMAC_SINGLEPHY = 1, + DUALMAC_DUALPHY = 2 +} MAC_PHY_MODE; + +struct MacRegTable { + unsigned int offset; + unsigned int mask; + unsigned int value; +}; + +#ifdef TXPWR_LMT +struct TxPwrLmtTable { + unsigned int start; + unsigned int end; + unsigned int limit; + unsigned int target; +}; +#endif + +struct PhyRegTable { + unsigned int offset; + unsigned int value; +}; + +#ifdef _LITTLE_ENDIAN_ +struct FWtemplate { + unsigned char txRate:7; + unsigned char ctsEn:1; + unsigned char rtsTxRate:7; + unsigned char rtsEn:1; + unsigned char txHt:1; //txCtrl; // {MSB to LSB} + unsigned char txshort:1; + unsigned char txbw:1; + unsigned char txSC:2; + unsigned char txSTBC:2; + unsigned char aggren:1; + unsigned char rtsHt:1; + unsigned char rtsShort:1; + unsigned char rtsbw:1; + unsigned char rtsSC:2; + unsigned char rtsSTBC:2; + unsigned char enCPUDur:1; + unsigned char rxMF:2; + unsigned char rxAMD:3; + unsigned char ccx:1; + unsigned char rsvd0:2; + unsigned char txAGCOffset:4; + unsigned char txAGCSign:1; + unsigned char txRaw:1; + unsigned char retryLimit1:2; + unsigned char retryLimit2:2; + unsigned char rsvd1:6; + unsigned char rsvd2; +}; + +struct RxFWInfo { + unsigned char RSVD0; + unsigned char RSVD1:4; + unsigned char PAGGR:1; + unsigned char FAGGR:1; + unsigned char RSVD2:2; + unsigned char RxMCS:7; + unsigned char HT:1; + unsigned char BW:1; + unsigned char SPLCP:1; + unsigned char RSVD3:2; + unsigned char PAM:1; + unsigned char MC:1; + unsigned char BC:1; + unsigned char RxCmd:1; + unsigned long TSFL; +}; + +#else // _BIG_ENDIAN_ + +struct FWtemplate { + unsigned char ctsEn:1; + unsigned char txRate:7; + unsigned char rtsEn:1; + unsigned char rtsTxRate:7; + unsigned char aggren:1; + unsigned char txSTBC:2; + unsigned char txSC:2; + unsigned char txbw:1; + unsigned char txshort:1; + unsigned char txHt:1; //txCtrl; // {MSB to LSB} + unsigned char enCPUDur:1; + unsigned char rtsSTBC:2; + unsigned char rtsSC:2; + unsigned char rtsbw:1; + unsigned char rtsShort:1; + unsigned char rtsHt:1; + unsigned char rsvd0:2; + unsigned char ccx:1; + unsigned char rxAMD:3; + unsigned char rxMF:2; + unsigned char retryLimit1:2; + unsigned char txRaw:1; + unsigned char txAGCSign:1; + unsigned char txAGCOffset:4; + unsigned char rsvd1:6; + unsigned char retryLimit2:2; + unsigned char rsvd2; +}; + +struct RxFWInfo { + unsigned char RSVD0; + unsigned char RSVD2:2; + unsigned char FAGGR:1; + unsigned char PAGGR:1; + unsigned char RSVD1:4; + unsigned char HT:1; + unsigned char RxMCS:7; + unsigned char RxCmd:1; + unsigned char BC:1; + unsigned char MC:1; + unsigned char PAM:1; + unsigned char RSVD3:2; + unsigned char SPLCP:1; + unsigned char BW:1; + unsigned long TSFL; +}; +#endif + +typedef struct _Phy_OFDM_Rx_Status_Report_8192cd +{ + unsigned char trsw_gain_X[4]; + unsigned char pwdb_all; + unsigned char cfosho_X[4]; + unsigned char cfotail_X[4]; + unsigned char rxevm_X[2]; + unsigned char rxsnr_X[4]; + unsigned char pdsnr_X[2]; + unsigned char csi_current_X[2]; + unsigned char csi_target_X[2]; + unsigned char sigevm; + unsigned char max_ex_pwr; +//#ifdef RTL8192SE +#ifdef _LITTLE_ENDIAN_ + unsigned char ex_intf_flg:1; + unsigned char sgi_en:1; + unsigned char rxsc:2; + unsigned char rsvd:4; +#else // _BIG_ENDIAN_ + unsigned char rsvd:4; + unsigned char rxsc:2; + unsigned char sgi_en:1; + unsigned char ex_intf_flg:1; +#endif +//#else // RTL8190, RTL8192E +// unsigned char sgi_en; +// unsigned char rxsc_sgien_exflg; +//#endif +} PHY_STS_OFDM_8192CD_T; + +typedef struct _Phy_CCK_Rx_Status_Report_8192cd +{ + /* For CCK rate descriptor. This is a signed 8:1 variable. LSB bit presend + 0.5. And MSB 7 bts presend a signed value. Range from -64~+63.5. */ + char adc_pwdb_X[4]; + unsigned char SQ_rpt; + char cck_agc_rpt; +} PHY_STS_CCK_8192CD_T; + +/* +enum _8190_POLL_BITFIELD_ { + POLL_BK = BIT(0), + POLL_BE = BIT(1), + POLL_VI = BIT(2), + POLL_VO = BIT(3), + POLL_BCN = BIT(4), + POLL_CMD = BIT(5), + POLL_MGT = BIT(6), + POLL_HIGH = BIT(7), + + POLL_HCCA = BIT(0), + STOP_BK = BIT(1), + STOP_BE = BIT(2), + STOP_VI = BIT(3), + STOP_VO = BIT(4), + STOP_MGT = BIT(5), + STOP_HIGH = BIT(6), + STOP_HCCA = BIT(7), +}; + +enum _8190_CPU_RESET_BITFIELD_ { + CPURST_SysRst = BIT(0), + CPURST_RegRst = BIT(1), + CPURST_Pwron = BIT(2), + CPURST_FwRst = BIT(3), + CPURST_Brdy = BIT(4), + CPURST_FwRdy = BIT(5), + CPURST_BaseChg = BIT(6), + CPURST_PutCode = BIT(7), + CPURST_BBRst = BIT(8), + CPURST_EnUart = BIT(14), + CPURST_EnJtag = BIT(15), +}; +*/ + +// +// Firmware Queue Layout +// +#define NUM_OF_FIRMWARE_QUEUE 10 +#define NUM_OF_PAGES_IN_FW 0x100 +#define NUM_OF_PAGE_IN_FW_QUEUE_BK 0x006 +#define NUM_OF_PAGE_IN_FW_QUEUE_BE 0x024 +#define NUM_OF_PAGE_IN_FW_QUEUE_VI 0x024 +#define NUM_OF_PAGE_IN_FW_QUEUE_VO 0x006 +#define NUM_OF_PAGE_IN_FW_QUEUE_HCCA 0 +#define NUM_OF_PAGE_IN_FW_QUEUE_CMD 0x2 +#define NUM_OF_PAGE_IN_FW_QUEUE_MGNT 0x1d +#define NUM_OF_PAGE_IN_FW_QUEUE_HIGH 0 +#define NUM_OF_PAGE_IN_FW_QUEUE_BCN 0x4 +#define NUM_OF_PAGE_IN_FW_QUEUE_PUB 0x88 +#define APPLIED_RESERVED_QUEUE_IN_FW 0x80000000 +#define RSVD_FW_QUEUE_PAGE_BK_SHIFT 0x00 +#define RSVD_FW_QUEUE_PAGE_BE_SHIFT 0x08 +#define RSVD_FW_QUEUE_PAGE_VI_SHIFT 0x10 +#define RSVD_FW_QUEUE_PAGE_VO_SHIFT 0x18 +#define RSVD_FW_QUEUE_PAGE_MGNT_SHIFT 0x10 +#define RSVD_FW_QUEUE_PAGE_BCN_SHIFT 0x00 +#define RSVD_FW_QUEUE_PAGE_PUB_SHIFT 0x08 + +// Tx power tracking +#define TxPwrTrk_OFDM_SwingTbl_Len 37 +#define TxPwrTrk_CCK_SwingTbl_Len 23 +#define TxPwrTrk_E_Val 3 + + +#ifdef CONFIG_RTL_92D_SUPPORT + +#define OFDM_TABLE_SIZE_92D 43 +#define index_mapping_NUM 13 +#define CCK_TABLE_SIZE_92D 33 +#define Rx_index_mapping_NUM 15 + +#endif + +#define RTL_ABS(a,b) ((a>b) ? (a-b) : (b-a)) + + +// +// For 8651C H/W MIC engine +// +#ifndef _ASICREGS_H +#define SYSTEM_BASE (0xB8000000) +/* Generic DMA */ +#define GDMA_BASE (SYSTEM_BASE+0xA000) /* 0xB800A000 */ +#define GDMACNR (GDMA_BASE+0x00) /* Generic DMA Control Register */ +#define GDMAIMR (GDMA_BASE+0x04) /* Generic DMA Interrupt Mask Register */ +#define GDMAISR (GDMA_BASE+0x08) /* Generic DMA Interrupt Status Register */ +#define GDMAICVL (GDMA_BASE+0x0C) /* Generic DMA Initial Checksum Value (Left Part) Register */ +#define GDMAICVR (GDMA_BASE+0x10) /* Generic DMA Initial Checksum Value (Right Part) Register */ +#define GDMASBP0 (GDMA_BASE+0x20) /* Generic DMA Source Block Pointer 0 Register */ +#define GDMASBL0 (GDMA_BASE+0x24) /* Generic DMA Source Block Length 0 Register */ +#define GDMASBP1 (GDMA_BASE+0x28) /* Generic DMA Source Block Pointer 1 Register */ +#define GDMASBL1 (GDMA_BASE+0x2C) /* Generic DMA Source Block Length 1 Register */ +#define GDMASBP2 (GDMA_BASE+0x30) /* Generic DMA Source Block Pointer 2 Register */ +#define GDMASBL2 (GDMA_BASE+0x34) /* Generic DMA Source Block Length 2 Register */ +#define GDMASBP3 (GDMA_BASE+0x38) /* Generic DMA Source Block Pointer 3 Register */ +#define GDMASBL3 (GDMA_BASE+0x3C) /* Generic DMA Source Block Length 3 Register */ +#define GDMASBP4 (GDMA_BASE+0x40) /* Generic DMA Source Block Pointer 4 Register */ +#define GDMASBL4 (GDMA_BASE+0x44) /* Generic DMA Source Block Length 4 Register */ +#define GDMASBP5 (GDMA_BASE+0x48) /* Generic DMA Source Block Pointer 5 Register */ +#define GDMASBL5 (GDMA_BASE+0x4C) /* Generic DMA Source Block Length 5 Register */ +#define GDMASBP6 (GDMA_BASE+0x50) /* Generic DMA Source Block Pointer 6 Register */ +#define GDMASBL6 (GDMA_BASE+0x54) /* Generic DMA Source Block Length 6 Register */ +#define GDMASBP7 (GDMA_BASE+0x58) /* Generic DMA Source Block Pointer 7 Register */ +#define GDMASBL7 (GDMA_BASE+0x5C) /* Generic DMA Source Block Length 7 Register */ +#define GDMADBP0 (GDMA_BASE+0x60) /* Generic DMA Destination Block Pointer 0 Register */ +#define GDMADBL0 (GDMA_BASE+0x64) /* Generic DMA Destination Block Length 0 Register */ +#define GDMADBP1 (GDMA_BASE+0x68) /* Generic DMA Destination Block Pointer 1 Register */ +#define GDMADBL1 (GDMA_BASE+0x6C) /* Generic DMA Destination Block Length 1 Register */ +#define GDMADBP2 (GDMA_BASE+0x70) /* Generic DMA Destination Block Pointer 2 Register */ +#define GDMADBL2 (GDMA_BASE+0x74) /* Generic DMA Destination Block Length 2 Register */ +#define GDMADBP3 (GDMA_BASE+0x78) /* Generic DMA Destination Block Pointer 3 Register */ +#define GDMADBL3 (GDMA_BASE+0x7C) /* Generic DMA Destination Block Length 3 Register */ +#define GDMADBP4 (GDMA_BASE+0x80) /* Generic DMA Destination Block Pointer 4 Register */ +#define GDMADBL4 (GDMA_BASE+0x84) /* Generic DMA Destination Block Length 4 Register */ +#define GDMADBP5 (GDMA_BASE+0x88) /* Generic DMA Destination Block Pointer 5 Register */ +#define GDMADBL5 (GDMA_BASE+0x8C) /* Generic DMA Destination Block Length 5 Register */ +#define GDMADBP6 (GDMA_BASE+0x90) /* Generic DMA Destination Block Pointer 6 Register */ +#define GDMADBL6 (GDMA_BASE+0x94) /* Generic DMA Destination Block Length 6 Register */ +#define GDMADBP7 (GDMA_BASE+0x98) /* Generic DMA Destination Block Pointer 7 Register */ +#define GDMADBL7 (GDMA_BASE+0x9C) /* Generic DMA Destination Block Length 7 Register */ + +/* Generic DMA Control Register */ +#define GDMA_ENABLE (1<<31) /* Enable GDMA */ +#define GDMA_POLL (1<<30) /* Kick off GDMA */ +#define GDMA_FUNCMASK (0xf<<24) /* GDMA Function Mask */ +#define GDMA_MEMCPY (0x0<<24) /* Memory Copy */ +#define GDMA_CHKOFF (0x1<<24) /* Checksum Offload */ +#define GDMA_STCAM (0x2<<24) /* Sequential T-CAM */ +#define GDMA_MEMSET (0x3<<24) /* Memory Set */ +#define GDMA_B64ENC (0x4<<24) /* Base 64 Encode */ +#define GDMA_B64DEC (0x5<<24) /* Base 64 Decode */ +#define GDMA_QPENC (0x6<<24) /* Quoted Printable Encode */ +#define GDMA_QPDEC (0x7<<24) /* Quoted Printable Decode */ +#define GDMA_MIC (0x8<<24) /* Wireless MIC */ +#define GDMA_MEMXOR (0x9<<24) /* Memory XOR */ +#define GDMA_MEMCMP (0xa<<24) /* Memory Compare */ +#define GDMA_BYTESWAP (0xb<<24) /* Byte Swap */ +#define GDMA_PATTERN (0xc<<24) /* Pattern Match */ +#define GDMA_SWAPTYPE0 (0<<22) /* Original:{0,1,2,3} => {1,0,3,2} */ +#define GDMA_SWAPTYPE1 (1<<22) /* Original:{0,1,2,3} => {3,2,1,0} */ +#define GDMA_ENTSIZMASK (3<<20) /* T-CAM Entry Size Mask */ +#define GDMA_ENTSIZ32 (0<<20) /* T-CAM Entry Size 32 bits */ +#define GDMA_ENTSIZ64 (1<<20) /* T-CAM Entry Size 64 bits */ +#define GDMA_ENTSIZ128 (2<<20) /* T-CAM Entry Size 128 bits */ +#define GDMA_ENTSIZ256 (3<<20) /* T-CAM Entry Size 256 bits */ + +/* Generic DMA Interrupt Mask Register */ +#define GDMA_COMPIE (1<<31) /* Completed Interrupt Enable */ +#define GDMA_NEEDCPUIE (1<<28) /* Need-CPU Interrupt Enable */ + +/* Generic DMA Interrupt Status Register */ +#define GDMA_COMPIP (1<<31) /* Completed Interrupt Status (write 1 to clear) */ +#define GDMA_NEEDCPUIP (1<<28) /* Need-CPU Interrupt Status (write 1 to clear) */ + +/* Generic DMA Source Block Length n. Register */ +#define GDMA_LDB (1<<31) /* Last Data Block */ +#define GDMA_BLKLENMASK (0x1fff) /* Block Length (valid value: from 1 to 8K-1 bytes) */ + +/* + * Some bits in GDMACNR are only for internal used. + * However, driver needs to configure them. + * + * burstSize[7:6] -- 00:4W, 01:8W, 10:16W, 11:32W. + * enough[5:4] -- 00:>16, 01:>10, 10:>4, 00:>0 + * dlow[3:2] -- 00:>24, 01:>20. 10:>16, 11:>8 + * slow[1:0] -- 00:>24, 01:>20. 10:>16, 11:>8 + */ +#define internalUsedGDMACNR (0x000000C0) +#endif // _ASICREGS_H + + +#ifdef SMART_CONCURRENT_92D + +__PACK struct SMCC_MAC_Info_Tbl{ + u8 channel ; + u8 bandwidth ; + // Single PHY IQC Byte 2~22 + u32 siqc_c80_b31b0 ; + u8 siqc_c94_b31b24 ; + u8 siqc_c4c_b31b24 ; + u32 siqc_c88_b31b0 ; + u8 siqc_c9c_b31b24 ; + u32 siqc_c14_b31b0 ; + u8 siqc_ca0_b31b24 ; + u32 siqc_c1c_b31b0 ; + u8 siqc_c78_b15b8 ; + // Dual PHY IQC Byte 23~33 + u32 diqc_c80_b31b0 ; + u8 diqc_c94_b31b24 ; + u8 diqc_c4c_b31b28 ; + u32 diqc_c14_b31b0 ; + u8 diqc_ca0_b31b24 ; +#if 0 // TESTCHIP_SUPPORT + // Path_A IMR Byte 34~73 + u32 imr_rfA[10] ; + // Path_B IMR Byte 74~113 + u32 imr_rfB[10] ; +#else + // IMR Byte 34~81 + u32 imr[12] ; +#endif + // 0_A LOFT Byte 130~133 + u32 loft_0A ; + // 0_BLOFT Byte 134~137 + u32 loft_0B ; + // BB reg Byte 138~209 + u32 bb_reg[18] ; + // RF A reg Byte 210~221 + u32 rfA_reg[3] ; + // RF B reg Byte 222~233 + u32 rfB_reg[3] ; +}__WLAN_ATTRIB_PACK__; +#endif //SMART_CONCURRENT_92D + +#endif // _8192CD_HW_H_ + |