From 8c4b756068d1e578f4f0cdeb11b8cf64a198ab19 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Sun, 21 Aug 2022 15:08:20 +0200 Subject: [PATCH] * add MP-reply error counters * feeble attempt at fixing slowdown/desync/etc problems --- src/Wifi.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++--------- src/Wifi.h | 9 +++++++++ 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/Wifi.cpp b/src/Wifi.cpp index f3ae94f7..97e71c12 100644 --- a/src/Wifi.cpp +++ b/src/Wifi.cpp @@ -39,6 +39,7 @@ u8 RAM[0x2000]; u16 IO[0x1000>>1]; #define IOPORT(x) IO[(x)>>1] +#define IOPORT8(x) ((u8*)IO)[x] u16 Random; @@ -382,6 +383,19 @@ void IncrementTXCount(TXSlot* slot) *(u16*)&RAM[slot->Addr + 0x4] = cnt; } +void ReportMPReplyErrors(u16 clientfail) +{ + // TODO: do these trigger any IRQ? + + for (int i = 1; i < 16; i++) + { + if (!(clientfail & (1< NextSync)) { if ((!(RXCounter & 0x1FF))) - { + {baurf=3; CheckRX(false); } } @@ -1447,7 +1466,7 @@ void USTimer(u32 param) SetStatus(1); //printf("%016llX: finished receiving a frame, aid=%04X, FC=%04X, client=%04X\n", USTimestamp, IOPORT(W_AIDLow), *(u16*)&RXBuffer[0xC], *(u16*)&RXBuffer[0xC + 26]); WIFI_LOG("wifi: finished receiving packet %04X\n", *(u16*)&RXBuffer[12]); - LocalMP::_logstring2(USTimestamp, "FINISH RX", ((*(u16*)&RXBuffer[12])<<16)|(*(u16*)&RXBuffer[12+26]), RXTimestamp); + LocalMP::_logstring2(USTimestamp, "FINISH RX", ((IOPORT(W_AIDLow))<<16)|(*(u16*)&RXBuffer[12+26]), RXTimestamp); ComStatus &= ~0x1; RXCounter = 0; @@ -1607,6 +1626,20 @@ u16 Read(u32 addr) case W_TXBusy: return IOPORT(W_TXBusy) & 0x001F; // no bit for MP replies. odd + + case W_CMDStat0: + case W_CMDStat1: + case W_CMDStat2: + case W_CMDStat3: + case W_CMDStat4: + case W_CMDStat5: + case W_CMDStat6: + case W_CMDStat7: + { + u16 ret = IOPORT(addr&0xFFF); + IOPORT(addr&0xFFF) = 0; + return ret; + } } //printf("WIFI: read %08X\n", addr); diff --git a/src/Wifi.h b/src/Wifi.h index 2e156738..831362ac 100644 --- a/src/Wifi.h +++ b/src/Wifi.h @@ -136,6 +136,15 @@ enum W_TXErrorCount = 0x1C0, W_RXCount = 0x1C4, + W_CMDStat0 = 0x1D0, + W_CMDStat1 = 0x1D2, + W_CMDStat2 = 0x1D4, + W_CMDStat3 = 0x1D6, + W_CMDStat4 = 0x1D8, + W_CMDStat5 = 0x1DA, + W_CMDStat6 = 0x1DC, + W_CMDStat7 = 0x1DE, + W_TXSeqNo = 0x210, W_RFStatus = 0x214, W_IFSet = 0x21C,