NV services: Difference between revisions
Line 766: | Line 766: | ||
| 0x40284109 || In || 40 || [[#NVGPU_AS_IOCTL_INITIALIZE_EX]] | | 0x40284109 || In || 40 || [[#NVGPU_AS_IOCTL_INITIALIZE_EX]] | ||
|- | |- | ||
| 0xC038410A || Inout || 56 || NVGPU_AS_IOCTL_MAP_BUFFER_EX | | 0xC038410A || Inout || 56 || [[#NVGPU_AS_IOCTL_MAP_BUFFER_EX]] | ||
|- | |- | ||
| 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] | | 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] | ||
Line 779: | Line 779: | ||
=== NVGPU_AS_IOCTL_ALLOC_SPACE === | === NVGPU_AS_IOCTL_ALLOC_SPACE === | ||
Reserves pages in the device address space. | |||
struct { | struct { | ||
Line 793: | Line 793: | ||
=== NVGPU_AS_IOCTL_FREE_SPACE === | === NVGPU_AS_IOCTL_FREE_SPACE === | ||
Frees pages from the device address space. | |||
struct { | struct { | ||
Line 802: | Line 802: | ||
=== NVGPU_AS_IOCTL_MAP_BUFFER === | === NVGPU_AS_IOCTL_MAP_BUFFER === | ||
Maps a memory region in the device address space. Identical to Linux driver pretty much. | |||
On success, the mapped memory region is locked by having [[SVC#MemoryState]] bit34 set. | On success, the mapped memory region is locked by having [[SVC#MemoryState]] bit34 set. | ||
Line 818: | Line 818: | ||
=== NVGPU_AS_IOCTL_MODIFY === | === NVGPU_AS_IOCTL_MODIFY === | ||
Modifies a memory region in the device address space. | |||
Unaligned size will cause a [[#Panic]]. | Unaligned size will cause a [[#Panic]]. | ||
Line 825: | Line 825: | ||
struct { | struct { | ||
__in | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
__in | __in u32 kind; // -1 is default | ||
__in | __in u32 nvmap_handle; | ||
__inout u32 page_size; // 0 means don't care | __inout u32 page_size; // 0 means don't care | ||
__in | __in u64 buffer_offset; | ||
__in | __in u64 mapping_size; | ||
__inout u64 offset; | __inout u64 offset; | ||
}; | }; | ||
=== NVGPU_AS_IOCTL_UNMAP_BUFFER === | === NVGPU_AS_IOCTL_UNMAP_BUFFER === | ||
Unmaps a memory region from the device address space. | |||
struct { | struct { | ||
Line 852: | Line 852: | ||
=== NVGPU_AS_IOCTL_GET_VA_REGIONS === | === NVGPU_AS_IOCTL_GET_VA_REGIONS === | ||
Nintendo | Nintendo's custom implementation to get rid of pointer in struct. | ||
struct va_region { | struct va_region { | ||
Line 862: | Line 862: | ||
struct { | struct { | ||
u64 | u64 not_used; // (contained output user ptr on linux, ignored) | ||
__inout u32 bufsize; // forced to 2*sizeof(struct va_region) | __inout u32 bufsize; // forced to 2*sizeof(struct va_region) | ||
u32 | u32 pad; | ||
__out struct va_region regions[2]; | __out struct va_region regions[2]; | ||
}; | }; | ||
Line 879: | Line 879: | ||
__in u64 unk1; | __in u64 unk1; | ||
__in u64 unk2; | __in u64 unk2; | ||
}; | |||
=== NVGPU_AS_IOCTL_MAP_BUFFER_EX === | |||
Maps a memory region in the device address space with extra params. | |||
struct { | |||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | |||
__in u32 kind; // -1 is default | |||
__in u32 nvmap_handle; | |||
__inout u32 page_size; // 0 means don't care | |||
__in u64 buffer_offset; | |||
__in u64 mapping_size; | |||
__inout u64 offset; | |||
__in u64 unk0; | |||
__in u32 unk1; | |||
u32 pad; | |||
}; | }; | ||