mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-06-05 09:13:43 -04:00
kern: update for new device map semantics
This commit is contained in:
parent
947fdcf6f6
commit
5ee7d8a5ed
14 changed files with 115 additions and 58 deletions
|
@ -103,8 +103,8 @@
|
|||
HANDLER(0x56, Result, CreateDeviceAddressSpace, OUTPUT(::ams::svc::Handle, out_handle), INPUT(uint64_t, das_address), INPUT(uint64_t, das_size)) \
|
||||
HANDLER(0x57, Result, AttachDeviceAddressSpace, INPUT(::ams::svc::DeviceName, device_name), INPUT(::ams::svc::Handle, das_handle)) \
|
||||
HANDLER(0x58, Result, DetachDeviceAddressSpace, INPUT(::ams::svc::DeviceName, device_name), INPUT(::ams::svc::Handle, das_handle)) \
|
||||
HANDLER(0x59, Result, MapDeviceAddressSpaceByForce, INPUT(::ams::svc::Handle, das_handle), INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, process_address), INPUT(::ams::svc::Size, size), INPUT(uint64_t, device_address), INPUT(::ams::svc::MemoryPermission, device_perm)) \
|
||||
HANDLER(0x5A, Result, MapDeviceAddressSpaceAligned, INPUT(::ams::svc::Handle, das_handle), INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, process_address), INPUT(::ams::svc::Size, size), INPUT(uint64_t, device_address), INPUT(::ams::svc::MemoryPermission, device_perm)) \
|
||||
HANDLER(0x59, Result, MapDeviceAddressSpaceByForce, INPUT(::ams::svc::Handle, das_handle), INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, process_address), INPUT(::ams::svc::Size, size), INPUT(uint64_t, device_address), INPUT(uint32_t, option)) \
|
||||
HANDLER(0x5A, Result, MapDeviceAddressSpaceAligned, INPUT(::ams::svc::Handle, das_handle), INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, process_address), INPUT(::ams::svc::Size, size), INPUT(uint64_t, device_address), INPUT(uint32_t, option)) \
|
||||
HANDLER(0x5C, Result, UnmapDeviceAddressSpace, INPUT(::ams::svc::Handle, das_handle), INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, process_address), INPUT(::ams::svc::Size, size), INPUT(uint64_t, device_address)) \
|
||||
HANDLER(0x5D, Result, InvalidateProcessDataCache, INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, address), INPUT(uint64_t, size)) \
|
||||
HANDLER(0x5E, Result, StoreProcessDataCache, INPUT(::ams::svc::Handle, process_handle), INPUT(uint64_t, address), INPUT(uint64_t, size)) \
|
||||
|
|
|
@ -137,6 +137,27 @@ namespace ams::svc {
|
|||
MemoryRegionType_Count,
|
||||
};
|
||||
|
||||
enum MapDeviceAddressSpaceFlag : u32 {
|
||||
MapDeviceAddressSpaceFlag_None = (0 << 0),
|
||||
MapDeviceAddressSpaceFlag_NotIoRegister = (1 << 0),
|
||||
};
|
||||
|
||||
struct MapDeviceAddressSpaceOption {
|
||||
using Permission = util::BitPack32::Field<0, 16, MemoryPermission>;
|
||||
using Flags = util::BitPack32::Field<Permission::Next, 1, MapDeviceAddressSpaceFlag>;
|
||||
using Reserved = util::BitPack32::Field<Flags::Next, 15, u32>;
|
||||
|
||||
static constexpr ALWAYS_INLINE u32 Encode(MemoryPermission perm, u32 flags) {
|
||||
util::BitPack32 pack{};
|
||||
|
||||
pack.Set<Permission>(perm);
|
||||
pack.Set<Flags>(static_cast<svc::MapDeviceAddressSpaceFlag>(flags));
|
||||
pack.Set<Reserved>(0);
|
||||
|
||||
return pack.value;
|
||||
}
|
||||
};
|
||||
|
||||
/* Info Types. */
|
||||
enum InfoType : u32 {
|
||||
InfoType_CoreMask = 0,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue