Wifi: add proper resetting & deiniting, remove the useless 'wifimac_t *wifi'

parameter from all functions.
This commit is contained in:
luigi__ 2009-08-08 14:46:49 +00:00
parent c2291bfee6
commit 7532a5d66e
4 changed files with 410 additions and 370 deletions

View File

@ -2986,7 +2986,8 @@ void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val)
if ((adr & 0xFF800000) == 0x04800000) if ((adr & 0xFF800000) == 0x04800000)
{ {
/* is wifi hardware, dont intermix with regular hardware registers */ /* is wifi hardware, dont intermix with regular hardware registers */
/* FIXME handle 8 bit writes */ // 8-bit writes to wifi I/O and RAM are ignored
// Reference: http://nocash.emubase.de/gbatek.htm#dswifiiomap
return ; return ;
} }
#endif #endif
@ -3032,7 +3033,7 @@ void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val)
/* wifi mac access */ /* wifi mac access */
if ((adr>=0x04800000)&&(adr<0x05000000)) if ((adr>=0x04800000)&&(adr<0x05000000))
{ {
WIFI_write16(&wifiMac,adr,val); WIFI_write16(adr,val);
T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][0x48], adr&MMU.MMU_MASK[ARMCPU_ARM7][0x48], val); T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][0x48], adr&MMU.MMU_MASK[ARMCPU_ARM7][0x48], val);
return; return;
} }
@ -3347,8 +3348,8 @@ void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val)
{ {
// access to non regular hw registers // access to non regular hw registers
// return to not overwrite valid data // return to not overwrite valid data
WIFI_write16(&wifiMac, adr, val & 0xFFFF); WIFI_write16(adr, val & 0xFFFF);
WIFI_write16(&wifiMac, adr+2, val >> 16); WIFI_write16(adr+2, val >> 16);
T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][0x48], adr&MMU.MMU_MASK[ARMCPU_ARM7][0x48], val); T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][0x48], adr&MMU.MMU_MASK[ARMCPU_ARM7][0x48], val);
return; return;
} }
@ -3477,9 +3478,9 @@ u8 FASTCALL _MMU_ARM7_read08(u32 adr)
if ((adr>=0x04800000)&&(adr<0x05000000)) if ((adr>=0x04800000)&&(adr<0x05000000))
{ {
if (adr & 1) if (adr & 1)
return (WIFI_read16(&wifiMac,adr-1) >> 8) & 0xFF; return (WIFI_read16(adr-1) >> 8) & 0xFF;
else else
return WIFI_read16(&wifiMac,adr) & 0xFF; return WIFI_read16(adr) & 0xFF;
} }
#endif #endif
@ -3502,7 +3503,7 @@ u16 FASTCALL _MMU_ARM7_read16(u32 adr)
#ifdef EXPERIMENTAL_WIFI #ifdef EXPERIMENTAL_WIFI
/* wifi mac access */ /* wifi mac access */
if ((adr>=0x04800000)&&(adr<0x05000000)) if ((adr>=0x04800000)&&(adr<0x05000000))
return WIFI_read16(&wifiMac,adr) ; return WIFI_read16(adr) ;
#endif #endif
if ( (adr >= 0x08000000) && (adr < 0x0A010000) ) if ( (adr >= 0x08000000) && (adr < 0x0A010000) )
@ -3568,7 +3569,7 @@ u32 FASTCALL _MMU_ARM7_read32(u32 adr)
#ifdef EXPERIMENTAL_WIFI #ifdef EXPERIMENTAL_WIFI
/* wifi mac access */ /* wifi mac access */
if ((adr>=0x04800000)&&(adr<0x05000000)) if ((adr>=0x04800000)&&(adr<0x05000000))
return (WIFI_read16(&wifiMac,adr) | (WIFI_read16(&wifiMac,adr+2) << 16)); return (WIFI_read16(adr) | (WIFI_read16(adr+2) << 16));
#endif #endif
if ( (adr >= 0x08000000) && (adr < 0x0A010000) ) if ( (adr >= 0x08000000) && (adr < 0x0A010000) )

View File

@ -47,7 +47,7 @@
PathInfo path; PathInfo path;
#if 1 #if 0
#ifndef PUBLIC_RELEASE #ifndef PUBLIC_RELEASE
#undef EXPERIMENTAL_WIFI #undef EXPERIMENTAL_WIFI
#endif #endif
@ -532,8 +532,7 @@ int NDS_Init( void) {
return -1; return -1;
#ifdef EXPERIMENTAL_WIFI #ifdef EXPERIMENTAL_WIFI
WIFI_Init(&wifiMac) ; WIFI_Init() ;
WIFI_SoftAP_Init(&wifiMac);
#endif #endif
nds.FW_ARM9BootCode = NULL; nds.FW_ARM9BootCode = NULL;
@ -562,7 +561,7 @@ void NDS_DeInit(void) {
gpu3D->NDS_3D_Close(); gpu3D->NDS_3D_Close();
#ifdef EXPERIMENTAL_WIFI #ifdef EXPERIMENTAL_WIFI
WIFI_SoftAP_Shutdown(&wifiMac); WIFI_DeInit();
#endif #endif
cheatsSearchClose(); cheatsSearchClose();
} }
@ -2053,13 +2052,14 @@ void Sequencer::execHardware()
} }
} }
#ifndef PUBLIC_RELEASE
#ifdef EXPERIMENTAL_WIFI #ifdef EXPERIMENTAL_WIFI
if(wifi.isTriggered()) if(wifi.isTriggered())
{ {
WIFI_usTrigger(&wifiMac); WIFI_usTrigger();
WIFI_SoftAP_usTrigger(&wifiMac);
wifi.timestamp += kWifiCycles; wifi.timestamp += kWifiCycles;
} }
#endif
#endif #endif
if(divider.isTriggered()) divider.exec(); if(divider.isTriggered()) divider.exec();
@ -2491,10 +2491,7 @@ void NDS_Reset()
SPU_Reset(); SPU_Reset();
#ifdef EXPERIMENTAL_WIFI #ifdef EXPERIMENTAL_WIFI
WIFI_Init(&wifiMac); WIFI_Reset();
WIFI_SoftAP_Shutdown(&wifiMac);
WIFI_SoftAP_Init(&wifiMac);
#endif #endif
memcpy(FW_Mac, (MMU.fw.data + 0x36), 6); memcpy(FW_Mac, (MMU.fw.data + 0x36), 6);

File diff suppressed because it is too large Load Diff

View File

@ -486,24 +486,26 @@ extern bool wifi_netEnabled;
extern wifimac_t wifiMac; extern wifimac_t wifiMac;
void WIFI_Init(wifimac_t *wifi); bool WIFI_Init();
void WIFI_DeInit();
void WIFI_Reset();
/* subchip communication IO functions */ /* subchip communication IO functions */
void WIFI_setRF_CNT(wifimac_t *wifi, u16 val) ; void WIFI_setRF_CNT(u16 val) ;
void WIFI_setRF_DATA(wifimac_t *wifi, u16 val, u8 part) ; void WIFI_setRF_DATA(u16 val, u8 part) ;
u16 WIFI_getRF_DATA(wifimac_t *wifi, u8 part) ; u16 WIFI_getRF_DATA(u8 part) ;
u16 WIFI_getRF_STATUS(wifimac_t *wifi) ; u16 WIFI_getRF_STATUS() ;
void WIFI_setBB_CNT(wifimac_t *wifi,u16 val) ; void WIFI_setBB_CNT(u16 val) ;
u8 WIFI_getBB_DATA(wifimac_t *wifi) ; u8 WIFI_getBB_DATA() ;
void WIFI_setBB_DATA(wifimac_t *wifi, u8 val) ; void WIFI_setBB_DATA(u8 val) ;
/* wifimac io */ /* wifimac io */
void WIFI_write16(wifimac_t *wifi,u32 address, u16 val) ; void WIFI_write16(u32 address, u16 val) ;
u16 WIFI_read16(wifimac_t *wifi,u32 address) ; u16 WIFI_read16(u32 address) ;
/* wifimac timing */ /* wifimac timing */
void WIFI_usTrigger(wifimac_t *wifi) ; void WIFI_usTrigger() ;
/* SoftAP */ /* SoftAP */
@ -518,10 +520,11 @@ typedef struct _WIFI_FrameHeader
} WIFI_FrameHeader; } WIFI_FrameHeader;
int WIFI_SoftAP_Init(wifimac_t *wifi); bool WIFI_SoftAP_Init();
void WIFI_SoftAP_Shutdown(wifimac_t *wifi); void WIFI_SoftAP_DeInit();
void WIFI_SoftAP_RecvPacketFromDS(wifimac_t *wifi, u8 *packet, int len); void WIFI_SoftAP_Reset();
void WIFI_SoftAP_usTrigger(wifimac_t *wifi); void WIFI_SoftAP_RecvPacketFromDS(u8 *packet, int len);
void WIFI_SoftAP_usTrigger();
/* DS WFC profile data documented here : */ /* DS WFC profile data documented here : */
/* http://dsdev.bigredpimp.com/2006/07/31/aoss-wfc-profile-data/ */ /* http://dsdev.bigredpimp.com/2006/07/31/aoss-wfc-profile-data/ */