Difference between revisions of "NV services"
Jump to navigation
Jump to search
(cleaning up, removing speculation) |
|||
Line 9: | Line 9: | ||
| 0 || Open | | 0 || Open | ||
|- | |- | ||
− | | 1 || | + | | 1 || Ioctl |
|- | |- | ||
| 2 || Close | | 2 || Close | ||
Line 28: | Line 28: | ||
|} | |} | ||
− | == | + | == Ioctls == |
− | + | The ioctl number is generated with the following primitive (see Linux kernel): | |
− | |||
#define _IOC(inout, group, num, len) \ | #define _IOC(inout, group, num, len) \ | ||
(inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) | (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) | ||
− | The following table contains | + | The following table contains known ioctls. |
− | + | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
− | ! Value || Description || Notes | + | ! Device || Value || Description || Notes |
|- | |- | ||
− | | 0xC0??0001 || NVHOST32_IOCTL_CHANNEL_SUBMIT || ?? == size is unknown | + | | /dev/nvhost-* || 0xC0??0001 || NVHOST32_IOCTL_CHANNEL_SUBMIT || ?? == size is unknown |
|- | |- | ||
− | | 0xC0080002 || NVHOST_IOCTL_CHANNEL_GET_SYNCPOINT || | + | | /dev/nvhost-* || 0xC0080002 || NVHOST_IOCTL_CHANNEL_GET_SYNCPOINT || |
|- | |- | ||
− | | 0xC0080003 || NVHOST_IOCTL_CHANNEL_GET_WAITBASE || | + | | /dev/nvhost-* || 0xC0080003 || NVHOST_IOCTL_CHANNEL_GET_WAITBASE || |
|- | |- | ||
− | | 0xC0080004 || NVHOST_IOCTL_CHANNEL_SET_TIMEOUT_EX || | + | | /dev/nvhost-* || 0xC0080004 || NVHOST_IOCTL_CHANNEL_SET_TIMEOUT_EX || |
|- | |- | ||
− | | 0xC01C0009 || NVHOST_IOCTL_CHANNEL_SUBMIT(?) || | + | | /dev/nvhost-* || 0xC01C0009 || NVHOST_IOCTL_CHANNEL_SUBMIT(?) || |
|- | |- | ||
− | | 0xC01C000A || NVHOST_IOCTL_CHANNEL_MODULE_REGRDWR(?) || | + | | /dev/nvhost-* || 0xC01C000A || NVHOST_IOCTL_CHANNEL_MODULE_REGRDWR(?) || |
|- | |- | ||
− | | 0xC0080014 || NVHOST_IOCTL_CTRL_SYNCPT_READ || | + | | /dev/nvhost-* || 0xC0080014 || NVHOST_IOCTL_CTRL_SYNCPT_READ || |
|- | |- | ||
− | | 0x40040015 || NVHOST_IOCTL_CTRL_SYNCPT_INCR || | + | | /dev/nvhost-* || 0x40040015 || NVHOST_IOCTL_CTRL_SYNCPT_INCR || |
|- | |- | ||
− | | 0xC00C0016 || NVHOST_IOCTL_CTRL_SYNCPT_WAIT || | + | | /dev/nvhost-* || 0xC00C0016 || NVHOST_IOCTL_CTRL_SYNCPT_WAIT || |
|- | |- | ||
− | | 0x40080017 || NVHOST_IOCTL_CTRL_MODULE_MUTEX || | + | | /dev/nvhost-* || 0x40080017 || NVHOST_IOCTL_CTRL_MODULE_MUTEX || |
|- | |- | ||
− | | 0xC0180018 || NVHOST32_IOCTL_CTRL_MODULE_REGRDWR || | + | | /dev/nvhost-* || 0xC0180018 || NVHOST32_IOCTL_CTRL_MODULE_REGRDWR || |
|- | |- | ||
− | | 0xC0100019 || NVHOST_IOCTL_CTRL_SYNCPT_WAITEX || | + | | /dev/nvhost-* || 0xC0100019 || NVHOST_IOCTL_CTRL_SYNCPT_WAITEX || |
|- | |- | ||
− | | 0xC008001A || NVHOST_IOCTL_CTRL_SYNCPT_READ_MAX || | + | | /dev/nvhost-* || 0xC008001A || NVHOST_IOCTL_CTRL_SYNCPT_READ_MAX || |
|- | |- | ||
− | | 0xC004001C || NVHOST_IOCTL_CTRL_GET_VERSION(?) || | + | | /dev/nvhost-* || 0xC004001C || NVHOST_IOCTL_CTRL_GET_VERSION(?) || |
|- | |- | ||
− | | 0xC010001D || | + | | /dev/nvhost-* || 0xC010001D || || NvRmSyncWaitEvent (wait on event?) |
|- | |- | ||
− | | 0xC010001E || | + | | /dev/nvhost-* || 0xC010001E || || NvRmSyncWaitEvent (wait on event?) |
|- | |- | ||
− | | 0xC004001F || | + | | /dev/nvhost-* || 0xC004001F || || NvRmSyncWaitEvent (signal event?) |
|- | |- | ||
− | | 0xC0040020 || | + | | /dev/nvhost-* || 0xC0040020 || || NvRmSyncWaitEvent (signal event?) |
|- | |- | ||
− | | 0x40080021 || | + | | /dev/nvhost-* || 0x40080021 || || Returns busy? |
|- | |- | ||
− | | | + | | /dev/nvmap || 0xC0080101 || NVMAP_IOC_CREATE || |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | /dev/nvmap || 0xC0080103 || NVMAP_IOC_FROM_ID || |
|- | |- | ||
− | | | + | | /dev/nvmap || 0xC0200104 || NVMAP_IOC_ALLOC || |
|- | |- | ||
− | | | + | | /dev/nvmap || 0xC0180105 || NVMAP_IOC_FREE || |
|- | |- | ||
− | | | + | | /dev/nvmap || 0xC00C0109 || NVMAP_IOC_PARAM || |
|- | |- | ||
− | | | + | | /dev/nvmap || 0xC008010E || NVMAP_IOC_GET_ID || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0x40044101 || NVGPU_AS_IOCTL_BIND_CHANNEL || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0184102 || NVGPU32_AS_IOCTL_ALLOC_SPACE || |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0104103 || NVGPU_AS_IOCTL_FREE_SPACE || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0184104 || NVGPU_AS_IOCTL_MAP_BUFFER || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0084105 || NVGPU_AS_IOCTL_UNMAP_BUFFER || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0284106 || NVGPU_AS_IOCTL_ALLOC_SPACE || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0x40104107 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0404108 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0x40284109 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-as-gpu || 0xC0144114 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-dbg-gpu || 0xC0??4402 || NVGPU_DBG_GPU_IOCTL_REG_OPS || ?? == size is unknown |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x80044701 || NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x80284702 || NVGPU_GPU_IOCTL_ZCULL_GET_INFO || |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x402C4703 || NVGPU_GPU_IOCTL_ZBC_SET_TABLE || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0xC0344704 || NVGPU_GPU_IOCTL_ZBC_QUERY_TABLE || |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0xC0B04705 || NVGPU_GPU_IOCTL_GET_CHARACTERISTICS || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0xC0184706 || NVGPU_AS_IOCTL_ALLOC_SPACE || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x40084707 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x4008470E || || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x4010470F || || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0xC0084710 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x80084711 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0x80084714 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0xC008471B || || |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | /dev/nvhost-ctrl-gpu || 0xC010471C || || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x40044801 || NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x40044803 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT(?) || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x40084805 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT_EX(?) || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC0044807 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC0184808 || NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC0104809 || NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x4008480A || NVGPU_IOCTL_CHANNEL_FREE_OBJ_CTX || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC010480B || NVGPU_IOCTL_CHANNEL_ZCULL_BIND || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC018480C || NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x4004480D || NVGPU_IOCTL_CHANNEL_OPEN || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x0000480E || NVGPU_IOCTL_CHANNEL_ENABLE || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x0000480F || NVGPU_IOCTL_CHANNEL_DISABLE || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x00004810 || NVGPU_IOCTL_CHANNEL_PREEMPT || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x00004811 || NVGPU_IOCTL_CHANNEL_FORCE_RESET || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x40084812 || NVGPU_IOCTL_CHANNEL_EVENTS_CTRL || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC0104813 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x80804816 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC0104817 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0x40204818 || || |
|- | |- | ||
− | | | + | | /dev/nvhost-* || 0xC0184819 || || |
|- | |- | ||
+ | | /dev/nvhost-* || 0xC020481A || || | ||
|} | |} |
Revision as of 21:12, 15 April 2017
The Switch makes use of a customized NVIDIA driver that is exposed through multiple services. Communication with these services goes through IPC, as usual.
nvdrv:a
Cmd | Name |
---|---|
0 | Open |
1 | Ioctl |
2 | Close |
3 | Initialize |
4 | QueryEvent |
5 | MapSharedMem |
6 | |
7 | |
8 | Audio render related init? |
9 | ? |
Ioctls
The ioctl number is generated with the following primitive (see Linux kernel):
#define _IOC(inout, group, num, len) \ (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num))
The following table contains known ioctls.
Device | Value | Description | Notes |
---|---|---|---|
/dev/nvhost-* | 0xC0??0001 | NVHOST32_IOCTL_CHANNEL_SUBMIT | ?? == size is unknown |
/dev/nvhost-* | 0xC0080002 | NVHOST_IOCTL_CHANNEL_GET_SYNCPOINT | |
/dev/nvhost-* | 0xC0080003 | NVHOST_IOCTL_CHANNEL_GET_WAITBASE | |
/dev/nvhost-* | 0xC0080004 | NVHOST_IOCTL_CHANNEL_SET_TIMEOUT_EX | |
/dev/nvhost-* | 0xC01C0009 | NVHOST_IOCTL_CHANNEL_SUBMIT(?) | |
/dev/nvhost-* | 0xC01C000A | NVHOST_IOCTL_CHANNEL_MODULE_REGRDWR(?) | |
/dev/nvhost-* | 0xC0080014 | NVHOST_IOCTL_CTRL_SYNCPT_READ | |
/dev/nvhost-* | 0x40040015 | NVHOST_IOCTL_CTRL_SYNCPT_INCR | |
/dev/nvhost-* | 0xC00C0016 | NVHOST_IOCTL_CTRL_SYNCPT_WAIT | |
/dev/nvhost-* | 0x40080017 | NVHOST_IOCTL_CTRL_MODULE_MUTEX | |
/dev/nvhost-* | 0xC0180018 | NVHOST32_IOCTL_CTRL_MODULE_REGRDWR | |
/dev/nvhost-* | 0xC0100019 | NVHOST_IOCTL_CTRL_SYNCPT_WAITEX | |
/dev/nvhost-* | 0xC008001A | NVHOST_IOCTL_CTRL_SYNCPT_READ_MAX | |
/dev/nvhost-* | 0xC004001C | NVHOST_IOCTL_CTRL_GET_VERSION(?) | |
/dev/nvhost-* | 0xC010001D | NvRmSyncWaitEvent (wait on event?) | |
/dev/nvhost-* | 0xC010001E | NvRmSyncWaitEvent (wait on event?) | |
/dev/nvhost-* | 0xC004001F | NvRmSyncWaitEvent (signal event?) | |
/dev/nvhost-* | 0xC0040020 | NvRmSyncWaitEvent (signal event?) | |
/dev/nvhost-* | 0x40080021 | Returns busy? | |
/dev/nvmap | 0xC0080101 | NVMAP_IOC_CREATE | |
/dev/nvmap | 0xC0080103 | NVMAP_IOC_FROM_ID | |
/dev/nvmap | 0xC0200104 | NVMAP_IOC_ALLOC | |
/dev/nvmap | 0xC0180105 | NVMAP_IOC_FREE | |
/dev/nvmap | 0xC00C0109 | NVMAP_IOC_PARAM | |
/dev/nvmap | 0xC008010E | NVMAP_IOC_GET_ID | |
/dev/nvhost-as-gpu | 0x40044101 | NVGPU_AS_IOCTL_BIND_CHANNEL | |
/dev/nvhost-as-gpu | 0xC0184102 | NVGPU32_AS_IOCTL_ALLOC_SPACE | |
/dev/nvhost-as-gpu | 0xC0104103 | NVGPU_AS_IOCTL_FREE_SPACE | |
/dev/nvhost-as-gpu | 0xC0184104 | NVGPU_AS_IOCTL_MAP_BUFFER | |
/dev/nvhost-as-gpu | 0xC0084105 | NVGPU_AS_IOCTL_UNMAP_BUFFER | |
/dev/nvhost-as-gpu | 0xC0284106 | NVGPU_AS_IOCTL_ALLOC_SPACE | |
/dev/nvhost-as-gpu | 0x40104107 | ||
/dev/nvhost-as-gpu | 0xC0404108 | ||
/dev/nvhost-as-gpu | 0x40284109 | ||
/dev/nvhost-as-gpu | 0xC0144114 | ||
/dev/nvhost-dbg-gpu | 0xC0??4402 | NVGPU_DBG_GPU_IOCTL_REG_OPS | ?? == size is unknown |
/dev/nvhost-ctrl-gpu | 0x80044701 | NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE | |
/dev/nvhost-ctrl-gpu | 0x80284702 | NVGPU_GPU_IOCTL_ZCULL_GET_INFO | |
/dev/nvhost-ctrl-gpu | 0x402C4703 | NVGPU_GPU_IOCTL_ZBC_SET_TABLE | |
/dev/nvhost-ctrl-gpu | 0xC0344704 | NVGPU_GPU_IOCTL_ZBC_QUERY_TABLE | |
/dev/nvhost-ctrl-gpu | 0xC0B04705 | NVGPU_GPU_IOCTL_GET_CHARACTERISTICS | |
/dev/nvhost-ctrl-gpu | 0xC0184706 | NVGPU_AS_IOCTL_ALLOC_SPACE | |
/dev/nvhost-ctrl-gpu | 0x40084707 | ||
/dev/nvhost-ctrl-gpu | 0x4008470E | ||
/dev/nvhost-ctrl-gpu | 0x4010470F | ||
/dev/nvhost-ctrl-gpu | 0xC0084710 | ||
/dev/nvhost-ctrl-gpu | 0x80084711 | ||
/dev/nvhost-ctrl-gpu | 0x80084714 | ||
/dev/nvhost-ctrl-gpu | 0xC008471B | ||
/dev/nvhost-ctrl-gpu | 0xC010471C | ||
/dev/nvhost-* | 0x40044801 | NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD | |
/dev/nvhost-* | 0x40044803 | NVGPU_IOCTL_CHANNEL_SET_TIMEOUT(?) | |
/dev/nvhost-* | 0x40084805 | NVGPU_IOCTL_CHANNEL_SET_TIMEOUT_EX(?) | |
/dev/nvhost-* | 0xC0044807 | NVGPU_IOCTL_CHANNEL_CYCLE_STATS | |
/dev/nvhost-* | 0xC0184808 | NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO | |
/dev/nvhost-* | 0xC0104809 | NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX | |
/dev/nvhost-* | 0x4008480A | NVGPU_IOCTL_CHANNEL_FREE_OBJ_CTX | |
/dev/nvhost-* | 0xC010480B | NVGPU_IOCTL_CHANNEL_ZCULL_BIND | |
/dev/nvhost-* | 0xC018480C | NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER | |
/dev/nvhost-* | 0x4004480D | NVGPU_IOCTL_CHANNEL_OPEN | |
/dev/nvhost-* | 0x0000480E | NVGPU_IOCTL_CHANNEL_ENABLE | |
/dev/nvhost-* | 0x0000480F | NVGPU_IOCTL_CHANNEL_DISABLE | |
/dev/nvhost-* | 0x00004810 | NVGPU_IOCTL_CHANNEL_PREEMPT | |
/dev/nvhost-* | 0x00004811 | NVGPU_IOCTL_CHANNEL_FORCE_RESET | |
/dev/nvhost-* | 0x40084812 | NVGPU_IOCTL_CHANNEL_EVENTS_CTRL | |
/dev/nvhost-* | 0xC0104813 | NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT | |
/dev/nvhost-* | 0x80804816 | ||
/dev/nvhost-* | 0xC0104817 | ||
/dev/nvhost-* | 0x40204818 | ||
/dev/nvhost-* | 0xC0184819 | ||
/dev/nvhost-* | 0xC020481A |