mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-06-04 16:53:48 -04:00
strat: prefer os::NativeHandle to Handle/svc::Handle where sensible
This commit is contained in:
parent
597d521f52
commit
d0041a33ac
50 changed files with 193 additions and 190 deletions
|
@ -25,9 +25,9 @@ namespace ams::dd {
|
|||
Result CreateDeviceAddressSpace(DeviceAddressSpaceType *das, u64 size);
|
||||
void DestroyDeviceAddressSpace(DeviceAddressSpaceType *das);
|
||||
|
||||
void AttachDeviceAddressSpaceHandle(DeviceAddressSpaceType *das, Handle handle, bool managed);
|
||||
void AttachDeviceAddressSpaceHandle(DeviceAddressSpaceType *das, DeviceAddressSpaceHandle handle, bool managed);
|
||||
|
||||
Handle GetDeviceAddressSpaceHandle(DeviceAddressSpaceType *das);
|
||||
DeviceAddressSpaceHandle GetDeviceAddressSpaceHandle(DeviceAddressSpaceType *das);
|
||||
|
||||
Result MapDeviceAddressSpaceAligned(DeviceAddressSpaceType *das, ProcessHandle process_handle, u64 process_address, size_t size, DeviceVirtualAddress device_address, MemoryPermission device_perm);
|
||||
Result MapDeviceAddressSpaceNotAligned(DeviceAddressSpaceType *das, ProcessHandle process_handle, u64 process_address, size_t size, DeviceVirtualAddress device_address, MemoryPermission device_perm);
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
namespace ams::dd {
|
||||
|
||||
using DeviceName = ::ams::svc::DeviceName;
|
||||
using enum ::ams::svc::DeviceName;
|
||||
|
||||
constexpr inline u64 DeviceAddressSpaceMemoryRegionAlignment = 4_KB;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace ams::dd {
|
|||
|
||||
using DeviceVirtualAddress = u64;
|
||||
|
||||
using DeviceAddressSpaceHandle = ::Handle;
|
||||
using DeviceAddressSpaceHandle = os::NativeHandle;
|
||||
|
||||
struct DeviceAddressSpaceType {
|
||||
enum State {
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
namespace ams::ldr::pm {
|
||||
|
||||
/* Process Manager API. */
|
||||
Result CreateProcess(Handle *out, PinId pin_id, u32 flags, Handle reslimit);
|
||||
Result CreateProcess(os::NativeHandle *out, PinId pin_id, u32 flags, os::NativeHandle reslimit);
|
||||
Result GetProgramInfo(ProgramInfo *out, const ncm::ProgramLocation &loc);
|
||||
Result PinProgram(PinId *out, const ncm::ProgramLocation &loc);
|
||||
Result UnpinProgram(PinId pin_id);
|
||||
|
|
|
@ -73,7 +73,7 @@ namespace ams::map {
|
|||
|
||||
class MappedCodeMemory {
|
||||
private:
|
||||
Handle process_handle;
|
||||
os::NativeHandle process_handle;
|
||||
Result result;
|
||||
uintptr_t dst_address;
|
||||
uintptr_t src_address;
|
||||
|
@ -83,7 +83,7 @@ namespace ams::map {
|
|||
/* ... */
|
||||
}
|
||||
|
||||
MappedCodeMemory(Handle p_h, uintptr_t dst, uintptr_t src, size_t sz) : process_handle(p_h), dst_address(dst), src_address(src), size(sz) {
|
||||
MappedCodeMemory(os::NativeHandle p_h, uintptr_t dst, uintptr_t src, size_t sz) : process_handle(p_h), dst_address(dst), src_address(src), size(sz) {
|
||||
this->result = svc::MapProcessCodeMemory(this->process_handle, this->dst_address, this->src_address, this->size);
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace ams::osdbg {
|
|||
|
||||
struct ThreadInfo;
|
||||
|
||||
Result InitializeThreadInfo(ThreadInfo *thread_info, svc::Handle debug_handle, const svc::DebugInfoCreateProcess *create_process, const svc::DebugInfoCreateThread *create_thread);
|
||||
Result InitializeThreadInfo(ThreadInfo *thread_info, os::NativeHandle debug_handle, const svc::DebugInfoCreateProcess *create_process, const svc::DebugInfoCreateThread *create_thread);
|
||||
Result UpdateThreadInfo(ThreadInfo *thread_info);
|
||||
|
||||
Result GetThreadName(char *dst, const ThreadInfo *thread_info);
|
||||
|
|
|
@ -40,7 +40,7 @@ namespace ams::osdbg {
|
|||
uintptr_t _function;
|
||||
uintptr_t _name_pointer;
|
||||
impl::ThreadTypeCommon *_thread_type;
|
||||
svc::Handle _debug_handle;
|
||||
os::NativeHandle _debug_handle;
|
||||
ThreadTypeType _thread_type_type;
|
||||
svc::DebugInfoCreateProcess _debug_info_create_process;
|
||||
svc::DebugInfoCreateThread _debug_info_create_thread;
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace ams::sf::cmif {
|
|||
class ServerMessageProcessor;
|
||||
|
||||
struct HandlesToClose {
|
||||
Handle handles[8];
|
||||
os::NativeHandle handles[8];
|
||||
size_t num_handles;
|
||||
};
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace ams::sf::hipc {
|
|||
NON_MOVEABLE(Server);
|
||||
private:
|
||||
cmif::ServiceObjectHolder static_object;
|
||||
::Handle port_handle;
|
||||
os::NativeHandle port_handle;
|
||||
sm::ServiceName service_name;
|
||||
int index;
|
||||
bool service_managed;
|
||||
|
@ -95,7 +95,7 @@ namespace ams::sf::hipc {
|
|||
Result ProcessForMitmServer(os::MultiWaitHolderType *holder);
|
||||
Result ProcessForSession(os::MultiWaitHolderType *holder);
|
||||
|
||||
void RegisterServerImpl(Server *server, Handle port_handle, bool is_mitm_server) {
|
||||
void RegisterServerImpl(Server *server, os::NativeHandle port_handle, bool is_mitm_server) {
|
||||
server->port_handle = port_handle;
|
||||
hipc::AttachMultiWaitHolderForAccept(server, port_handle);
|
||||
|
||||
|
@ -111,7 +111,7 @@ namespace ams::sf::hipc {
|
|||
os::LinkMultiWaitHolder(std::addressof(this->multi_wait), server);
|
||||
}
|
||||
|
||||
void RegisterServerImpl(int index, cmif::ServiceObjectHolder &&static_holder, Handle port_handle, bool is_mitm_server) {
|
||||
void RegisterServerImpl(int index, cmif::ServiceObjectHolder &&static_holder, os::NativeHandle port_handle, bool is_mitm_server) {
|
||||
/* Allocate server memory. */
|
||||
auto *server = this->AllocateServer();
|
||||
AMS_ABORT_UNLESS(server != nullptr);
|
||||
|
@ -128,7 +128,7 @@ namespace ams::sf::hipc {
|
|||
|
||||
Result RegisterServerImpl(int index, cmif::ServiceObjectHolder &&static_holder, sm::ServiceName service_name, size_t max_sessions) {
|
||||
/* Register service. */
|
||||
Handle port_handle;
|
||||
os::NativeHandle port_handle;
|
||||
R_TRY(sm::RegisterService(&port_handle, service_name, max_sessions, false));
|
||||
|
||||
/* Allocate server memory. */
|
||||
|
@ -151,7 +151,7 @@ namespace ams::sf::hipc {
|
|||
template<typename Interface>
|
||||
Result RegisterMitmServerImpl(int index, cmif::ServiceObjectHolder &&static_holder, sm::ServiceName service_name) {
|
||||
/* Install mitm service. */
|
||||
Handle port_handle;
|
||||
os::NativeHandle port_handle;
|
||||
R_TRY(this->InstallMitmServerImpl(&port_handle, service_name, &Interface::ShouldMitm));
|
||||
|
||||
/* Allocate server memory. */
|
||||
|
@ -171,7 +171,7 @@ namespace ams::sf::hipc {
|
|||
return ResultSuccess();
|
||||
}
|
||||
|
||||
Result InstallMitmServerImpl(Handle *out_port_handle, sm::ServiceName service_name, MitmQueryFunction query_func);
|
||||
Result InstallMitmServerImpl(os::NativeHandle *out_port_handle, sm::ServiceName service_name, MitmQueryFunction query_func);
|
||||
protected:
|
||||
virtual Server *AllocateServer() = 0;
|
||||
virtual void DestroyServer(Server *server) = 0;
|
||||
|
@ -205,7 +205,7 @@ namespace ams::sf::hipc {
|
|||
}
|
||||
|
||||
template<typename Interface>
|
||||
void RegisterObjectForServer(SharedPointer<Interface> static_object, Handle port_handle) {
|
||||
void RegisterObjectForServer(SharedPointer<Interface> static_object, os::NativeHandle port_handle) {
|
||||
this->RegisterServerImpl(0, cmif::ServiceObjectHolder(std::move(static_object)), port_handle, false);
|
||||
}
|
||||
|
||||
|
@ -214,7 +214,7 @@ namespace ams::sf::hipc {
|
|||
return this->RegisterServerImpl(0, cmif::ServiceObjectHolder(std::move(static_object)), service_name, max_sessions);
|
||||
}
|
||||
|
||||
void RegisterServer(int port_index, Handle port_handle) {
|
||||
void RegisterServer(int port_index, os::NativeHandle port_handle) {
|
||||
this->RegisterServerImpl(port_index, cmif::ServiceObjectHolder(), port_handle, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace ams::sm {
|
|||
|
||||
/* Ordinary SM API. */
|
||||
Result GetService(Service *out, ServiceName name);
|
||||
Result RegisterService(Handle *out, ServiceName name, size_t max_sessions, bool is_light);
|
||||
Result RegisterService(os::NativeHandle *out, ServiceName name, size_t max_sessions, bool is_light);
|
||||
Result UnregisterService(ServiceName name);
|
||||
|
||||
/* Atmosphere extensions. */
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
namespace ams::sm::mitm {
|
||||
|
||||
/* Mitm API. */
|
||||
Result InstallMitm(Handle *out_port, Handle *out_query, ServiceName name);
|
||||
Result InstallMitm(os::NativeHandle *out_port, os::NativeHandle *out_query, ServiceName name);
|
||||
Result UninstallMitm(ServiceName name);
|
||||
Result DeclareFutureMitm(ServiceName name);
|
||||
Result ClearFutureMitm(ServiceName name);
|
||||
|
|
|
@ -28,12 +28,12 @@ namespace ams::tipc {
|
|||
ObjectType_Session = 2,
|
||||
};
|
||||
private:
|
||||
svc::Handle m_handle;
|
||||
os::NativeHandle m_handle;
|
||||
ObjectType m_type;
|
||||
bool m_managed;
|
||||
tipc::ServiceObjectBase *m_object;
|
||||
private:
|
||||
void InitializeImpl(ObjectType type, svc::Handle handle, bool managed, tipc::ServiceObjectBase *object) {
|
||||
void InitializeImpl(ObjectType type, os::NativeHandle handle, bool managed, tipc::ServiceObjectBase *object) {
|
||||
/* Validate that the object isn't already constructed. */
|
||||
AMS_ASSERT(m_type == ObjectType_Invalid);
|
||||
|
||||
|
@ -44,16 +44,16 @@ namespace ams::tipc {
|
|||
m_object = object;
|
||||
}
|
||||
public:
|
||||
constexpr inline ObjectHolder() : m_handle(svc::InvalidHandle), m_type(ObjectType_Invalid), m_managed(false), m_object(nullptr) { /* ... */ }
|
||||
constexpr inline ObjectHolder() : m_handle(os::InvalidNativeHandle), m_type(ObjectType_Invalid), m_managed(false), m_object(nullptr) { /* ... */ }
|
||||
|
||||
void InitializeAsPort(svc::Handle handle) {
|
||||
void InitializeAsPort(os::NativeHandle handle) {
|
||||
/* NOTE: Nintendo sets ports as managed, but this will cause a nullptr-deref if one is ever closed. */
|
||||
/* This is theoretically a non-issue, as ports can't be closed, but we will set ours as unmanaged, */
|
||||
/* just in case. */
|
||||
this->InitializeImpl(ObjectType_Port, handle, false, nullptr);
|
||||
}
|
||||
|
||||
void InitializeAsSession(svc::Handle handle, bool managed, tipc::ServiceObjectBase *object) {
|
||||
void InitializeAsSession(os::NativeHandle handle, bool managed, tipc::ServiceObjectBase *object) {
|
||||
this->InitializeImpl(ObjectType_Session, handle, managed, object);
|
||||
}
|
||||
|
||||
|
@ -69,13 +69,13 @@ namespace ams::tipc {
|
|||
}
|
||||
|
||||
/* Reset all fields. */
|
||||
m_handle = svc::InvalidHandle;
|
||||
m_handle = os::InvalidNativeHandle;
|
||||
m_type = ObjectType_Invalid;
|
||||
m_managed = false;
|
||||
m_object = nullptr;
|
||||
}
|
||||
|
||||
constexpr svc::Handle GetHandle() const {
|
||||
constexpr os::NativeHandle GetHandle() const {
|
||||
return m_handle;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace ams::tipc {
|
|||
Entry *m_entries_end{};
|
||||
os::MultiWaitType *m_multi_wait{};
|
||||
private:
|
||||
Entry *FindEntry(svc::Handle handle) {
|
||||
Entry *FindEntry(os::NativeHandle handle) {
|
||||
for (Entry *cur = m_entries_start; cur != m_entries_end; ++cur) {
|
||||
if (GetReference(cur->object).GetHandle() == handle) {
|
||||
return cur;
|
||||
|
@ -76,7 +76,7 @@ namespace ams::tipc {
|
|||
std::scoped_lock lk(m_mutex);
|
||||
|
||||
/* Find an empty entry. */
|
||||
auto *entry = this->FindEntry(svc::InvalidHandle);
|
||||
auto *entry = this->FindEntry(os::InvalidNativeHandle);
|
||||
AMS_ABORT_UNLESS(entry != nullptr);
|
||||
|
||||
/* Set the entry's object. */
|
||||
|
@ -87,7 +87,7 @@ namespace ams::tipc {
|
|||
os::LinkMultiWaitHolder(m_multi_wait, std::addressof(entry->multi_wait_holder));
|
||||
}
|
||||
|
||||
void CloseObject(svc::Handle handle) {
|
||||
void CloseObject(os::NativeHandle handle) {
|
||||
/* Lock ourselves. */
|
||||
std::scoped_lock lk(m_mutex);
|
||||
|
||||
|
@ -103,14 +103,14 @@ namespace ams::tipc {
|
|||
GetReference(entry->object).Destroy();
|
||||
}
|
||||
|
||||
Result ReplyAndReceive(os::MultiWaitHolderType **out_holder, ObjectHolder *out_object, svc::Handle reply_target, os::MultiWaitType *multi_wait) {
|
||||
Result ReplyAndReceive(os::MultiWaitHolderType **out_holder, ObjectHolder *out_object, os::NativeHandle reply_target, os::MultiWaitType *multi_wait) {
|
||||
/* Declare signaled holder for processing ahead of time. */
|
||||
os::MultiWaitHolderType *signaled_holder;
|
||||
|
||||
/* Reply and receive until we get a newly signaled target. */
|
||||
Result result = os::SdkReplyAndReceive(out_holder, reply_target, multi_wait);
|
||||
for (signaled_holder = *out_holder; signaled_holder == nullptr; signaled_holder = *out_holder) {
|
||||
result = os::SdkReplyAndReceive(out_holder, svc::InvalidHandle, multi_wait);
|
||||
result = os::SdkReplyAndReceive(out_holder, os::InvalidNativeHandle, multi_wait);
|
||||
}
|
||||
|
||||
/* Find the entry matching the signaled holder. */
|
||||
|
@ -125,7 +125,7 @@ namespace ams::tipc {
|
|||
}
|
||||
}
|
||||
|
||||
Result Reply(svc::Handle reply_target) {
|
||||
Result Reply(os::NativeHandle reply_target) {
|
||||
/* Perform the reply. */
|
||||
s32 dummy;
|
||||
R_TRY_CATCH(svc::ReplyAndReceive(std::addressof(dummy), nullptr, 0, reply_target, 0)) {
|
||||
|
|
|
@ -141,7 +141,7 @@ namespace ams::tipc {
|
|||
m_object_manager = manager;
|
||||
}
|
||||
|
||||
void RegisterPort(s32 index, svc::Handle port_handle) {
|
||||
void RegisterPort(s32 index, os::NativeHandle port_handle) {
|
||||
/* Set our port number. */
|
||||
this->m_port_number = index;
|
||||
|
||||
|
@ -168,11 +168,11 @@ namespace ams::tipc {
|
|||
return m_object_manager->Reply(object.GetHandle());
|
||||
}
|
||||
|
||||
Result ReplyAndReceive(os::MultiWaitHolderType **out_holder, ObjectHolder *out_object, svc::Handle reply_target) {
|
||||
Result ReplyAndReceive(os::MultiWaitHolderType **out_holder, ObjectHolder *out_object, os::NativeHandle reply_target) {
|
||||
return m_object_manager->ReplyAndReceive(out_holder, out_object, reply_target, std::addressof(m_multi_wait));
|
||||
}
|
||||
|
||||
void AddSession(svc::Handle session_handle, tipc::ServiceObjectBase *service_object) {
|
||||
void AddSession(os::NativeHandle session_handle, tipc::ServiceObjectBase *service_object) {
|
||||
/* Create an object holder for the session. */
|
||||
tipc::ObjectHolder object;
|
||||
|
||||
|
@ -195,7 +195,7 @@ namespace ams::tipc {
|
|||
case MessageType_AddSession:
|
||||
{
|
||||
/* Get the handle from where it's packed into the message type. */
|
||||
const svc::Handle session_handle = static_cast<svc::Handle>(message_type >> BITSIZEOF(u32));
|
||||
const os::NativeHandle session_handle = static_cast<os::NativeHandle>(message_type >> BITSIZEOF(u32));
|
||||
|
||||
/* Allocate a service object for the port. */
|
||||
auto *service_object = m_server_manager->AllocateObject(static_cast<size_t>(message_data));
|
||||
|
@ -292,7 +292,7 @@ namespace ams::tipc {
|
|||
os::SendMessageQueue(std::addressof(m_message_queue), ConvertKeyToMessage(key));
|
||||
}
|
||||
|
||||
void TriggerAddSession(svc::Handle session_handle, size_t port_index) {
|
||||
void TriggerAddSession(os::NativeHandle session_handle, size_t port_index) {
|
||||
/* Acquire exclusive server manager access. */
|
||||
std::scoped_lock lk(m_server_manager->GetMutex());
|
||||
|
||||
|
@ -409,14 +409,14 @@ namespace ams::tipc {
|
|||
}
|
||||
|
||||
template<size_t Ix>
|
||||
void RegisterPort(svc::Handle port_handle) {
|
||||
void RegisterPort(os::NativeHandle port_handle) {
|
||||
this->GetPortManager<Ix>().RegisterPort(static_cast<s32>(Ix), port_handle);
|
||||
}
|
||||
|
||||
template<size_t Ix>
|
||||
void RegisterPort(sm::ServiceName service_name, size_t max_sessions) {
|
||||
/* Register service. */
|
||||
svc::Handle port_handle = svc::InvalidHandle;
|
||||
os::NativeHandle port_handle;
|
||||
R_ABORT_UNLESS(sm::RegisterService(std::addressof(port_handle), service_name, max_sessions, false));
|
||||
|
||||
/* Register the port handle. */
|
||||
|
@ -463,13 +463,13 @@ namespace ams::tipc {
|
|||
}(std::make_index_sequence<NumPorts>());
|
||||
}
|
||||
|
||||
Result AddSession(svc::Handle *out, tipc::ServiceObjectBase *object) {
|
||||
Result AddSession(os::NativeHandle *out, tipc::ServiceObjectBase *object) {
|
||||
/* Acquire exclusive access to ourselves. */
|
||||
std::scoped_lock lk(m_mutex);
|
||||
|
||||
/* Create a handle for the session. */
|
||||
svc::Handle session_handle;
|
||||
R_TRY(svc::CreateSession(std::addressof(session_handle), out, false, 0));
|
||||
R_TRY(svc::CreateSession(std::addressof(session_handle), static_cast<svc::Handle *>(out), false, 0));
|
||||
|
||||
/* Select the best port manager. */
|
||||
PortManagerBase *best_manager = nullptr;
|
||||
|
@ -514,7 +514,7 @@ namespace ams::tipc {
|
|||
std::memset(svc::ipc::GetMessageBuffer(), 0, svc::ipc::MessageBufferSize);
|
||||
|
||||
/* Process requests forever. */
|
||||
svc::Handle reply_target = svc::InvalidHandle;
|
||||
os::NativeHandle reply_target = os::InvalidNativeHandle;
|
||||
while (true) {
|
||||
/* Reply to our pending request, and receive a new one. */
|
||||
os::MultiWaitHolderType *signaled_holder = nullptr;
|
||||
|
@ -525,7 +525,7 @@ namespace ams::tipc {
|
|||
port_manager.CloseSession(signaled_object);
|
||||
|
||||
/* We have nothing to reply to. */
|
||||
reply_target = svc::InvalidHandle;
|
||||
reply_target = os::InvalidNativeHandle;
|
||||
continue;
|
||||
}
|
||||
} R_END_TRY_CATCH;
|
||||
|
@ -542,7 +542,7 @@ namespace ams::tipc {
|
|||
}
|
||||
|
||||
/* We have nothing to reply to. */
|
||||
reply_target = svc::InvalidHandle;
|
||||
reply_target = os::InvalidNativeHandle;
|
||||
}
|
||||
break;
|
||||
case ObjectHolder::ObjectType_Session:
|
||||
|
@ -557,7 +557,7 @@ namespace ams::tipc {
|
|||
port_manager.ProcessRegisterRetry(signaled_object);
|
||||
|
||||
/* We have nothing to reply to. */
|
||||
reply_target = svc::InvalidHandle;
|
||||
reply_target = os::InvalidNativeHandle;
|
||||
} else {
|
||||
/* We're done processing, so we should reply. */
|
||||
reply_target = signaled_object.GetHandle();
|
||||
|
@ -571,7 +571,7 @@ namespace ams::tipc {
|
|||
port_manager.CloseSessionIfNecessary(signaled_object, !tipc::ResultSessionClosed::Includes(process_result));
|
||||
|
||||
/* We have nothing to reply to. */
|
||||
reply_target = svc::InvalidHandle;
|
||||
reply_target = os::InvalidNativeHandle;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -582,12 +582,12 @@ namespace ams::tipc {
|
|||
port_manager.ProcessMessages();
|
||||
|
||||
/* We have nothing to reply to. */
|
||||
reply_target = svc::InvalidHandle;
|
||||
reply_target = os::InvalidNativeHandle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TriggerAddSession(svc::Handle session_handle, size_t port_index) {
|
||||
void TriggerAddSession(os::NativeHandle session_handle, size_t port_index) {
|
||||
/* Acquire exclusive access to ourselves. */
|
||||
std::scoped_lock lk(m_mutex);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue