summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2026-02-05 13:52:39 -0600
committerJordan Woyak <jordan.woyak@gmail.com>2026-02-15 20:14:15 -0600
commitf7ff93bea698e5d0bcd79ded0b416f2b9b91e73c (patch)
tree5a8e7af64631b35e6660d66f4edf5f9fcb2ccc4f /Source/Core
parent69c143d8f0df48c2d3513c7cf4621a8cfe5d5a9d (diff)
AMMediaboard: Deduplicate code into AMMBCommandSend.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/DVD/AMMediaboard.cpp92
1 files changed, 33 insertions, 59 deletions
diff --git a/Source/Core/Core/HW/DVD/AMMediaboard.cpp b/Source/Core/Core/HW/DVD/AMMediaboard.cpp
index 22ecf7a2b9..f5457c21c7 100644
--- a/Source/Core/Core/HW/DVD/AMMediaboard.cpp
+++ b/Source/Core/Core/HW/DVD/AMMediaboard.cpp
@@ -701,6 +701,36 @@ static s32 NetDIMMConnect(GuestSocket guest_socket, sockaddr_in* addr, int len)
return ret;
}
+static void AMMBCommandSend(u32 parameter_offset, u32 network_buffer_base)
+{
+ const auto guest_socket = GuestSocket(s_media_buffer_32[parameter_offset]);
+ const auto fd = GetHostSocket(guest_socket);
+ u32 off = s_media_buffer_32[parameter_offset + 1];
+ auto len = std::min<u32>(s_media_buffer_32[parameter_offset + 2], sizeof(s_network_buffer));
+ const u64 off_len = u64(off) + len;
+
+ if (off >= network_buffer_base && off_len <= network_buffer_base + sizeof(s_network_buffer))
+ {
+ off -= network_buffer_base;
+ }
+ else if (off_len > sizeof(s_network_buffer))
+ {
+ ERROR_LOG_FMT(AMMEDIABOARD_NET,
+ "GC-AM: send(error) unhandled destination or length: {:08x}, len={}", off, len);
+ off = 0;
+ len = 0;
+ }
+
+ const int ret = send(fd, reinterpret_cast<char*>(s_network_buffer + off), len, SEND_FLAGS);
+ const int err = WSAGetLastError();
+
+ NOTICE_LOG_FMT(AMMEDIABOARD_NET, "GC-AM: send( {}({}), 0x{:08x}, {} ): {} {}", fd,
+ u32(guest_socket), off, len, ret, err);
+
+ s_media_buffer[1] = s_media_buffer[8];
+ s_media_buffer_32[1] = ret;
+}
+
static void AMMBCommandSocket(u32 parameter_offset)
{
// Protocol is not sent
@@ -1230,36 +1260,8 @@ u32 ExecuteCommand(std::array<u32, 3>& dicmd_buf, u32* diimm_buf, u32 address, u
break;
}
case AMMBCommand::Send:
- {
- const auto fd = GetHostSocket(GuestSocket(s_media_buffer_32[2]));
- u32 off = s_media_buffer_32[3];
- auto len = std::min<u32>(s_media_buffer_32[4], sizeof(s_network_buffer));
- const u64 off_len = u64(off) + len;
-
- if (off >= NetworkBufferAddress3 &&
- off_len <= NetworkBufferAddress3 + sizeof(s_network_buffer))
- {
- off -= NetworkBufferAddress3;
- }
- else if (off_len > sizeof(s_network_buffer))
- {
- ERROR_LOG_FMT(AMMEDIABOARD_NET,
- "GC-AM: send(error) unhandled destination or length: {:08x}, len={}", off,
- len);
- off = 0;
- len = 0;
- }
-
- const int ret = send(fd, reinterpret_cast<char*>(s_network_buffer + off), len, SEND_FLAGS);
- const int err = WSAGetLastError();
-
- NOTICE_LOG_FMT(AMMEDIABOARD_NET, "GC-AM: send( {}({}), 0x{:08x}, {} ): {} {}\n", fd,
- s_media_buffer_32[2], off, len, ret, err);
-
- s_media_buffer[1] = s_media_buffer[8];
- s_media_buffer_32[1] = ret;
+ AMMBCommandSend(2, NetworkBufferAddress3);
break;
- }
case AMMBCommand::Socket:
AMMBCommandSocket(2);
break;
@@ -1679,36 +1681,8 @@ u32 ExecuteCommand(std::array<u32, 3>& dicmd_buf, u32* diimm_buf, u32 address, u
}
break;
case AMMBCommand::Send:
- {
- const auto fd = GetHostSocket(GuestSocket(s_media_buffer_32[10]));
- u32 off = s_media_buffer_32[11];
- auto len = std::min<u32>(s_media_buffer_32[12], sizeof(s_network_buffer));
- const u64 off_len = u64(off) + len;
-
- if (off >= NetworkBufferAddress1 &&
- off_len <= NetworkBufferAddress1 + sizeof(s_network_buffer))
- {
- off -= NetworkBufferAddress1;
- }
- else if (off_len > sizeof(s_network_buffer))
- {
- ERROR_LOG_FMT(AMMEDIABOARD_NET,
- "GC-AM: send(error) unhandled destination or length: {:08x}, len={}", off,
- len);
- off = 0;
- len = 0;
- }
-
- const int ret = send(fd, reinterpret_cast<char*>(s_network_buffer + off), len, SEND_FLAGS);
- const int err = WSAGetLastError();
-
- NOTICE_LOG_FMT(AMMEDIABOARD_NET, "GC-AM: send( {}({}), 0x{:08x}, {} ): {} {}\n", fd,
- s_media_buffer_32[10], off, len, ret, err);
-
- s_media_buffer[1] = s_media_buffer[8];
- s_media_buffer_32[1] = ret;
- }
- break;
+ AMMBCommandSend(10, NetworkBufferAddress1);
+ break;
case AMMBCommand::Socket:
AMMBCommandSocket(10);
break;