NV services: Difference between revisions
No edit summary |
|||
Line 899: | Line 899: | ||
| 0xC0084105 || Inout || 8 || [[#NVGPU_AS_IOCTL_UNMAP_BUFFER]] | | 0xC0084105 || Inout || 8 || [[#NVGPU_AS_IOCTL_UNMAP_BUFFER]] | ||
|- | |- | ||
| 0xC0284106 || Inout || 40 || [[# | | 0xC0284106 || Inout || 40 || [[#NVGPU_AS_IOCTL_MAP_BUFFER_EX]] | ||
|- | |- | ||
| 0x40104107 || In || 16 || [[#NVGPU_AS_IOCTL_ALLOC_AS]] | | 0x40104107 || In || 16 || [[#NVGPU_AS_IOCTL_ALLOC_AS]] | ||
Line 907: | Line 907: | ||
| 0x40284109 || In || 40 || [[#NVGPU_AS_IOCTL_ALLOC_AS_EX]] | | 0x40284109 || In || 40 || [[#NVGPU_AS_IOCTL_ALLOC_AS_EX]] | ||
|- | |- | ||
| 0xC038410A || Inout || 56 || [[# | | 0xC038410A || Inout || 56 || [[#NVGPU_AS_IOCTL_MODIFY]] | ||
|- | |- | ||
| 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] | | 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] | ||
Line 916: | Line 916: | ||
struct { | struct { | ||
__in u32 | __in u32 channel_fd; | ||
}; | }; | ||
Line 926: | Line 926: | ||
__in u32 page_size; | __in u32 page_size; | ||
__in u32 flags; | __in u32 flags; | ||
u32 | u32 padding; | ||
union { | union { | ||
__out u64 offset; | __out u64 offset; | ||
Line 949: | Line 949: | ||
struct { | struct { | ||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
u32 | u32 reserved; | ||
__in u32 | __in u32 dmabuf_fd; // nvmap handle | ||
__inout u32 page_size; // 0 means don't care | __inout u32 page_size; // 0 means don't care | ||
union { | union { | ||
Line 958: | Line 958: | ||
}; | }; | ||
=== | === NVGPU_AS_IOCTL_MAP_BUFFER_EX === | ||
Maps a memory region in the device address space with extra params. | |||
Unaligned size will cause a [[#Panic]]. | Unaligned size will cause a [[#Panic]]. | ||
Line 968: | Line 968: | ||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
__in u32 kind; // -1 is default | __in u32 kind; // -1 is default | ||
__in u32 | __in u32 dmabuf_fd; // nvmap handle | ||
__inout u32 page_size; // 0 means don't care | __inout u32 page_size; // 0 means don't care | ||
__in u64 buffer_offset; | __in u64 buffer_offset; | ||
Line 988: | Line 988: | ||
__in u32 big_page_size; // depends on GPU's available_big_page_sizes; 0=default | __in u32 big_page_size; // depends on GPU's available_big_page_sizes; 0=default | ||
__in s32 as_fd; // ignored; passes 0 | __in s32 as_fd; // ignored; passes 0 | ||
__in | __in u64 reserved; // ignored; passes 0 | ||
}; | }; | ||
Line 998: | Line 997: | ||
u64 offset; | u64 offset; | ||
u32 page_size; | u32 page_size; | ||
u32 | u32 reserved; | ||
u64 pages; | u64 pages; | ||
}; | }; | ||
struct { | struct { | ||
u64 | u64 buf_addr; // (contained output user ptr on linux, ignored) | ||
__inout u32 | __inout u32 buf_size; // forced to 2*sizeof(struct va_region) | ||
u32 | u32 reserved; | ||
__out struct va_region regions[2]; | __out struct va_region regions[2]; | ||
}; | }; | ||
Line 1,022: | Line 1,021: | ||
}; | }; | ||
=== | === NVGPU_AS_IOCTL_MODIFY === | ||
Modifies a memory region in the device address space. | |||
struct { | struct { | ||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
__in u32 kind; // -1 is default | __in u32 kind; // -1 is default | ||
__in u32 | __in u32 dmabuf_fd; // nvmap handle | ||
__inout u32 page_size; // 0 means don't care | __inout u32 page_size; // 0 means don't care | ||
__in u64 buffer_offset; | __in u64 buffer_offset; | ||
Line 1,035: | Line 1,034: | ||
__in u64 unk0; | __in u64 unk0; | ||
__in u32 unk1; | __in u32 unk1; | ||
u32 | u32 reserved; | ||
}; | }; | ||
Line 1,041: | Line 1,040: | ||
Nintendo's custom implementation of address space remapping. | Nintendo's custom implementation of address space remapping. | ||
struct | struct remap_op { | ||
__in u16 flags; | __in u16 flags; // 0 or 4 | ||
__in u16 kind; | __in u16 kind; | ||
__in u32 | __in u32 mem_handle; | ||
__in u32 | __in u32 mem_offset_in_pages; | ||
__in u32 | __in u32 virt_offset_in_pages; // (alloc_space_offset >> 0x10) | ||
__in u32 | __in u32 num_pages; // alloc_space_pages | ||
}; | }; | ||
struct { | struct { | ||
__in struct | __in struct remap_op entries[]; | ||
}; | }; | ||