NV services: Difference between revisions

No edit summary
cleaning up, removing speculation
Line 9: Line 9:
| 0 || Open
| 0 || Open
|-
|-
| 1 || [[#Ioctl]]
| 1 || Ioctl
|-
|-
| 2 || Close
| 2 || Close
Line 28: Line 28:
|}
|}


== Ioctl ==
== Ioctls ==
Just like any standard build of the NVIDIA graphics' drivers, the nvdrv:a service operates mainly by processing requests and sending them to the kernel (not verified) through IOCtl commands.
The ioctl number is generated with the following primitive (see Linux kernel):
Note that these commands are 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 valid commands for group 0x00.
The following table contains known ioctls.
This group consists in commands for the "/dev/nvhost-ctrl" interface and a few global commands for every nvhost channel (e.g.: "/dev/nvhost-gpu").
 
{| 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 || Unknown || NvRmSyncWaitEvent (wait on event?
| /dev/nvhost-* || 0xC010001D || || NvRmSyncWaitEvent (wait on event?)
|-
|-
| 0xC010001E || Unknown || NvRmSyncWaitEvent (wait on event?)
| /dev/nvhost-* || 0xC010001E || || NvRmSyncWaitEvent (wait on event?)
|-
|-
| 0xC004001F || Unknown || NvRmSyncWaitEvent (signal event?)
| /dev/nvhost-* || 0xC004001F || || NvRmSyncWaitEvent (signal event?)
|-
|-
| 0xC0040020 || Unknown || NvRmSyncWaitEvent (signal event?)
| /dev/nvhost-* || 0xC0040020 || || NvRmSyncWaitEvent (signal event?)
|-
|-
| 0x40080021 || Unknown || Returns busy?
| /dev/nvhost-* || 0x40080021 || || Returns busy?
|-
|-
|}
| /dev/nvmap || 0xC0080101 || NVMAP_IOC_CREATE ||
 
 
The following table contains valid commands for group 0x01.
This group consists in commands for the "/dev/nvmap" interface.
{| class="wikitable" border="1"
! Value || Description || Notes
|-
|-
| 0xC0080101 || NVMAP_IOC_CREATE ||
| /dev/nvmap || 0xC0080103 || NVMAP_IOC_FROM_ID ||
|-
|-
| 0xC0080103 || NVMAP_IOC_FROM_ID ||
| /dev/nvmap || 0xC0200104 || NVMAP_IOC_ALLOC ||
|-
|-
| 0xC0200104 || NVMAP_IOC_ALLOC ||
| /dev/nvmap || 0xC0180105 || NVMAP_IOC_FREE ||
|-
|-
| 0xC0180105 || NVMAP_IOC_FREE ||
| /dev/nvmap || 0xC00C0109 || NVMAP_IOC_PARAM ||
|-
|-
| 0xC00C0109 || NVMAP_IOC_PARAM ||
| /dev/nvmap || 0xC008010E || NVMAP_IOC_GET_ID ||
|-
|-
| 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 ||
 
 
The following table contains valid commands for group 0x41 ('A').
This group consists in commands for the "/dev/nvhost-as-gpu" interface.
{| class="wikitable" border="1"
! Value || Description || Notes
|-
|-
| 0x40044101 || NVGPU_AS_IOCTL_BIND_CHANNEL ||
| /dev/nvhost-as-gpu || 0xC0104103 || NVGPU_AS_IOCTL_FREE_SPACE ||
|-
|-
| 0xC0184102 || NVGPU32_AS_IOCTL_ALLOC_SPACE ||
| /dev/nvhost-as-gpu || 0xC0184104 || NVGPU_AS_IOCTL_MAP_BUFFER ||
|-
|-
| 0xC0104103 || NVGPU_AS_IOCTL_FREE_SPACE ||
| /dev/nvhost-as-gpu || 0xC0084105 || NVGPU_AS_IOCTL_UNMAP_BUFFER ||
|-
|-
| 0xC0184104 || NVGPU_AS_IOCTL_MAP_BUFFER ||
| /dev/nvhost-as-gpu || 0xC0284106 || NVGPU_AS_IOCTL_ALLOC_SPACE ||
|-
|-
| 0xC0084105 || NVGPU_AS_IOCTL_UNMAP_BUFFER ||
| /dev/nvhost-as-gpu || 0x40104107 || ||
|-
|-
| 0xC0284106 || NVGPU_AS_IOCTL_ALLOC_SPACE ||
| /dev/nvhost-as-gpu || 0xC0404108 || ||
|-
|-
| 0x40104107 || Unknown ||
| /dev/nvhost-as-gpu || 0x40284109 || ||
|-
|-
| 0xC0404108 || Unknown ||
| /dev/nvhost-as-gpu || 0xC0144114 || ||
|-
|-
| 0x40284109 || Unknown ||
| /dev/nvhost-dbg-gpu || 0xC0??4402 || NVGPU_DBG_GPU_IOCTL_REG_OPS || ?? == size is unknown
|-
|-
| 0xC0144114 || Unknown ||
| /dev/nvhost-ctrl-gpu || 0x80044701 || NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE ||
|-
|-
|}
| /dev/nvhost-ctrl-gpu || 0x80284702 || NVGPU_GPU_IOCTL_ZCULL_GET_INFO ||
 
 
The following table contains valid commands for group 0x44 ('D').
This group consists in commands for the "/dev/nvhost-dbg-gpu" interface.
{| class="wikitable" border="1"
! Value || Description || Notes
|-
|-
| 0xC0??4402 || NVGPU_DBG_GPU_IOCTL_REG_OPS || ?? == size is unknown
| /dev/nvhost-ctrl-gpu || 0x402C4703 || NVGPU_GPU_IOCTL_ZBC_SET_TABLE ||
|-
|-
|}
| /dev/nvhost-ctrl-gpu || 0xC0344704 || NVGPU_GPU_IOCTL_ZBC_QUERY_TABLE ||
 
 
The following table contains valid commands for group 0x47 ('G').
This group consists in commands for the "/dev/nvhost-ctrl-gpu" interface.
{| class="wikitable" border="1"
! Value || Description || Notes
|-
|-
| 0x80044701 || NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE ||
| /dev/nvhost-ctrl-gpu || 0xC0B04705 || NVGPU_GPU_IOCTL_GET_CHARACTERISTICS ||
|-
|-
| 0x80284702 || NVGPU_GPU_IOCTL_ZCULL_GET_INFO ||
| /dev/nvhost-ctrl-gpu || 0xC0184706 || NVGPU_AS_IOCTL_ALLOC_SPACE ||
|-
|-
| 0x402C4703 || NVGPU_GPU_IOCTL_ZBC_SET_TABLE ||
| /dev/nvhost-ctrl-gpu || 0x40084707 || ||
|-
|-
| 0xC0344704 || NVGPU_GPU_IOCTL_ZBC_QUERY_TABLE ||
| /dev/nvhost-ctrl-gpu || 0x4008470E || ||
|-
|-
| 0xC0B04705 || NVGPU_GPU_IOCTL_GET_CHARACTERISTICS ||
| /dev/nvhost-ctrl-gpu || 0x4010470F || ||
|-
|-
| 0xC0184706 || NVGPU_AS_IOCTL_ALLOC_SPACE ||
| /dev/nvhost-ctrl-gpu || 0xC0084710 || ||
|-
|-
| 0x40084707 || Unknown ||
| /dev/nvhost-ctrl-gpu || 0x80084711 || ||
|-
|-
| 0x4008470E || Unknown ||
| /dev/nvhost-ctrl-gpu || 0x80084714 || ||
|-
|-
| 0x4010470F || Unknown ||
| /dev/nvhost-ctrl-gpu || 0xC008471B || ||
|-
| 0xC0084710 || Unknown ||
|-
| 0x80084711 || Unknown ||
|-
| 0x80084714 || Unknown ||
|-
| 0xC008471B || Unknown ||
|-
| 0xC010471C || Unknown ||
|-
|}
 
 
The following table contains valid commands for group 0x48 ('H').
This group consists in commands common to all nvhost channels (depending if they implement them or not), but they are only listed here in relation to the interface "/dev/nvhost-gpu" for convenience.
{| class="wikitable" border="1"
! Value || Description || Notes
|-
|-
| 0x40044801 || NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD ||
| /dev/nvhost-ctrl-gpu || 0xC010471C || ||
|-
|-
| 0x40044803 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT(?) ||
| /dev/nvhost-* || 0x40044801 || NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD ||
|-
|-
| 0x40084805 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT_EX(?) ||
| /dev/nvhost-* || 0x40044803 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT(?) ||
|-
|-
| 0xC0044807 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS ||
| /dev/nvhost-* || 0x40084805 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT_EX(?) ||
|-
|-
| 0xC0184808 || NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO ||
| /dev/nvhost-* || 0xC0044807 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS ||
|-
|-
| 0xC0104809 || NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX ||
| /dev/nvhost-* || 0xC0184808 || NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO ||
|-
|-
| 0x4008480A || NVGPU_IOCTL_CHANNEL_FREE_OBJ_CTX ||
| /dev/nvhost-* || 0xC0104809 || NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX ||
|-
|-
| 0xC010480B || NVGPU_IOCTL_CHANNEL_ZCULL_BIND ||
| /dev/nvhost-* || 0x4008480A || NVGPU_IOCTL_CHANNEL_FREE_OBJ_CTX ||
|-
|-
| 0xC018480C || NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER ||
| /dev/nvhost-* || 0xC010480B || NVGPU_IOCTL_CHANNEL_ZCULL_BIND ||
|-
|-
| 0x4004480D || NVGPU_IOCTL_CHANNEL_OPEN ||
| /dev/nvhost-* || 0xC018480C || NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER ||
|-
|-
| 0x0000480E || NVGPU_IOCTL_CHANNEL_ENABLE ||
| /dev/nvhost-* || 0x4004480D || NVGPU_IOCTL_CHANNEL_OPEN ||
|-
|-
| 0x0000480F || NVGPU_IOCTL_CHANNEL_DISABLE ||
| /dev/nvhost-* || 0x0000480E || NVGPU_IOCTL_CHANNEL_ENABLE ||
|-
|-
| 0x00004810 || NVGPU_IOCTL_CHANNEL_PREEMPT ||
| /dev/nvhost-* || 0x0000480F || NVGPU_IOCTL_CHANNEL_DISABLE ||
|-
|-
| 0x00004811 || NVGPU_IOCTL_CHANNEL_FORCE_RESET ||
| /dev/nvhost-* || 0x00004810 || NVGPU_IOCTL_CHANNEL_PREEMPT ||
|-
|-
| 0x40084812 || NVGPU_IOCTL_CHANNEL_EVENTS_CTRL ||
| /dev/nvhost-* || 0x00004811 || NVGPU_IOCTL_CHANNEL_FORCE_RESET ||
|-
|-
| 0xC0104813 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT ||
| /dev/nvhost-* || 0x40084812 || NVGPU_IOCTL_CHANNEL_EVENTS_CTRL ||
|-
|-
| 0x80804816 || Unknown ||
| /dev/nvhost-* || 0xC0104813 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT ||
|-
|-
| 0xC0104817 || Unknown ||
| /dev/nvhost-* || 0x80804816 || ||
|-
|-
| 0x40204818 || Unknown ||
| /dev/nvhost-* || 0xC0104817 || ||
|-
|-
| 0xC0184819 || Unknown ||
| /dev/nvhost-* || 0x40204818 || ||
|-
|-
| 0xC020481A || Unknown ||
| /dev/nvhost-* || 0xC0184819 || ||
|-
|-
| /dev/nvhost-* || 0xC020481A || ||
|}
|}