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)
{
/* 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 ;
}
#endif
@ -3032,7 +3033,7 @@ void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val)
/* wifi mac access */
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);
return;
}
@ -3347,8 +3348,8 @@ void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val)
{
// access to non regular hw registers
// return to not overwrite valid data
WIFI_write16(&wifiMac, adr, val & 0xFFFF);
WIFI_write16(&wifiMac, adr+2, val >> 16);
WIFI_write16(adr, val & 0xFFFF);
WIFI_write16(adr+2, val >> 16);
T1WriteLong(MMU.MMU_MEM[ARMCPU_ARM7][0x48], adr&MMU.MMU_MASK[ARMCPU_ARM7][0x48], val);
return;
}
@ -3477,9 +3478,9 @@ u8 FASTCALL _MMU_ARM7_read08(u32 adr)
if ((adr>=0x04800000)&&(adr<0x05000000))
{
if (adr & 1)
return (WIFI_read16(&wifiMac,adr-1) >> 8) & 0xFF;
return (WIFI_read16(adr-1) >> 8) & 0xFF;
else
return WIFI_read16(&wifiMac,adr) & 0xFF;
return WIFI_read16(adr) & 0xFF;
}
#endif
@ -3502,7 +3503,7 @@ u16 FASTCALL _MMU_ARM7_read16(u32 adr)
#ifdef EXPERIMENTAL_WIFI
/* wifi mac access */
if ((adr>=0x04800000)&&(adr<0x05000000))
return WIFI_read16(&wifiMac,adr) ;
return WIFI_read16(adr) ;
#endif
if ( (adr >= 0x08000000) && (adr < 0x0A010000) )
@ -3568,7 +3569,7 @@ u32 FASTCALL _MMU_ARM7_read32(u32 adr)
#ifdef EXPERIMENTAL_WIFI
/* wifi mac access */
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
if ( (adr >= 0x08000000) && (adr < 0x0A010000) )

View File

@ -47,7 +47,7 @@
PathInfo path;
#if 1
#if 0
#ifndef PUBLIC_RELEASE
#undef EXPERIMENTAL_WIFI
#endif
@ -532,8 +532,7 @@ int NDS_Init( void) {
return -1;
#ifdef EXPERIMENTAL_WIFI
WIFI_Init(&wifiMac) ;
WIFI_SoftAP_Init(&wifiMac);
WIFI_Init() ;
#endif
nds.FW_ARM9BootCode = NULL;
@ -562,7 +561,7 @@ void NDS_DeInit(void) {
gpu3D->NDS_3D_Close();
#ifdef EXPERIMENTAL_WIFI
WIFI_SoftAP_Shutdown(&wifiMac);
WIFI_DeInit();
#endif
cheatsSearchClose();
}
@ -2053,13 +2052,14 @@ void Sequencer::execHardware()
}
}
#ifndef PUBLIC_RELEASE
#ifdef EXPERIMENTAL_WIFI
if(wifi.isTriggered())
{
WIFI_usTrigger(&wifiMac);
WIFI_SoftAP_usTrigger(&wifiMac);
WIFI_usTrigger();
wifi.timestamp += kWifiCycles;
}
#endif
#endif
if(divider.isTriggered()) divider.exec();
@ -2491,10 +2491,7 @@ void NDS_Reset()
SPU_Reset();
#ifdef EXPERIMENTAL_WIFI
WIFI_Init(&wifiMac);
WIFI_SoftAP_Shutdown(&wifiMac);
WIFI_SoftAP_Init(&wifiMac);
WIFI_Reset();
#endif
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;
void WIFI_Init(wifimac_t *wifi);
bool WIFI_Init();
void WIFI_DeInit();
void WIFI_Reset();
/* subchip communication IO functions */
void WIFI_setRF_CNT(wifimac_t *wifi, u16 val) ;
void WIFI_setRF_DATA(wifimac_t *wifi, u16 val, u8 part) ;
u16 WIFI_getRF_DATA(wifimac_t *wifi, u8 part) ;
u16 WIFI_getRF_STATUS(wifimac_t *wifi) ;
void WIFI_setRF_CNT(u16 val) ;
void WIFI_setRF_DATA(u16 val, u8 part) ;
u16 WIFI_getRF_DATA(u8 part) ;
u16 WIFI_getRF_STATUS() ;
void WIFI_setBB_CNT(wifimac_t *wifi,u16 val) ;
u8 WIFI_getBB_DATA(wifimac_t *wifi) ;
void WIFI_setBB_DATA(wifimac_t *wifi, u8 val) ;
void WIFI_setBB_CNT(u16 val) ;
u8 WIFI_getBB_DATA() ;
void WIFI_setBB_DATA(u8 val) ;
/* wifimac io */
void WIFI_write16(wifimac_t *wifi,u32 address, u16 val) ;
u16 WIFI_read16(wifimac_t *wifi,u32 address) ;
void WIFI_write16(u32 address, u16 val) ;
u16 WIFI_read16(u32 address) ;
/* wifimac timing */
void WIFI_usTrigger(wifimac_t *wifi) ;
void WIFI_usTrigger() ;
/* SoftAP */
@ -518,10 +520,11 @@ typedef struct _WIFI_FrameHeader
} WIFI_FrameHeader;
int WIFI_SoftAP_Init(wifimac_t *wifi);
void WIFI_SoftAP_Shutdown(wifimac_t *wifi);
void WIFI_SoftAP_RecvPacketFromDS(wifimac_t *wifi, u8 *packet, int len);
void WIFI_SoftAP_usTrigger(wifimac_t *wifi);
bool WIFI_SoftAP_Init();
void WIFI_SoftAP_DeInit();
void WIFI_SoftAP_Reset();
void WIFI_SoftAP_RecvPacketFromDS(u8 *packet, int len);
void WIFI_SoftAP_usTrigger();
/* DS WFC profile data documented here : */
/* http://dsdev.bigredpimp.com/2006/07/31/aoss-wfc-profile-data/ */