summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2015-08-17 10:38:00 -0500
committerRyan Houdek <Sonicadvance1@gmail.com>2015-08-17 10:38:00 -0500
commit4baaa3755ecf708ce89ef073c10afcec17e4dacd (patch)
tree8afa58f46fcc7815bac1e68377227acc4b872446 /Source/Core
parent5e652686f70b17ee5c325a9cfb4f2471fb0d9814 (diff)
parent84764db3b222d707c00adbd6100ddefb38a909ef (diff)
Merge pull request #2840 from zeroZshadow/master
Ignore all writes to BBA_TXFIFOCNT
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/BBA-TAP/TAP_Win32.cpp31
-rw-r--r--Source/Core/Core/HW/EXI_DeviceEthernet.cpp6
2 files changed, 26 insertions, 11 deletions
diff --git a/Source/Core/Core/HW/BBA-TAP/TAP_Win32.cpp b/Source/Core/Core/HW/BBA-TAP/TAP_Win32.cpp
index e9ffd400f4..ce9a18825e 100644
--- a/Source/Core/Core/HW/BBA-TAP/TAP_Win32.cpp
+++ b/Source/Core/Core/HW/BBA-TAP/TAP_Win32.cpp
@@ -248,7 +248,7 @@ bool CEXIETHERNET::SendFrame(u8 *frame, u32 size)
OVERLAPPED overlap;
ZeroMemory(&overlap, sizeof(overlap));
- //WriteFile will always return false because the TAP handle is async
+ // WriteFile will always return false because the TAP handle is async
WriteFile(mHAdapter, frame, size, NULL, &overlap);
DWORD res = GetLastError();
@@ -304,19 +304,25 @@ bool CEXIETHERNET::RecvStart()
DWORD res = ReadFile(mHAdapter, mRecvBuffer, BBA_RECV_SIZE,
(LPDWORD)&mRecvBufferLength, &mReadOverlapped);
- if (!res && (GetLastError() != ERROR_IO_PENDING))
- {
- // error occurred
- return false;
- }
-
if (res)
{
- // Completed immediately
+ // Since the read is synchronous here, complete immediately
RecvHandlePacket();
+ return true;
+ }
+ else
+ {
+ DWORD err = GetLastError();
+ if (err == ERROR_IO_PENDING)
+ {
+ return true;
+ }
+
+ // Unexpected error
+ ERROR_LOG(SP1, "Failed to recieve packet with error 0x%X", err);
+ return false;
}
- return true;
}
void CEXIETHERNET::RecvStop()
@@ -326,6 +332,9 @@ void CEXIETHERNET::RecvStop()
UnregisterWaitEx(mHReadWait, INVALID_HANDLE_VALUE);
- CloseHandle(mHRecvEvent);
- mHRecvEvent = INVALID_HANDLE_VALUE;
+ if (mHRecvEvent != INVALID_HANDLE_VALUE)
+ {
+ CloseHandle(mHRecvEvent);
+ mHRecvEvent = INVALID_HANDLE_VALUE;
+ }
}
diff --git a/Source/Core/Core/HW/EXI_DeviceEthernet.cpp b/Source/Core/Core/HW/EXI_DeviceEthernet.cpp
index 3468bad8d8..2de81059af 100644
--- a/Source/Core/Core/HW/EXI_DeviceEthernet.cpp
+++ b/Source/Core/Core/HW/EXI_DeviceEthernet.cpp
@@ -358,6 +358,12 @@ void CEXIETHERNET::MXCommandHandler(u32 data, u32 size)
data &= (data & 0xff) ^ 0xff;
goto write_to_register;
+ case BBA_TXFIFOCNT:
+ case BBA_TXFIFOCNT+1:
+ // Ignore all writes to BBA_TXFIFOCNT
+ transfer.address += size;
+ return;
+
write_to_register:
default:
for (int i = size - 1; i >= 0; i--)