NV services: Difference between revisions
No edit summary |
|||
(25 intermediate revisions by 4 users not shown) | |||
Line 66: | Line 66: | ||
QueryEvent is only supported on (and implemented differently on): | QueryEvent is only supported on (and implemented differently on): | ||
* /dev/nvhost-gpu | * /dev/nvhost-gpu | ||
** 1: SmException_BptIntReport | ** EvtId=1: SmException_BptIntReport | ||
** 2: SmException_BptPauseReport | ** EvtId=2: SmException_BptPauseReport | ||
** 3: ErrorNotifierEvent | ** EvtId=3: ErrorNotifierEvent | ||
* /dev/nvhost-ctrl: Used to get events for | * /dev/nvhost-ctrl: Used to get events for syncpts. | ||
** | ** EvtId=(event_slot | ((syncpt_id & 0xFFF) << 16) | (is_valid << 28)): New format used by [[#NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT|NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT]]/[[#NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT_EX|NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT_EX]]. | ||
** | ** EvtId=(event_slot | (syncpt_id << 4)): Old format used by [[#NVHOST_IOCTL_CTRL_SYNCPT_WAITEX|NVHOST_IOCTL_CTRL_SYNCPT_WAITEX]]. | ||
* /dev/nvhost-ctrl-gpu | * /dev/nvhost-ctrl-gpu | ||
** 1: Returns error_event_handle. | ** EvtId=1: Returns error_event_handle. | ||
** 2: Returns unknown event. | ** EvtId=2: Returns unknown event. | ||
* /dev/nvhost-dbg-gpu | * /dev/nvhost-dbg-gpu | ||
** Ignores | ** Ignores EvtId. | ||
== MapSharedMem == | == MapSharedMem == | ||
Line 187: | Line 187: | ||
| 6 || [[#Reset|Reset]] | | 6 || [[#Reset|Reset]] | ||
|- | |- | ||
| 7 || [3.0.0+] | | 7 || [3.0.0+] [[#GetAruid2|GetAruid2]] | ||
|} | |} | ||
Line 210: | Line 210: | ||
== Reset == | == Reset == | ||
No input. Returns an output u32 '''Err'''. | No input. Returns an output u32 '''Err'''. | ||
== GetAruid2 == | |||
Unofficial name. | |||
No input. Returns an output u64 '''Aruid''', an output bool '''IsCoreDumpEnabled''' and an output u32 '''Err'''. | |||
= nvgem:cd = | = nvgem:cd = | ||
Line 224: | Line 229: | ||
| 2 || [1.0.0-8.1.0] [[#ReadNextBlock|ReadNextBlock]] | | 2 || [1.0.0-8.1.0] [[#ReadNextBlock|ReadNextBlock]] | ||
|- | |- | ||
| 3 || [8.0.0+] | | 3 || [8.0.0+] [[#GetNextBlockSize|GetNextBlockSize]] | ||
|- | |- | ||
| 4 || [8.0.0+] | | 4 || [8.0.0+] [[#ReadNextBlock2|ReadNextBlock2]] | ||
|} | |} | ||
Line 237: | Line 242: | ||
== ReadNextBlock == | == ReadNextBlock == | ||
Takes a type-0x6 output buffer. Returns an output u32 '''Err'''. | Takes a type-0x6 output buffer. Returns an output u32 '''Err'''. | ||
== GetNextBlockSize == | |||
Unofficial name. | |||
No input. Returns an output u64 '''Size''' and an output u32 '''Err'''. | |||
== ReadNextBlock2 == | |||
Unofficial name. | |||
Takes a type-0x6 output buffer and two input u64s '''Size''' and '''Offset'''. Returns an output u64 '''OutSize''' and an output u32 '''Err'''. | |||
= nvdbg:d = | = nvdbg:d = | ||
Line 275: | Line 290: | ||
| 0xC010001D || Inout || 16 || [[#NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT]] | | 0xC010001D || Inout || 16 || [[#NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT]] | ||
|- | |- | ||
| 0xC010001E || Inout || 16 || [[# | | 0xC010001E || Inout || 16 || [[#NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT_EX]] | ||
|- | |- | ||
| 0xC004001F || Inout || 4 || [[#NVHOST_IOCTL_CTRL_SYNCPT_ALLOC_EVENT]] | | 0xC004001F || Inout || 4 || [[#NVHOST_IOCTL_CTRL_SYNCPT_ALLOC_EVENT]] | ||
Line 283: | Line 298: | ||
| 0x40080021 || In || 8 || [[#NVHOST_IOCTL_CTRL_SYNCPT_FREE_EVENT_BATCH]] | | 0x40080021 || In || 8 || [[#NVHOST_IOCTL_CTRL_SYNCPT_FREE_EVENT_BATCH]] | ||
|- | |- | ||
| 0xC0040022 || Inout || 4 || [[# | | 0xC0040022 || Inout || 4 || [[#NVHOST_IOCTL_CTRL_SYNCPT_GET_SHIFT]] | ||
|} | |} | ||
Line 315: | Line 330: | ||
struct { | struct { | ||
__in u32 id; | __in u32 id; | ||
__in u32 lock; // | __in u32 lock; // 0=unlock, 1=lock | ||
}; | }; | ||
Line 361: | Line 376: | ||
struct { | struct { | ||
__in u32 | __in u32 event_slot; // 0x00 to 0x3F | ||
}; | }; | ||
=== NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT === | === NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT === | ||
Waits on a syncpt using events. If waiting fails, returns error code 0x05 (Timeout) and sets '''value''' to ( | Waits on a syncpt using events. If waiting fails, returns error code 0x05 (Timeout) and sets '''value''' to ('''event_slot''' | (('''syncpt_id''' & 0xFFF) << 16) | ('''is_valid''' << 28)). | ||
struct { | struct { | ||
Line 374: | Line 389: | ||
}; | }; | ||
=== | === NVHOST_IOCTL_CTRL_SYNCPT_WAIT_EVENT_EX === | ||
Waits on a syncpt using a specific event. If waiting fails, returns error code 0x05 (Timeout) and sets '''value''' to | Waits on a syncpt using a specific event. If waiting fails, returns error code 0x05 (Timeout) and sets '''value''' to ('''event_slot''' | ('''syncpt_id''' << 4)). | ||
struct { | struct { | ||
Line 381: | Line 396: | ||
__in u32 thresh; | __in u32 thresh; | ||
__in s32 timeout; | __in s32 timeout; | ||
__inout u32 value; // in= | __inout u32 value; // in=event_slot; out=syncpt_value | ||
}; | }; | ||
Line 388: | Line 403: | ||
struct { | struct { | ||
__in u32 | __in u32 event_slot; // 0x00 to 0x3F | ||
}; | }; | ||
Line 395: | Line 410: | ||
struct { | struct { | ||
__in u32 | __in u32 event_slot; // 0x00 to 0x3F | ||
}; | }; | ||
Line 402: | Line 417: | ||
struct { | struct { | ||
__in u64 | __in u64 event_slot_mask; // 64-bit bitfield where each bit represents one event | ||
}; | }; | ||
=== | === NVHOST_IOCTL_CTRL_SYNCPT_GET_SHIFT === | ||
Returns the syncpt shift value. | |||
struct { | struct { | ||
__out u32 | __out u32 syncpt_shift; // 0x00 (FIFO disabled) or 0x60 (FIFO enabled) | ||
}; | }; | ||
Line 594: | Line 609: | ||
| 0xC0040220 || Inout || 4 || NVDISP_CTRL_SUSPEND | | 0xC0040220 || Inout || 4 || NVDISP_CTRL_SUSPEND | ||
|- | |- | ||
| 0x80010224 || Out || 1 || [11.0.0+] | | 0x80010224 || Out || 1 || [11.0.0+] NVDISP_CTRL_IS_DISPLAY_OLED | ||
|} | |} | ||
Line 607: | Line 622: | ||
| 0xC4C80203 || In || 1224 || NVDISP_FLIP | | 0xC4C80203 || In || 1224 || NVDISP_FLIP | ||
|- | |- | ||
| 0x80380204 || Out || 56 || NVDISP_GET_MODE | | 0x80380204 || Out || 56 || [[#NVDISP_GET_MODE]] | ||
|- | |- | ||
| 0x40380205 || | | 0x40380205 || In || 56 || [[#NVDISP_SET_MODE]] | ||
|- | |- | ||
| 0x430C0206 || In || 780 || NVDISP_SET_LUT | | 0x430C0206 || In || 780 || NVDISP_SET_LUT | ||
Line 619: | Line 634: | ||
| 0x80040209 || Out || 4 || NVDISP_GET_HEAD_STATUS | | 0x80040209 || Out || 4 || NVDISP_GET_HEAD_STATUS | ||
|- | |- | ||
| 0xC038020A || Inout || 56 || NVDISP_VALIDATE_MODE | | 0xC038020A || Inout || 56 || [[#NVDISP_VALIDATE_MODE]] | ||
|- | |- | ||
| 0x4018020B || In || 24 || NVDISP_SET_CSC | | 0x4018020B || In || 24 || NVDISP_SET_CSC | ||
Line 637: | Line 652: | ||
| 0xEBFC0215 || Inout || 11260 || NVDISP_GET_MODE_DB | | 0xEBFC0215 || Inout || 11260 || NVDISP_GET_MODE_DB | ||
|- | |- | ||
| 0xC003021A || Inout || 3 || NVDISP_PANEL_GET_VENDOR_ID | | 0xC003021A || Inout || 3 || [[#NVDISP_PANEL_GET_VENDOR_ID]] | ||
|- | |- | ||
| 0x803C021B || Out || 60 || NVDISP_GET_MODE2 | | 0x803C021B || Out || 60 || NVDISP_GET_MODE2 | ||
Line 651: | Line 666: | ||
| 0x80080221 || Out || 8 || [10.0.0+] [[#NVDISP_GET_BACKLIGHT_RANGE]] | | 0x80080221 || Out || 8 || [10.0.0+] [[#NVDISP_GET_BACKLIGHT_RANGE]] | ||
|- | |- | ||
| 0x40040222 || In || 4 || [10.0.0+] [[# | | 0x40040222 || In || 4 || [10.0.0+] [[#NVDISP_SET_BACKLIGHT_RANGE_MAX]] | ||
|- | |- | ||
| 0x40040223 || In || 4 || [11.0.0+] | | 0x40040223 || In || 4 || [11.0.0+] [[#NVDISP_SET_BACKLIGHT_RANGE_MIN]] | ||
|- | |- | ||
| 0x401C0225 || In || 28 || [11.0.0+] [[#NVDISP_SEND_PANEL_MSG]] | | 0x401C0225 || In || 28 || [11.0.0+] [[#NVDISP_SEND_PANEL_MSG]] | ||
Line 659: | Line 674: | ||
| 0xC01C0226 || Inout || 28 || [11.0.0+] [[#NVDISP_GET_PANEL_DATA]] | | 0xC01C0226 || Inout || 28 || [11.0.0+] [[#NVDISP_GET_PANEL_DATA]] | ||
|} | |} | ||
=== NVDISP_GET_MODE === | |||
Identical to Linux driver. | |||
struct { | |||
__out u32 hActive; | |||
__out u32 vActive; | |||
__out u32 hSyncWidth; | |||
__out u32 vSyncWidth; | |||
__out u32 hFrontPorch; | |||
__out u32 vFrontPorch; | |||
__out u32 hBackPorch; | |||
__out u32 vBackPorch; | |||
__out u32 hRefToSync; | |||
__out u32 vRefToSync; | |||
__out u32 pclkKHz; | |||
__out u32 bitsPerPixel; // Always 0 | |||
__out u32 vmode; // Always 0 | |||
}; | |||
=== NVDISP_SET_MODE === | |||
Identical to Linux driver. | |||
struct { | |||
__in u32 hActive; | |||
__in u32 vActive; | |||
__in u32 hSyncWidth; | |||
__in u32 vSyncWidth; | |||
__in u32 hFrontPorch; | |||
__in u32 vFrontPorch; | |||
__in u32 hBackPorch; | |||
__in u32 vBackPorch; | |||
__in u32 hRefToSync; | |||
__in u32 vRefToSync; | |||
__in u32 pclkKHz; | |||
__in u32 bitsPerPixel; | |||
__in u32 vmode; | |||
}; | |||
=== NVDISP_VALIDATE_MODE === | |||
Identical to Linux driver. | |||
struct { | |||
__inout u32 hActive; | |||
__inout u32 vActive; | |||
__inout u32 hSyncWidth; | |||
__inout u32 vSyncWidth; | |||
__inout u32 hFrontPorch; | |||
__inout u32 vFrontPorch; | |||
__inout u32 hBackPorch; | |||
__inout u32 vBackPorch; | |||
__inout u32 hRefToSync; | |||
__inout u32 vRefToSync; | |||
__inout u32 pclkKHz; | |||
__inout u32 bitsPerPixel; | |||
__inout u32 vmode; | |||
}; | |||
=== NVDISP_PANEL_GET_VENDOR_ID === | |||
Returns display panel's informations. | |||
struct { | |||
__out u8 vendor; //0x10 - JDI, 0x20 - InnoLux, 0x30 - AUO, 0x40 - Sharp, 0x50 - Samsung | |||
__out u8 model; | |||
__out u8 board; //0xF - 6.2", 0x10 - 5.5", 0x20 - 7.0". JDI panels have nonstandard values | |||
}; | |||
=== NVDISP_GET_BACKLIGHT_RANGE === | === NVDISP_GET_BACKLIGHT_RANGE === | ||
Line 668: | Line 750: | ||
}; | }; | ||
=== | === NVDISP_SET_BACKLIGHT_RANGE_MAX === | ||
Sets the value for the intensity of the display's backlight. | Sets the maximum value for the intensity of the display's backlight. | ||
struct { | struct { | ||
__in u32 | __in u32 max; | ||
}; | |||
=== NVDISP_SET_BACKLIGHT_RANGE_MIN === | |||
Sets the minimum value for the intensity of the display's backlight. | |||
struct { | |||
__in u32 min; | |||
}; | }; | ||
Line 900: | Line 989: | ||
struct { | struct { | ||
__in u32 fence_id; | __in u32 fence_id; | ||
__in u32 | __in u32 fence_value; | ||
__in u32 swap_interval; | __in u32 swap_interval; | ||
}; | }; | ||
Line 1,002: | Line 1,091: | ||
| 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_MAP_BUFFER_EX2]] | ||
|- | |- | ||
| 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] | | 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] | ||
Line 1,038: | Line 1,127: | ||
=== NVGPU_AS_IOCTL_MAP_BUFFER === | === NVGPU_AS_IOCTL_MAP_BUFFER === | ||
Maps a memory region in the device address space. | Maps a memory region in the device address space. | ||
Unaligned size will cause a [[#Panic]]. | |||
On success, the mapped memory region is granted the [[SVC#MemoryAttribute|DeviceShared]] attribute. | On success, the mapped memory region is granted the [[SVC#MemoryAttribute|DeviceShared]] attribute. | ||
Line 1,044: | Line 1,135: | ||
struct { | struct { | ||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
u32 | u32 reserved0; | ||
__in u32 | __in u32 mem_id; // nvmap handle | ||
u32 reserved1; | |||
union { | union { | ||
__out u64 offset; | __out u64 offset; | ||
Line 1,062: | Line 1,153: | ||
struct { | struct { | ||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
__inout u32 kind; // -1 is default | |||
__in u32 | __in u32 mem_id; // nvmap handle | ||
u32 reserved; | |||
__in u64 buffer_offset; | __in u64 buffer_offset; | ||
__in u64 mapping_size; | __in u64 mapping_size; | ||
union { | |||
__out u64 offset; | |||
__in u64 align; | |||
}; | |||
}; | }; | ||
Line 1,088: | Line 1,182: | ||
=== NVGPU_AS_IOCTL_GET_VA_REGIONS === | === NVGPU_AS_IOCTL_GET_VA_REGIONS === | ||
Nintendo's custom implementation to get rid of pointer in struct. | Nintendo's custom implementation to get rid of pointer in struct. | ||
Uses [[#Ioctl3|Ioctl3]]. | |||
struct va_region { | struct va_region { | ||
Line 1,116: | Line 1,212: | ||
}; | }; | ||
=== | === NVGPU_AS_IOCTL_MAP_BUFFER_EX2 === | ||
Maps a memory region in the device address space with extra params. | |||
Unaligned size will cause a [[#Panic]]. | |||
On success, the mapped memory region is granted the [[SVC#MemoryAttribute|DeviceShared]] attribute. | |||
struct { | |||
__in u32 flags; // bit0: fixed_offset, bit2: cacheable | __in u32 flags; // bit0: fixed_offset, bit2: cacheable | ||
__inout u32 kind; // -1 is default | |||
__in u32 | __in u32 mem_id; // nvmap handle | ||
u32 reserved0; | |||
__in u64 buffer_offset; | __in u64 buffer_offset; | ||
__in u64 mapping_size; | __in u64 mapping_size; | ||
union { | |||
__in u64 | __out u64 offset; | ||
__in u32 | __in u64 align; | ||
u32 | }; | ||
__in u64 vma_addr; | |||
__in u32 pages; | |||
u32 reserved1; | |||
}; | }; | ||
Line 1,136: | Line 1,239: | ||
struct remap_op { | struct remap_op { | ||
__in u16 flags; | __in u16 flags; // bit2: cacheable | ||
__in u16 kind; | __in u16 kind; | ||
__in u32 mem_handle; | __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 num_pages; | __in u32 num_pages; // alloc_space_pages | ||
}; | }; | ||
Line 1,206: | Line 1,309: | ||
| 0xC018441A || Inout || 24 || NVGPU_DBG_GPU_IOCTL_LAZY_ALLOC_RESERVED_PA | | 0xC018441A || Inout || 24 || NVGPU_DBG_GPU_IOCTL_LAZY_ALLOC_RESERVED_PA | ||
|- | |- | ||
| 0xC020441B || Inout || 32 || [11.0.0+] | | 0xC020441B || Inout || 32 || [11.0.0+] NVGPU_DBG_GPU_IOCTL_LAZY_ALLOC_RESERVED_PA_EX | ||
|- | |- | ||
| 0xC084441C || Inout || 132 || [11.0.0+] | | 0xC084441C || Inout || 132 || [11.0.0+] NVGPU_DBG_GPU_IOCTL_GET_SETTINGS | ||
|- | |- | ||
| 0xC018441D || Inout || 24 || [11.0.0+] | | 0xC018441D || Inout || 24 || [11.0.0+] NVGPU_DBG_GPU_IOCTL_GET_SERIAL_NUMBER | ||
|- | |- | ||
| 0xC020441E || Inout || 32 || [11.0.0+] | | 0xC020441E || Inout || 32 || [11.0.0+] NVGPU_DBG_GPU_IOCTL_GET_GPU_VA_RANGE_PAGES | ||
|} | |} | ||
Line 1,575: | Line 1,678: | ||
|- | |- | ||
| /dev/nvhost-display || Display | | /dev/nvhost-display || Display | ||
|- | |||
| /dev/nvhost-tsec || TSEC | |||
|} | |} | ||
Line 1,685: | Line 1,790: | ||
u32 syncpt_id; | u32 syncpt_id; | ||
u32 syncpt_incrs; | u32 syncpt_incrs; | ||
u32 reserved[3]; | |||
u32 | |||
}; | }; | ||
Line 1,701: | Line 1,802: | ||
__in struct reloc_shift reloc_shifts[]; // depends on num_relocs | __in struct reloc_shift reloc_shifts[]; // depends on num_relocs | ||
__in struct syncpt_incr syncpt_incrs[]; // depends on num_syncpt_incrs | __in struct syncpt_incr syncpt_incrs[]; // depends on num_syncpt_incrs | ||
__out | __out u32 fence_thresholds[]; // depends on num_fences | ||
}; | }; | ||
Line 1,814: | Line 1,915: | ||
struct { | struct { | ||
__in u32 num_entries; | __in u32 num_entries; | ||
__in u32 flags; | __in u32 flags; // bit0: vpr_enabled | ||
}; | }; | ||
Line 1,841: | Line 1,942: | ||
struct fence { | struct fence { | ||
u32 id; | u32 id; | ||
u32 | u32 value; | ||
}; | }; | ||
struct gpfifo_entry { | struct gpfifo_entry { | ||
u32 entry0; // gpu_iova_lo | |||
u32 entry1; // gpu_iova_hi | (allow_flush << 8) | (is_push_buf << 9) | (size << 10) | (sync << 31) | |||
}; | }; | ||
Line 1,851: | Line 1,953: | ||
__in u64 gpfifo; // (ignored) pointer to gpfifo fence structs | __in u64 gpfifo; // (ignored) pointer to gpfifo fence structs | ||
__in u32 num_entries; // number of fence objects being submitted | __in u32 num_entries; // number of fence objects being submitted | ||
__in | union { | ||
__out u32 detailed_error; | |||
__in u32 flags; // bit0: fence_wait, bit1: fence_get, bit2: hw_format, bit3: sync_fence, bit4: suppress_wfi, bit5: skip_buffer_refcounting | |||
}; | |||
__inout struct fence fence_out; // returned new fence object for others to wait on | __inout struct fence fence_out; // returned new fence object for others to wait on | ||
__in struct gpfifo_entry entries[]; // depends on num_entries | __in struct gpfifo_entry entries[]; // depends on num_entries | ||
Line 1,934: | Line 2,039: | ||
struct { | struct { | ||
__out u32 | __out u32 type; // Error type (0=no_error, 1=mmu_error, 2=gr_error, 3=pbdma_error, 4=timeout) | ||
}; | __out u32 info[31]; // Infor depends on the error type | ||
}; | |||
==== GR Error Code Format ==== | |||
When <code>type == 2</code> (GR Error), the returned data is formatted as follows: | |||
struct { | |||
__out u32 type; // 2=gr_error | |||
__out u32 intr_value; // Interrupt bits | |||
__out u32 addr; // Register address (in bytes) | |||
__out u32 data_hi; // Data high 32 bits | |||
__out u32 data_lo; // Data low 32 bits | |||
__out u32 class_num; // GPU class number (e.g., 0xb197 for MAXWELL_B) | |||
}; | |||
{| class="wikitable" | |||
|+ GR Error Interrupt Bits | |||
|- | |||
! Bit(s) | |||
! Description | |||
|- | |||
| 0 | |||
| GR_INTR_NOTIFY | |||
|- | |||
| 1 | |||
| GR_INTR_SEMAPHORE | |||
|- | |||
| 2 | |||
| unknown | |||
|- | |||
| 3 | |||
| unknown | |||
|- | |||
| 4 | |||
| GR_INTR_ILLEGAL_METHOD | |||
|- | |||
| 5 | |||
| GR_INTR_ILLEGAL_CLASS | |||
|- | |||
| 6 | |||
| GR_INTR_ILLEGAL_NOTIFY | |||
|- | |||
| 7 | |||
| unknown | |||
|- | |||
| 8 | |||
| GR_INTR_FIRMWARE_METHOD | |||
|- | |||
| 9–18 | |||
| unknown | |||
|- | |||
| 19 | |||
| GR_INTR_FECS_ERROR | |||
|- | |||
| 20 | |||
| GR_INTR_CLASS_ERROR | |||
|- | |||
| 21 | |||
| GR_INTR_EXCEPTION | |||
|- | |||
| 22–31 | |||
| unknown | |||
|} | |||
=== NVGPU_IOCTL_CHANNEL_GET_ERROR_NOTIFICATION === | === NVGPU_IOCTL_CHANNEL_GET_ERROR_NOTIFICATION === | ||
Line 1,952: | Line 2,118: | ||
struct fence { | struct fence { | ||
u32 id; | u32 id; | ||
u32 | u32 value; | ||
}; | }; | ||
Line 1,958: | Line 2,124: | ||
__in u32 num_entries; | __in u32 num_entries; | ||
__in u32 num_jobs; | __in u32 num_jobs; | ||
__in u32 flags; | __in u32 flags; // bit0: vpr_enabled | ||
__out struct fence fence_out; // returned new fence object for others to wait on | __out struct fence fence_out; // returned new fence object for others to wait on | ||
__in u32 reserved[3]; // ignored | __in u32 reserved[3]; // ignored | ||
Line 2,058: | Line 2,224: | ||
| 13 | | 13 | ||
| | | | ||
| | | Can use the GPU virtual address range 0xC0000 to 0x580000 instead of 0x0 to 0xC0000. | ||
|- | |- | ||
| 14 | | 14 | ||
Line 2,066: | Line 2,232: | ||
| 15 | | 15 | ||
| | | | ||
| | | Can use the virtual address ranges 0x0 to 0x100000000 (GPU) and 0x0 to 0xE0000000 (non-GPU) instead of 0x100000000 to 0x11FA50000 (GPU) and 0xE0000000 to 0xFFFE0000 (non-GPU). | ||
|} | |} | ||
Line 2,221: | Line 2,387: | ||
When the gpfifo data in the gpu_va buffers specified by the submitted gpfifo entries is invalid(?), eventually the user-process will be force-terminated after using the submit-gpfifo ioctl. It's unknown how exactly this is done. | When the gpfifo data in the gpu_va buffers specified by the submitted gpfifo entries is invalid(?), eventually the user-process will be force-terminated after using the submit-gpfifo ioctl. It's unknown how exactly this is done. | ||
GPU rendering (GPFIFO) is only used by applets/Applications. All sysmodules doing any gfx-display uses software rendering. During system-boot, GPU GPFIFO is not used until the applets are launched. | |||
[[Category:Services]] | [[Category:Services]] |