diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-08-17 10:38:00 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-08-17 10:38:00 -0500 |
| commit | 4baaa3755ecf708ce89ef073c10afcec17e4dacd (patch) | |
| tree | 8afa58f46fcc7815bac1e68377227acc4b872446 /Source/Core | |
| parent | 5e652686f70b17ee5c325a9cfb4f2471fb0d9814 (diff) | |
| parent | 84764db3b222d707c00adbd6100ddefb38a909ef (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.cpp | 31 | ||||
| -rw-r--r-- | Source/Core/Core/HW/EXI_DeviceEthernet.cpp | 6 |
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--) |
