hle: Eliminate need to specify command headers for IPC. (#6678)

This commit is contained in:
Steveice10 2023-07-14 17:32:59 -07:00 committed by GitHub
parent 0bedb28bdc
commit e043caac27
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
96 changed files with 2691 additions and 2707 deletions

View file

@ -12,7 +12,7 @@ namespace Service::NWM {
NWM_CEC::NWM_CEC() : ServiceFramework("nwm::CEC") {
static const FunctionInfo functions[] = {
// clang-format off
{IPC::MakeHeader(0x000D, 2, 2), nullptr, "SendProbeRequest"},
{0x000D, nullptr, "SendProbeRequest"},
// clang-format on
};
RegisterHandlers(functions);

View file

@ -12,7 +12,7 @@ namespace Service::NWM {
NWM_EXT::NWM_EXT() : ServiceFramework("nwm::EXT") {
static const FunctionInfo functions[] = {
// clang-format off
{IPC::MakeHeader(0x0008, 1, 0), nullptr, "ControlWirelessEnabled"},
{0x0008, nullptr, "ControlWirelessEnabled"},
// clang-format on
};
RegisterHandlers(functions);

View file

@ -12,9 +12,9 @@ namespace Service::NWM {
NWM_INF::NWM_INF() : ServiceFramework("nwm::INF") {
static const FunctionInfo functions[] = {
// clang-format off
{IPC::MakeHeader(0x0006, 15, 4), nullptr, "RecvBeaconBroadcastData"},
{IPC::MakeHeader(0x0007, 29, 2), nullptr, "ConnectToEncryptedAP"},
{IPC::MakeHeader(0x0008, 12, 2), nullptr, "ConnectToAP"},
{0x0006, nullptr, "RecvBeaconBroadcastData"},
{0x0007, nullptr, "ConnectToEncryptedAP"},
{0x0008, nullptr, "ConnectToAP"},
// clang-format on
};
RegisterHandlers(functions);

View file

@ -569,7 +569,7 @@ boost::optional<Network::MacAddress> NWM_UDS::GetNodeMacAddress(u16 dest_node_id
}
void NWM_UDS::Shutdown(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x03, 0, 0);
IPC::RequestParser rp(ctx);
initialized = false;
@ -587,7 +587,7 @@ void NWM_UDS::Shutdown(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::RecvBeaconBroadcastData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x0F, 16, 4);
IPC::RequestParser rp(ctx);
u32 out_buffer_size = rp.Pop<u32>();
u32 unk1 = rp.Pop<u32>();
@ -677,7 +677,7 @@ ResultVal<std::shared_ptr<Kernel::Event>> NWM_UDS::Initialize(
}
void NWM_UDS::InitializeWithVersion(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1B, 12, 2);
IPC::RequestParser rp(ctx);
u32 sharedmem_size = rp.Pop<u32>();
auto node = rp.PopRaw<NodeInfo>();
u16 version = rp.Pop<u16>();
@ -694,7 +694,7 @@ void NWM_UDS::InitializeWithVersion(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::InitializeDeprecated(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x01, 11, 2);
IPC::RequestParser rp(ctx);
u32 sharedmem_size = rp.Pop<u32>();
auto node = rp.PopRaw<NodeInfo>();
auto sharedmem = rp.PopObject<Kernel::SharedMemory>();
@ -710,7 +710,7 @@ void NWM_UDS::InitializeDeprecated(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::GetConnectionStatus(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xB, 0, 0);
IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(13, 0);
rb.Push(RESULT_SUCCESS);
@ -729,7 +729,7 @@ void NWM_UDS::GetConnectionStatus(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::GetNodeInformation(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xD, 1, 0);
IPC::RequestParser rp(ctx);
u16 network_node_id = rp.Pop<u16>();
if (!initialized) {
@ -760,7 +760,7 @@ void NWM_UDS::GetNodeInformation(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::Bind(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 4, 0);
IPC::RequestParser rp(ctx);
u32 bind_node_id = rp.Pop<u32>();
u32 recv_buffer_size = rp.Pop<u32>();
@ -811,7 +811,7 @@ void NWM_UDS::Bind(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::Unbind(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x12, 1, 0);
IPC::RequestParser rp(ctx);
u32 bind_node_id = rp.Pop<u32>();
if (bind_node_id == 0) {
@ -911,7 +911,7 @@ ResultCode NWM_UDS::BeginHostingNetwork(std::span<const u8> network_info_buffer,
}
void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1D, 1, 4);
IPC::RequestParser rp(ctx);
const u32 passphrase_size = rp.Pop<u32>();
@ -929,7 +929,7 @@ void NWM_UDS::BeginHostingNetwork(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::BeginHostingNetworkDeprecated(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x04, 0x10, 2);
IPC::RequestParser rp(ctx);
// Real NWM module reads 0x108 bytes from the command buffer into the network info, where the
// last 0xCC bytes (application_data and size) are undefined values. Here we just read the first
// 0x3C defined bytes and zero application_data in BeginHostingNetwork.
@ -947,7 +947,7 @@ void NWM_UDS::BeginHostingNetworkDeprecated(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::EjectClient(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x05, 1, 0);
IPC::RequestParser rp(ctx);
const u16 network_node_id = rp.Pop<u16>();
LOG_WARNING(Service_NWM, "(stubbed) called");
@ -998,7 +998,7 @@ void NWM_UDS::EjectClient(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x07, 2, 0);
IPC::RequestParser rp(ctx);
rp.Skip(2, false);
LOG_WARNING(Service_NWM, "stubbed");
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@ -1006,7 +1006,7 @@ void NWM_UDS::UpdateNetworkAttribute(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::DestroyNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x08, 0, 0);
IPC::RequestParser rp(ctx);
// Unschedule the beacon broadcast event.
system.CoreTiming().UnscheduleEvent(beacon_broadcast_event, 0);
@ -1044,7 +1044,7 @@ void NWM_UDS::DestroyNetwork(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::DisconnectNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0xA, 0, 0);
IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
using Network::WifiPacket;
@ -1089,7 +1089,7 @@ void NWM_UDS::DisconnectNetwork(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::SendTo(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x17, 6, 2);
IPC::RequestParser rp(ctx);
rp.Skip(1, false);
u16 dest_node_id = rp.Pop<u16>();
@ -1167,7 +1167,7 @@ void NWM_UDS::SendTo(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::PullPacket(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x14, 3, 0);
IPC::RequestParser rp(ctx);
u32 bind_node_id = rp.Pop<u32>();
u32 max_out_buff_size_aligned = rp.Pop<u32>();
@ -1236,7 +1236,7 @@ void NWM_UDS::PullPacket(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::GetChannel(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1A, 0, 0);
IPC::RequestParser rp(ctx);
IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
std::lock_guard lock(connection_status_mutex);
@ -1292,7 +1292,7 @@ void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx, u16 command_id,
}
void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x1E, 2, 4);
IPC::RequestParser rp(ctx);
const auto connection_type = rp.Pop<u8>();
[[maybe_unused]] const auto passphrase_size = rp.Pop<u32>();
@ -1308,7 +1308,7 @@ void NWM_UDS::ConnectToNetwork(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::ConnectToNetworkDeprecated(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x09, 0x11, 2);
IPC::RequestParser rp(ctx);
// Similar to BeginHostingNetworkDeprecated, we only read the first 0x3C bytes into the network
// info
@ -1325,7 +1325,7 @@ void NWM_UDS::ConnectToNetworkDeprecated(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::SetApplicationData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x10, 1, 2);
IPC::RequestParser rp(ctx);
u32 size = rp.Pop<u32>();
@ -1349,7 +1349,7 @@ void NWM_UDS::SetApplicationData(Kernel::HLERequestContext& ctx) {
}
void NWM_UDS::GetApplicationData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx, 0x11, 1, 0);
IPC::RequestParser rp(ctx);
u32 input_size = rp.Pop<u32>();
u8 appdata_size = network_info.application_data_size;
@ -1367,8 +1367,8 @@ void NWM_UDS::GetApplicationData(Kernel::HLERequestContext& ctx) {
rb.PushStaticBuffer(std::move(appdata), 0);
}
void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id) {
IPC::RequestParser rp(ctx, command_id, 0, 6);
void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx) {
IPC::RequestParser rp(ctx);
const std::vector<u8> network_struct_buffer = rp.PopStaticBuffer();
ASSERT(network_struct_buffer.size() == sizeof(NetworkInfo));
@ -1433,11 +1433,6 @@ void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id)
rb.PushStaticBuffer(std::move(output_buffer), 0);
}
template <u16 command_id>
void NWM_UDS::DecryptBeaconData(Kernel::HLERequestContext& ctx) {
DecryptBeaconData(ctx, command_id);
}
// Sends a 802.11 beacon frame with information about the current network.
void NWM_UDS::BeaconBroadcastCallback(std::uintptr_t user_data, s64 cycles_late) {
// Don't do anything if we're not actually hosting a network
@ -1464,35 +1459,35 @@ void NWM_UDS::BeaconBroadcastCallback(std::uintptr_t user_data, s64 cycles_late)
NWM_UDS::NWM_UDS(Core::System& system) : ServiceFramework("nwm::UDS"), system(system) {
static const FunctionInfo functions[] = {
// clang-format off
{IPC::MakeHeader(0x0001, 11, 2), &NWM_UDS::InitializeDeprecated, "Initialize (deprecated)"},
{IPC::MakeHeader(0x0002, 0, 0), nullptr, "Scrap"},
{IPC::MakeHeader(0x0003, 0, 0), &NWM_UDS::Shutdown, "Shutdown"},
{IPC::MakeHeader(0x0004, 16, 2), &NWM_UDS::BeginHostingNetworkDeprecated, "BeginHostingNetwork (deprecated)"},
{IPC::MakeHeader(0x0005, 1, 0), &NWM_UDS::EjectClient, "EjectClient"},
{IPC::MakeHeader(0x0006, 0, 0), nullptr, "EjectSpectator"},
{IPC::MakeHeader(0x0007, 2, 0), &NWM_UDS::UpdateNetworkAttribute, "UpdateNetworkAttribute"},
{IPC::MakeHeader(0x0008, 0, 0), &NWM_UDS::DestroyNetwork, "DestroyNetwork"},
{IPC::MakeHeader(0x0009, 17, 2), &NWM_UDS::ConnectToNetworkDeprecated, "ConnectToNetwork (deprecated)"},
{IPC::MakeHeader(0x000A, 0, 0), &NWM_UDS::DisconnectNetwork, "DisconnectNetwork"},
{IPC::MakeHeader(0x000B, 0, 0), &NWM_UDS::GetConnectionStatus, "GetConnectionStatus"},
{IPC::MakeHeader(0x000D, 1, 0), &NWM_UDS::GetNodeInformation, "GetNodeInformation"},
{IPC::MakeHeader(0x000E, 0, 6), &NWM_UDS::DecryptBeaconData<0x0E>, "DecryptBeaconData (deprecated)"},
{IPC::MakeHeader(0x000F, 16, 4), &NWM_UDS::RecvBeaconBroadcastData, "RecvBeaconBroadcastData"},
{IPC::MakeHeader(0x0010, 1, 2), &NWM_UDS::SetApplicationData, "SetApplicationData"},
{IPC::MakeHeader(0x0011, 1, 0), &NWM_UDS::GetApplicationData, "GetApplicationData"},
{IPC::MakeHeader(0x0012, 4, 0), &NWM_UDS::Bind, "Bind"},
{IPC::MakeHeader(0x0013, 1, 0), &NWM_UDS::Unbind, "Unbind"},
{IPC::MakeHeader(0x0014, 3, 0), &NWM_UDS::PullPacket, "PullPacket"},
{IPC::MakeHeader(0x0015, 2, 0), nullptr, "SetMaxSendDelay"},
{IPC::MakeHeader(0x0017, 6, 2), &NWM_UDS::SendTo, "SendTo"},
{IPC::MakeHeader(0x001A, 0, 0), &NWM_UDS::GetChannel, "GetChannel"},
{IPC::MakeHeader(0x001B, 12, 2), &NWM_UDS::InitializeWithVersion, "InitializeWithVersion"},
{IPC::MakeHeader(0x001D, 1, 4), &NWM_UDS::BeginHostingNetwork, "BeginHostingNetwork"},
{IPC::MakeHeader(0x001E, 2, 4), &NWM_UDS::ConnectToNetwork, "ConnectToNetwork"},
{IPC::MakeHeader(0x001F, 0, 6), &NWM_UDS::DecryptBeaconData<0x1F>, "DecryptBeaconData"},
{IPC::MakeHeader(0x0020, 1, 0), nullptr, "Flush"},
{IPC::MakeHeader(0x0021, 2, 0), nullptr, "SetProbeResponseParam"},
{IPC::MakeHeader(0x0022, 16, 2), nullptr, "ScanOnConnection"},
{0x0001, &NWM_UDS::InitializeDeprecated, "Initialize (deprecated)"},
{0x0002, nullptr, "Scrap"},
{0x0003, &NWM_UDS::Shutdown, "Shutdown"},
{0x0004, &NWM_UDS::BeginHostingNetworkDeprecated, "BeginHostingNetwork (deprecated)"},
{0x0005, &NWM_UDS::EjectClient, "EjectClient"},
{0x0006, nullptr, "EjectSpectator"},
{0x0007, &NWM_UDS::UpdateNetworkAttribute, "UpdateNetworkAttribute"},
{0x0008, &NWM_UDS::DestroyNetwork, "DestroyNetwork"},
{0x0009, &NWM_UDS::ConnectToNetworkDeprecated, "ConnectToNetwork (deprecated)"},
{0x000A, &NWM_UDS::DisconnectNetwork, "DisconnectNetwork"},
{0x000B, &NWM_UDS::GetConnectionStatus, "GetConnectionStatus"},
{0x000D, &NWM_UDS::GetNodeInformation, "GetNodeInformation"},
{0x000E, &NWM_UDS::DecryptBeaconData, "DecryptBeaconData (deprecated)"},
{0x000F, &NWM_UDS::RecvBeaconBroadcastData, "RecvBeaconBroadcastData"},
{0x0010, &NWM_UDS::SetApplicationData, "SetApplicationData"},
{0x0011, &NWM_UDS::GetApplicationData, "GetApplicationData"},
{0x0012, &NWM_UDS::Bind, "Bind"},
{0x0013, &NWM_UDS::Unbind, "Unbind"},
{0x0014, &NWM_UDS::PullPacket, "PullPacket"},
{0x0015, nullptr, "SetMaxSendDelay"},
{0x0017, &NWM_UDS::SendTo, "SendTo"},
{0x001A, &NWM_UDS::GetChannel, "GetChannel"},
{0x001B, &NWM_UDS::InitializeWithVersion, "InitializeWithVersion"},
{0x001D, &NWM_UDS::BeginHostingNetwork, "BeginHostingNetwork"},
{0x001E, &NWM_UDS::ConnectToNetwork, "ConnectToNetwork"},
{0x001F, &NWM_UDS::DecryptBeaconData, "DecryptBeaconData"},
{0x0020, nullptr, "Flush"},
{0x0021, nullptr, "SetProbeResponseParam"},
{0x0022, nullptr, "ScanOnConnection"},
// clang-format on
};
connection_status_event =

View file

@ -443,9 +443,6 @@ private:
* 1 : Result of function, 0 on success, otherwise error code
* 2, 3: output buffer return descriptor & ptr
*/
void DecryptBeaconData(Kernel::HLERequestContext& ctx, u16 command_id);
template <u16 command_id>
void DecryptBeaconData(Kernel::HLERequestContext& ctx);
ResultVal<std::shared_ptr<Kernel::Event>> Initialize(