more WIFI registers implemented, some fixed to match behavior on hardware

This commit is contained in:
MightyMax 2009-01-01 17:54:16 +00:00
parent 43880c9a21
commit 0a909c831d
2 changed files with 976 additions and 855 deletions

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,7 @@
/* standardize socket interface for linux and windows */ /* standardize socket interface for linux and windows */
#ifdef WIN32 #ifdef WIN32
#include <winsock2.h> #include <winsock2.h>
#define socket_t SOCKET #define socket_t SOCKET
#define sockaddr_t SOCKADDR #define sockaddr_t SOCKADDR
#else #else
@ -40,390 +40,409 @@
#define BASEPORT 7000 /* channel 1: 7000 ... channel 13: 7012 */ #define BASEPORT 7000 /* channel 1: 7000 ... channel 13: 7012 */
/* FIXME: make it configureable */ /* FIXME: make it configureable */
#define REG_WIFI_MODE 0x004 #define REG_WIFI_ID 0x000
#define REG_WIFI_WEP 0x006 #define REG_WIFI_MODE 0x004
#define REG_WIFI_IF 0x010 #define REG_WIFI_WEP 0x006
#define REG_WIFI_IE 0x012 #define REG_WIFI_IF 0x010
#define REG_WIFI_MAC0 0x018 #define REG_WIFI_IE 0x012
#define REG_WIFI_MAC1 0x01A #define REG_WIFI_MAC0 0x018
#define REG_WIFI_MAC2 0x01C #define REG_WIFI_MAC1 0x01A
#define REG_WIFI_BSS0 0x020 #define REG_WIFI_MAC2 0x01C
#define REG_WIFI_BSS1 0x022 #define REG_WIFI_BSS0 0x020
#define REG_WIFI_BSS2 0x024 #define REG_WIFI_BSS1 0x022
#define REG_WIFI_AID 0x028 #define REG_WIFI_BSS2 0x024
#define REG_WIFI_AIDCPY 0x02A #define REG_WIFI_AID_LOW 0x028
#define REG_WIFI_RETRYLIMIT 0x02C #define REG_WIFI_AID_HIGH 0x02A
#define REG_WIFI_WEPCNT 0x032 #define REG_WIFI_RETRYLIMIT 0x02C
#define REG_WIFI_POWERSTATE 0x03C #define REG_WIFI_WEPCNT 0x032
#define REG_WIFI_FORCEPS 0x040 #define REG_WIFI_POWER_US 0x036
#define REG_WIFI_RANDOM 0x044 #define REG_WIFI_POWERSTATE 0x03C
#define REG_WIFI_RXRANGEBEGIN 0x050 #define REG_WIFI_FORCEPS 0x040
#define REG_WIFI_RXRANGEEND 0x052 #define REG_WIFI_RANDOM 0x044
#define REG_WIFI_RXHWWRITECSR 0x054 #define REG_WIFI_RXRANGEBEGIN 0x050
#define REG_WIFI_WRITECSRLATCH 0x056 #define REG_WIFI_RXRANGEEND 0x052
#define REG_WIFI_CIRCBUFRADR 0x058 #define REG_WIFI_RXHWWRITECSR 0x054
#define REG_WIFI_RXREADCSR 0x05A #define REG_WIFI_WRITECSRLATCH 0x056
#define REG_WIFI_CIRCBUFREAD 0x060 #define REG_WIFI_CIRCBUFRADR 0x058
#define REG_WIFI_CIRCBUFWADR 0x068 #define REG_WIFI_RXREADCSR 0x05A
#define REG_WIFI_CIRCBUFWRITE 0x070 #define REG_WIFI_RXBUF_COUNT 0x05C
#define REG_WIFI_CIRCBUFWR_END 0x074 #define REG_WIFI_CIRCBUFREAD 0x060
#define REG_WIFI_CIRCBUFWR_SKIP 0x076 #define REG_WIFI_CIRCBUFRD_END 0x062
#define REG_WIFI_BEACONTRANS 0x080 #define REG_WIFI_CIRCBUFRD_SKIP 0x064
#define REG_WIFI_LISTENCOUNT 0x088 #define REG_WIFI_CIRCBUFWADR 0x068
#define REG_WIFI_BEACONPERIOD 0x08C #define REG_WIFI_CIRCBUFWRITE 0x070
#define REG_WIFI_LISTENINT 0x08E #define REG_WIFI_CIRCBUFWR_END 0x074
#define REG_WIFI_TXLOC1 0x0A0 #define REG_WIFI_CIRCBUFWR_SKIP 0x076
#define REG_WIFI_TXLOC2 0x0A4 #define REG_WIFI_BEACONTRANS 0x080
#define REG_WIFI_TXLOC3 0x0A8 #define REG_WIFI_LISTENCOUNT 0x088
#define REG_WIFI_TXOPT 0x0AC #define REG_WIFI_BEACONPERIOD 0x08C
#define REG_WIFI_TXCNT 0x0AE #define REG_WIFI_LISTENINT 0x08E
#define REG_WIFI_TXSTAT 0x0B8 #define REG_WIFI_TXLOC1 0x0A0
#define REG_WIFI_RXFILTER 0x0D0 #define REG_WIFI_TXLOC2 0x0A4
#define REG_WIFI_USCOUNTERCNT 0x0E8 #define REG_WIFI_TXLOC3 0x0A8
#define REG_WIFI_USCOMPARECNT 0x0EA #define REG_WIFI_TXOPT 0x0AC
#define REG_WIFI_USCOMPARE0 0x0F0 #define REG_WIFI_TXCNT 0x0AE
#define REG_WIFI_USCOMPARE1 0x0F2 #define REG_WIFI_TXSTAT 0x0B8
#define REG_WIFI_USCOMPARE2 0x0F4 #define REG_WIFI_RXFILTER 0x0D0
#define REG_WIFI_USCOMPARE3 0x0F6 #define REG_WIFI_USCOUNTERCNT 0x0E8
#define REG_WIFI_USCOUNTER0 0x0F8 #define REG_WIFI_USCOMPARECNT 0x0EA
#define REG_WIFI_USCOUNTER1 0x0FA #define REG_WIFI_EXTRACOUNTCNT 0x0EE
#define REG_WIFI_USCOUNTER2 0x0FC #define REG_WIFI_USCOMPARE0 0x0F0
#define REG_WIFI_USCOUNTER3 0x0FE #define REG_WIFI_USCOMPARE1 0x0F2
#define REG_WIFI_BBSIOCNT 0x158 #define REG_WIFI_USCOMPARE2 0x0F4
#define REG_WIFI_BBSIOWRITE 0x15A #define REG_WIFI_USCOMPARE3 0x0F6
#define REG_WIFI_BBSIOREAD 0x15C #define REG_WIFI_USCOUNTER0 0x0F8
#define REG_WIFI_BBSIOBUSY 0x15E #define REG_WIFI_USCOUNTER1 0x0FA
#define REG_WIFI_RFIODATA2 0x17C #define REG_WIFI_USCOUNTER2 0x0FC
#define REG_WIFI_RFIODATA1 0x17E #define REG_WIFI_USCOUNTER3 0x0FE
#define REG_WIFI_RFIOBSY 0x180 #define REG_WIFI_EXTRACOUNT 0x118
#define REG_WIFI_RFIOCNT 0x184 #define REG_WIFI_BBSIOCNT 0x158
#define REG_WIFI_BBSIOWRITE 0x15A
/* Referenced as RF_ in dswifi: rffilter_t */ #define REG_WIFI_BBSIOREAD 0x15C
/* based on the documentation for the RF2958 chip of RF Micro Devices */ #define REG_WIFI_BBSIOBUSY 0x15E
/* using the register names as in docs ( http://www.rfmd.com/pdfs/2958.pdf )*/ #define REG_WIFI_RFIODATA2 0x17C
/* even tho every register only has 18 bits we are using u32 */ #define REG_WIFI_RFIODATA1 0x17E
typedef struct rffilter_t #define REG_WIFI_RFIOBSY 0x180
{ #define REG_WIFI_RFIOCNT 0x184
union CFG1 #define REG_WIFI_IF_SET 0x21C
{
struct /* WIFI misc constants */
{ #define WIFI_CHIPID 0x1440 /* emulates "old" wifi chip, new is 0xC340 */
/* 0*/ unsigned IF_VGA_REG_EN:1; #define REG_PWRCNT 0x04000304
/* 1*/ unsigned IF_VCO_REG_EN:1;
/* 2*/ unsigned RF_VCO_REG_EN:1; /* Referenced as RF_ in dswifi: rffilter_t */
/* 3*/ unsigned HYBERNATE:1; /* based on the documentation for the RF2958 chip of RF Micro Devices */
/* 4*/ unsigned :10; /* using the register names as in docs ( http://www.rfmd.com/pdfs/2958.pdf )*/
/*14*/ unsigned REF_SEL:2; /* even tho every register only has 18 bits we are using u32 */
/*16*/ unsigned :2 ; typedef struct rffilter_t
} bits ; {
u32 val ; union CFG1
} CFG1 ; {
union IFPLL1 struct
{ {
struct /* 0*/ unsigned IF_VGA_REG_EN:1;
{ /* 1*/ unsigned IF_VCO_REG_EN:1;
/* 0*/ unsigned DAC:4; /* 2*/ unsigned RF_VCO_REG_EN:1;
/* 4*/ unsigned :5; /* 3*/ unsigned HYBERNATE:1;
/* 9*/ unsigned P1:1; /* 4*/ unsigned :10;
/*10*/ unsigned LD_EN1:1; /*14*/ unsigned REF_SEL:2;
/*11*/ unsigned AUTOCAL_EN1:1; /*16*/ unsigned :2 ;
/*12*/ unsigned PDP1:1; } bits ;
/*13*/ unsigned CPL1:1; u32 val ;
/*14*/ unsigned LPF1:1; } CFG1 ;
/*15*/ unsigned VTC_EN1:1; union IFPLL1
/*16*/ unsigned KV_EN1:1; {
/*17*/ unsigned PLL_EN1:1; struct
} bits ; {
u32 val ; /* 0*/ unsigned DAC:4;
} IFPLL1 ; /* 4*/ unsigned :5;
union IFPLL2 /* 9*/ unsigned P1:1;
{ /*10*/ unsigned LD_EN1:1;
struct /*11*/ unsigned AUTOCAL_EN1:1;
{ /*12*/ unsigned PDP1:1;
/* 0*/ unsigned IF_N:16; /*13*/ unsigned CPL1:1;
/*16*/ unsigned :2; /*14*/ unsigned LPF1:1;
} bits ; /*15*/ unsigned VTC_EN1:1;
u32 val ; /*16*/ unsigned KV_EN1:1;
} IFPLL2 ; /*17*/ unsigned PLL_EN1:1;
union IFPLL3 } bits ;
{ u32 val ;
struct } IFPLL1 ;
{ union IFPLL2
/* 0*/ unsigned KV_DEF1:4; {
/* 4*/ unsigned CT_DEF1:4; struct
/* 8*/ unsigned DN1:9; {
/*17*/ unsigned :1; /* 0*/ unsigned IF_N:16;
} bits ; /*16*/ unsigned :2;
u32 val ; } bits ;
} IFPLL3 ; u32 val ;
union RFPLL1 } IFPLL2 ;
{ union IFPLL3
struct {
{ struct
/* 0*/ unsigned DAC:4; {
/* 4*/ unsigned :5; /* 0*/ unsigned KV_DEF1:4;
/* 9*/ unsigned P:1; /* 4*/ unsigned CT_DEF1:4;
/*10*/ unsigned LD_EN:1; /* 8*/ unsigned DN1:9;
/*11*/ unsigned AUTOCAL_EN:1; /*17*/ unsigned :1;
/*12*/ unsigned PDP:1; } bits ;
/*13*/ unsigned CPL:1; u32 val ;
/*14*/ unsigned LPF:1; } IFPLL3 ;
/*15*/ unsigned VTC_EN:1; union RFPLL1
/*16*/ unsigned KV_EN:1; {
/*17*/ unsigned PLL_EN:1; struct
} bits ; {
u32 val ; /* 0*/ unsigned DAC:4;
} RFPLL1 ; /* 4*/ unsigned :5;
union RFPLL2 /* 9*/ unsigned P:1;
{ /*10*/ unsigned LD_EN:1;
struct /*11*/ unsigned AUTOCAL_EN:1;
{ /*12*/ unsigned PDP:1;
/* 0*/ unsigned NUM2:6; /*13*/ unsigned CPL:1;
/* 6*/ unsigned N2:12; /*14*/ unsigned LPF:1;
} bits ; /*15*/ unsigned VTC_EN:1;
u32 val ; /*16*/ unsigned KV_EN:1;
} RFPLL2 ; /*17*/ unsigned PLL_EN:1;
union RFPLL3 } bits ;
{ u32 val ;
struct } RFPLL1 ;
{ union RFPLL2
/* 0*/ unsigned NUM2:18; {
} bits ; struct
u32 val ; {
} RFPLL3 ; /* 0*/ unsigned NUM2:6;
union RFPLL4 /* 6*/ unsigned N2:12;
{ } bits ;
struct u32 val ;
{ } RFPLL2 ;
/* 0*/ unsigned KV_DEF:4; union RFPLL3
/* 4*/ unsigned CT_DEF:4; {
/* 8*/ unsigned DN:9; struct
/*17*/ unsigned :1; {
} bits ; /* 0*/ unsigned NUM2:18;
u32 val ; } bits ;
} RFPLL4 ; u32 val ;
union CAL1 } RFPLL3 ;
{ union RFPLL4
struct {
{ struct
/* 0*/ unsigned LD_WINDOW:3; {
/* 3*/ unsigned M_CT_VALUE:5; /* 0*/ unsigned KV_DEF:4;
/* 8*/ unsigned TLOCK:5; /* 4*/ unsigned CT_DEF:4;
/*13*/ unsigned TVCO:5; /* 8*/ unsigned DN:9;
} bits ; /*17*/ unsigned :1;
u32 val ; } bits ;
} CAL1 ; u32 val ;
union TXRX1 } RFPLL4 ;
{ union CAL1
struct {
{ struct
/* 0*/ unsigned TXBYPASS:1; {
/* 1*/ unsigned INTBIASEN:1; /* 0*/ unsigned LD_WINDOW:3;
/* 2*/ unsigned TXENMODE:1; /* 3*/ unsigned M_CT_VALUE:5;
/* 3*/ unsigned TXDIFFMODE:1; /* 8*/ unsigned TLOCK:5;
/* 4*/ unsigned TXLPFBW:3; /*13*/ unsigned TVCO:5;
/* 7*/ unsigned RXLPFBW:3; } bits ;
/*10*/ unsigned TXVGC:5; u32 val ;
/*15*/ unsigned PCONTROL:2; } CAL1 ;
/*17*/ unsigned RXDCFBBYPS:1; union TXRX1
} bits ; {
u32 val ; struct
} TXRX1 ; {
union PCNT1 /* 0*/ unsigned TXBYPASS:1;
{ /* 1*/ unsigned INTBIASEN:1;
struct /* 2*/ unsigned TXENMODE:1;
{ /* 3*/ unsigned TXDIFFMODE:1;
/* 0*/ unsigned TX_DELAY:3; /* 4*/ unsigned TXLPFBW:3;
/* 3*/ unsigned PC_OFFSET:6; /* 7*/ unsigned RXLPFBW:3;
/* 9*/ unsigned P_DESIRED:6; /*10*/ unsigned TXVGC:5;
/*15*/ unsigned MID_BIAS:3; /*15*/ unsigned PCONTROL:2;
} bits ; /*17*/ unsigned RXDCFBBYPS:1;
u32 val ; } bits ;
} PCNT1 ; u32 val ;
union PCNT2 } TXRX1 ;
{ union PCNT1
struct {
{ struct
/* 0*/ unsigned MIN_POWER:6; {
/* 6*/ unsigned MID_POWER:6; /* 0*/ unsigned TX_DELAY:3;
/*12*/ unsigned MAX_POWER:6; /* 3*/ unsigned PC_OFFSET:6;
} bits ; /* 9*/ unsigned P_DESIRED:6;
} PCNT2 ; /*15*/ unsigned MID_BIAS:3;
union VCOT1 } bits ;
{ u32 val ;
struct } PCNT1 ;
{ union PCNT2
/* 0*/ unsigned :16; {
/*16*/ unsigned AUX1:1; struct
/*17*/ unsigned AUX:1; {
} bits ; /* 0*/ unsigned MIN_POWER:6;
u32 val ; /* 6*/ unsigned MID_POWER:6;
} VCOT1 ; /*12*/ unsigned MAX_POWER:6;
} rffilter_t ; } bits ;
} PCNT2 ;
/* baseband chip refered as BB_, dataformat is unknown yet */ union VCOT1
/* it has at least 105 bytes of functional data */ {
typedef struct struct
{ {
u8 data[105] ; /* 0*/ unsigned :16;
} bb_t ; /*16*/ unsigned AUX1:1;
/*17*/ unsigned AUX:1;
/* communication interface between RF,BB and the mac */ } bits ;
typedef union u32 val ;
{ } VCOT1 ;
struct { } rffilter_t ;
/* 0*/ unsigned wordsize:5;
/* 5*/ unsigned :2; /* baseband chip refered as BB_, dataformat is unknown yet */
/* 7*/ unsigned readOperation:1; /* it has at least 105 bytes of functional data */
/* 8*/ unsigned :8; typedef struct
} bits ; {
u16 val ; u8 data[105] ;
} rfIOCnt_t ; } bb_t ;
typedef union /* communication interface between RF,BB and the mac */
{ typedef union
struct { {
/* 0*/ unsigned busy:1; struct {
/* 1*/ unsigned :15; /* 0*/ unsigned wordsize:5;
} bits ; /* 5*/ unsigned :2;
u16 val ; /* 7*/ unsigned readOperation:1;
} rfIOStat_t ; /* 8*/ unsigned :8;
} bits ;
typedef union u16 val ;
{ } rfIOCnt_t ;
struct {
/* 0*/ unsigned content:18 ; typedef union
/*18*/ unsigned address:5; {
/*23*/ unsigned :9; struct {
} bits ; /* 0*/ unsigned busy:1;
struct { /* 1*/ unsigned :15;
/* 0*/ unsigned low:16 ; } bits ;
/*16*/ unsigned high:16 ; u16 val ;
} val16 ; } rfIOStat_t ;
u16 array16[2] ;
u32 val ; typedef union
} rfIOData_t ; {
struct {
typedef union /* 0*/ unsigned content:18 ;
{ /*18*/ unsigned address:5;
struct { /*23*/ unsigned :9;
/* 0*/ unsigned address:7; } bits ;
/* 7*/ unsigned :5; struct {
/*12*/ unsigned mode:2; /* 0*/ unsigned low:16 ;
/*14*/ unsigned enable:1; /*16*/ unsigned high:16 ;
/*15*/ unsigned :1; } val16 ;
} bits ; u16 array16[2] ;
u16 val ; u32 val ;
} bbIOCnt_t ; } rfIOData_t ;
#define WIFI_IRQ_RECVCOMPLETE 0x0001 typedef union
#define WIFI_IRQ_SENDCOMPLETE 0x0002 {
#define WIFI_IRQ_COUNTUP 0x0004 struct {
#define WIFI_IRQ_SENDERROR 0x0008 /* 0*/ unsigned address:7;
#define WIFI_IRQ_STATCOUNTUP 0x0010 /* 7*/ unsigned :5;
#define WIFI_IRQ_STATACKUP 0x0020 /*12*/ unsigned mode:2;
#define WIFI_IRQ_RECVSTART 0x0040 /*14*/ unsigned enable:1;
#define WIFI_IRQ_SENDSTART 0x0080 /*15*/ unsigned :1;
#define WIFI_IRQ_RFWAKEUP 0x0800 } bits ;
#define WIFI_IRQ_TIMEBEACON 0x4000 u16 val ;
#define WIFI_IRQ_TIMEPREBEACON 0x8000 } bbIOCnt_t ;
/* definition of the irq bitfields for wifi irq's (cascaded at arm7 irq #24) */ #define WIFI_IRQ_RECVCOMPLETE 0x0001
typedef union #define WIFI_IRQ_SENDCOMPLETE 0x0002
{ #define WIFI_IRQ_COUNTUP 0x0004
struct #define WIFI_IRQ_SENDERROR 0x0008
{ #define WIFI_IRQ_STATCOUNTUP 0x0010
/* 0*/ unsigned recv_complete:1; #define WIFI_IRQ_STATACKUP 0x0020
/* 1*/ unsigned send_complete:1; #define WIFI_IRQ_RECVSTART 0x0040
/* 2*/ unsigned recv_countup:1; #define WIFI_IRQ_SENDSTART 0x0080
/* 3*/ unsigned send_error:1; #define WIFI_IRQ_RFWAKEUP 0x0800
/* 4*/ unsigned stat_countup:1; #define WIFI_IRQ_TIMEBEACON 0x4000
/* 5*/ unsigned stat_ackup:1; #define WIFI_IRQ_TIMEPREBEACON 0x8000
/* 6*/ unsigned recv_start:1;
/* 7*/ unsigned send_start:1; /* definition of the irq bitfields for wifi irq's (cascaded at arm7 irq #24) */
/* 8*/ unsigned :3; typedef union
/*11*/ unsigned rf_wakeup:1; {
/*12*/ unsigned :2; struct
/*14*/ unsigned time_beacon:1; {
/*15*/ unsigned time_prebeacon:1; /* 0*/ unsigned recv_complete:1;
} bits ; /* 1*/ unsigned send_complete:1;
u16 val ; /* 2*/ unsigned recv_countup:1;
} wifiirq_t ; /* 3*/ unsigned send_error:1;
/* 4*/ unsigned stat_countup:1;
/* wifimac_t: the buildin mac (arm7 addressrange: 0x04800000-0x04FFFFFF )*/ /* 5*/ unsigned stat_ackup:1;
/* http://www.akkit.org/info/dswifi.htm#WifiIOMap */ /* 6*/ unsigned recv_start:1;
typedef struct /* 7*/ unsigned send_start:1;
{ /* 8*/ unsigned :3;
/* wifi interrupt handling */ /*11*/ unsigned rf_wakeup:1;
wifiirq_t IE ; /*12*/ unsigned :2;
wifiirq_t IF ; /*14*/ unsigned time_beacon:1;
/*15*/ unsigned time_prebeacon:1;
/* modes */ } bits ;
u16 macMode ; u16 val ;
u16 wepMode ; } wifiirq_t ;
BOOL WEP_enable ;
/* wifimac_t: the buildin mac (arm7 addressrange: 0x04800000-0x04FFFFFF )*/
/* sending */ /* http://www.akkit.org/info/dswifi.htm#WifiIOMap */
u16 TXSlot[3] ; typedef struct
u16 TXCnt ; {
u16 TXOpt ; /* wifi interrupt handling */
u16 BEACONSlot ; wifiirq_t IE ;
BOOL BEACON_enable ; wifiirq_t IF ;
/* receiving */ /* modes */
u16 RXCnt ; u16 macMode ;
u16 RXCheckCounter ; u16 wepMode ;
BOOL WEP_enable ;
/* addressing/handshaking */
union /* sending */
{ u16 TXSlot[3] ;
u16 words[3] ; u16 TXCnt ;
u8 bytes[6] ; u16 TXOpt ;
} mac ; u16 BEACONSlot ;
union BOOL BEACON_enable ;
{
u16 words[3] ; /* receiving */
u8 bytes[6] ; u16 RXCnt ;
} bss ; u16 RXCheckCounter ;
u16 aid ;
u16 retryLimit ; /* addressing/handshaking */
union
/* timing */ {
u64 usec ; u16 words[3] ;
BOOL usecEnable ; u8 bytes[6] ;
u64 ucmp ; } mac ;
BOOL ucmpEnable ; union
{
/* subchips */ u16 words[3] ;
rffilter_t RF ; u8 bytes[6] ;
bb_t BB ; } bss ;
u16 aid ;
/* subchip communications */ u16 pid ; /* player ID or aid_low */
rfIOCnt_t rfIOCnt ; u16 retryLimit ;
rfIOStat_t rfIOStatus ;
rfIOData_t rfIOData ; /* timing */
bbIOCnt_t bbIOCnt ; BOOL crystalEnabled ;
u64 usec ;
/* buffers */ BOOL usecEnable ;
u16 circularBuffer[0x1000] ; u64 ucmp ;
u16 RXRangeBegin ; BOOL ucmpEnable ;
u16 RXRangeEnd ; u16 eCount ;
u16 RXHWWriteCursor ; BOOL eCountEnable ;
u16 RXReadCursor ;
u16 RXUnits ; /* subchips */
u16 CircBufReadAddress ; rffilter_t RF ;
u16 CircBufWriteAddress ; bb_t BB ;
u16 CircBufEnd ;
u16 CircBufSkip ; /* subchip communications */
rfIOCnt_t rfIOCnt ;
/* others */ rfIOStat_t rfIOStatus ;
u16 randomSeed ; rfIOData_t rfIOData ;
bbIOCnt_t bbIOCnt ;
/* desmume host communication */
socket_t udpSocket ; /* buffers */
u8 channel ; u16 circularBuffer[0x1000] ;
u16 RXRangeBegin ;
} wifimac_t ; u16 RXRangeEnd ;
u16 RXHWWriteCursor ;
u16 RXReadCursor ;
u16 RXUnits ;
u16 RXBufCount ;
u16 CircBufReadAddress ;
u16 CircBufWriteAddress ;
u16 CircBufRdEnd ;
u16 CircBufRdSkip ;
u16 CircBufWrEnd ;
u16 CircBufWrSkip ;
/* others */
u16 randomSeed ;
/* desmume host communication */
socket_t udpSocket ;
u8 channel ;
} wifimac_t ;
extern wifimac_t wifiMac ; extern wifimac_t wifiMac ;