early-access version 2173

This commit is contained in:
pineappleEA
2021-10-31 18:43:26 +01:00
parent 943e9729fe
commit b37854dccc
8 changed files with 63 additions and 4 deletions

View File

@@ -2,6 +2,10 @@
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
// SPDX-License-Identifier: MPL-2.0
// Copyright 2021 Skyline Team and Contributors (https://github.com/skyline-emu/)
// Copyright 2019-2020 Ryujinx Team and Contributors
#include <cstdlib>
#include <cstring>
@@ -38,6 +42,8 @@ NvResult nvhost_ctrl::Ioctl1(DeviceFD fd, Ioctl command, const std::vector<u8>&
return IocCtrlEventRegister(input, output);
case 0x20:
return IocCtrlEventUnregister(input, output);
case 0x21:
return IocCtrlFreeEventBatch(input, output);
}
break;
default:
@@ -212,4 +218,18 @@ NvResult nvhost_ctrl::IocCtrlClearEventWait(const std::vector<u8>& input, std::v
return NvResult::Success;
}
NvResult nvhost_ctrl::IocCtrlFreeEventBatch(const std::vector<u8>& input, std::vector<u8>& output) {
IocCtrlFreeEventBatchParams params{};
std::memcpy(&params, input.data(), sizeof(params));
LOG_DEBUG(Service_NVDRV, "called, bit_mask={}", params.bit_mask);
for (u32 event_id = 0; event_id < MaxNvEvents; ++event_id) {
if (params.bit_mask & (1ULL << event_id)) {
events_interface.UnregisterEvent(event_id);
}
}
return NvResult::Success;
}
} // namespace Service::Nvidia::Devices

View File

@@ -119,16 +119,18 @@ private:
static_assert(sizeof(IocCtrlEventUnregisterParams) == 4,
"IocCtrlEventUnregisterParams is incorrect size");
struct IocCtrlEventKill {
u64_le user_events{};
struct IocCtrlFreeEventBatchParams {
u64_le bit_mask{};
};
static_assert(sizeof(IocCtrlEventKill) == 8, "IocCtrlEventKill is incorrect size");
static_assert(sizeof(IocCtrlFreeEventBatchParams) == 8,
"IocCtrlFreeEventBatchParams is incorrect size");
NvResult NvOsGetConfigU32(const std::vector<u8>& input, std::vector<u8>& output);
NvResult IocCtrlEventWait(const std::vector<u8>& input, std::vector<u8>& output, bool is_async);
NvResult IocCtrlEventRegister(const std::vector<u8>& input, std::vector<u8>& output);
NvResult IocCtrlEventUnregister(const std::vector<u8>& input, std::vector<u8>& output);
NvResult IocCtrlClearEventWait(const std::vector<u8>& input, std::vector<u8>& output);
NvResult IocCtrlFreeEventBatch(const std::vector<u8>& input, std::vector<u8>& output);
EventInterface& events_interface;
SyncpointManager& syncpoint_manager;