mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-01-09 23:18:04 -05:00
nv ioctl sniffer (#3892)
* nv ioctl sniffer * unused import * Update __init__.py * that work * that fix it
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
# type: ignore
|
||||
import ctypes, ctypes.util, struct, platform, pathlib, re, time, os
|
||||
start = time.perf_counter()
|
||||
|
||||
|
||||
258
extra/nv_gpu_driver/class_ioctl.py
Normal file
258
extra/nv_gpu_driver/class_ioctl.py
Normal file
@@ -0,0 +1,258 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# TARGET arch is: []
|
||||
# WORD_SIZE is: 8
|
||||
# POINTER_SIZE is: 8
|
||||
# LONGDOUBLE_SIZE is: 16
|
||||
#
|
||||
import ctypes
|
||||
|
||||
|
||||
|
||||
|
||||
NV01_ROOT = (0x00000000) # macro
|
||||
NV1_ROOT = (0x00000000) # macro
|
||||
NV01_NULL_OBJECT = (0x00000000) # macro
|
||||
NV1_NULL_OBJECT = (0x00000000) # macro
|
||||
NV01_ROOT_NON_PRIV = (0x00000001) # macro
|
||||
NV1_ROOT_NON_PRIV = (0x00000001) # macro
|
||||
NV01_ROOT_CLIENT = (0x00000041) # macro
|
||||
FABRIC_MANAGER_SESSION = (0x0000000f) # macro
|
||||
NV0020_GPU_MANAGEMENT = (0x00000020) # macro
|
||||
NV01_DEVICE_0 = (0x00000080) # macro
|
||||
NV20_SUBDEVICE_0 = (0x00002080) # macro
|
||||
NV2081_BINAPI = (0x00002081) # macro
|
||||
NV2082_BINAPI_PRIVILEGED = (0x00002082) # macro
|
||||
NV20_SUBDEVICE_DIAG = (0x0000208f) # macro
|
||||
NV01_CONTEXT_DMA = (0x00000002) # macro
|
||||
NV01_MEMORY_SYSTEM = (0x0000003e) # macro
|
||||
NV1_MEMORY_SYSTEM = (0x0000003e) # macro
|
||||
NV01_MEMORY_LOCAL_PRIVILEGED = (0x0000003f) # macro
|
||||
NV1_MEMORY_LOCAL_PRIVILEGED = (0x0000003f) # macro
|
||||
NV01_MEMORY_PRIVILEGED = (0x0000003f) # macro
|
||||
NV1_MEMORY_PRIVILEGED = (0x0000003f) # macro
|
||||
NV01_MEMORY_LOCAL_USER = (0x00000040) # macro
|
||||
NV1_MEMORY_LOCAL_USER = (0x00000040) # macro
|
||||
NV01_MEMORY_USER = (0x00000040) # macro
|
||||
NV1_MEMORY_USER = (0x00000040) # macro
|
||||
NV_MEMORY_EXTENDED_USER = (0x00000042) # macro
|
||||
NV01_MEMORY_VIRTUAL = (0x00000070) # macro
|
||||
NV01_MEMORY_SYSTEM_DYNAMIC = (0x00000070) # macro
|
||||
NV1_MEMORY_SYSTEM_DYNAMIC = (0x00000070) # macro
|
||||
NV_MEMORY_MAPPER = (0x000000fe) # macro
|
||||
NV01_MEMORY_LOCAL_PHYSICAL = (0x000000c2) # macro
|
||||
NV01_MEMORY_SYSTEM_OS_DESCRIPTOR = (0x00000071) # macro
|
||||
NV01_MEMORY_DEVICELESS = (0x000090ce) # macro
|
||||
NV01_MEMORY_FRAMEBUFFER_CONSOLE = (0x00000076) # macro
|
||||
NV01_MEMORY_HW_RESOURCES = (0x000000b1) # macro
|
||||
NV01_MEMORY_LIST_SYSTEM = (0x00000081) # macro
|
||||
NV01_MEMORY_LIST_FBMEM = (0x00000082) # macro
|
||||
NV01_MEMORY_LIST_OBJECT = (0x00000083) # macro
|
||||
NV01_MEMORY_FLA = (0x000000f3) # macro
|
||||
NV_CE_UTILS = (0x00000050) # macro
|
||||
NV_MEMORY_FABRIC = (0x000000f8) # macro
|
||||
FABRIC_VASPACE_A = (0x000000fc) # macro
|
||||
NV_MEMORY_MULTICAST_FABRIC = (0x000000fd) # macro
|
||||
IO_VASPACE_A = (0x000000f2) # macro
|
||||
NV01_NULL = (0x00000030) # macro
|
||||
NV1_NULL = (0x00000030) # macro
|
||||
NV01_EVENT = (0x00000005) # macro
|
||||
NV1_EVENT = (0x00000005) # macro
|
||||
NV01_EVENT_KERNEL_CALLBACK = (0x00000078) # macro
|
||||
NV1_EVENT_KERNEL_CALLBACK = (0x00000078) # macro
|
||||
NV01_EVENT_OS_EVENT = (0x00000079) # macro
|
||||
NV1_EVENT_OS_EVENT = (0x00000079) # macro
|
||||
NV01_EVENT_WIN32_EVENT = (0x00000079) # macro
|
||||
NV1_EVENT_WIN32_EVENT = (0x00000079) # macro
|
||||
NV01_EVENT_KERNEL_CALLBACK_EX = (0x0000007e) # macro
|
||||
NV1_EVENT_KERNEL_CALLBACK_EX = (0x0000007e) # macro
|
||||
NV01_TIMER = (0x00000004) # macro
|
||||
NV1_TIMER = (0x00000004) # macro
|
||||
KERNEL_GRAPHICS_CONTEXT = (0x00000090) # macro
|
||||
NV50_CHANNEL_GPFIFO = (0x0000506f) # macro
|
||||
GF100_CHANNEL_GPFIFO = (0x0000906f) # macro
|
||||
KEPLER_CHANNEL_GPFIFO_A = (0x0000a06f) # macro
|
||||
UVM_CHANNEL_RETAINER = (0x0000c574) # macro
|
||||
KEPLER_CHANNEL_GPFIFO_B = (0x0000a16f) # macro
|
||||
MAXWELL_CHANNEL_GPFIFO_A = (0x0000b06f) # macro
|
||||
PASCAL_CHANNEL_GPFIFO_A = (0x0000c06f) # macro
|
||||
VOLTA_CHANNEL_GPFIFO_A = (0x0000c36f) # macro
|
||||
TURING_CHANNEL_GPFIFO_A = (0x0000c46f) # macro
|
||||
AMPERE_CHANNEL_GPFIFO_A = (0x0000c56f) # macro
|
||||
HOPPER_CHANNEL_GPFIFO_A = (0x0000c86f) # macro
|
||||
NV04_SOFTWARE_TEST = (0x0000007d) # macro
|
||||
NV4_SOFTWARE_TEST = (0x0000007d) # macro
|
||||
NV30_GSYNC = (0x000030f1) # macro
|
||||
VOLTA_USERMODE_A = (0x0000c361) # macro
|
||||
TURING_USERMODE_A = (0x0000c461) # macro
|
||||
AMPERE_USERMODE_A = (0x0000c561) # macro
|
||||
HOPPER_USERMODE_A = (0x0000c661) # macro
|
||||
NVC371_DISP_SF_USER = (0x0000c371) # macro
|
||||
NVC372_DISPLAY_SW = (0x0000c372) # macro
|
||||
NVC573_DISP_CAPABILITIES = (0x0000c573) # macro
|
||||
NVC673_DISP_CAPABILITIES = (0x0000c673) # macro
|
||||
NVC773_DISP_CAPABILITIES = (0x0000c773) # macro
|
||||
NV04_DISPLAY_COMMON = (0x00000073) # macro
|
||||
NV50_DEFERRED_API_CLASS = (0x00005080) # macro
|
||||
MPS_COMPUTE = (0x0000900e) # macro
|
||||
NVC570_DISPLAY = (0x0000c570) # macro
|
||||
NVC57A_CURSOR_IMM_CHANNEL_PIO = (0x0000c57a) # macro
|
||||
NVC57B_WINDOW_IMM_CHANNEL_DMA = (0x0000c57b) # macro
|
||||
NVC57D_CORE_CHANNEL_DMA = (0x0000c57d) # macro
|
||||
NVC57E_WINDOW_CHANNEL_DMA = (0x0000c57e) # macro
|
||||
NVC670_DISPLAY = (0x0000c670) # macro
|
||||
NVC671_DISP_SF_USER = (0x0000c671) # macro
|
||||
NVC67A_CURSOR_IMM_CHANNEL_PIO = (0x0000c67a) # macro
|
||||
NVC67B_WINDOW_IMM_CHANNEL_DMA = (0x0000c67b) # macro
|
||||
NVC67D_CORE_CHANNEL_DMA = (0x0000c67d) # macro
|
||||
NVC67E_WINDOW_CHANNEL_DMA = (0x0000c67e) # macro
|
||||
NVC77F_ANY_CHANNEL_DMA = (0x0000c77f) # macro
|
||||
NVC770_DISPLAY = (0x0000c770) # macro
|
||||
NVC771_DISP_SF_USER = (0x0000c771) # macro
|
||||
NVC77D_CORE_CHANNEL_DMA = (0x0000c77d) # macro
|
||||
NV9010_VBLANK_CALLBACK = (0x00009010) # macro
|
||||
GF100_PROFILER = (0x000090cc) # macro
|
||||
MAXWELL_PROFILER = (0x0000b0cc) # macro
|
||||
MAXWELL_PROFILER_DEVICE = (0x0000b2cc) # macro
|
||||
GF100_SUBDEVICE_MASTER = (0x000090e6) # macro
|
||||
GF100_SUBDEVICE_INFOROM = (0x000090e7) # macro
|
||||
GF100_ZBC_CLEAR = (0x00009096) # macro
|
||||
GF100_DISP_SW = (0x00009072) # macro
|
||||
GF100_TIMED_SEMAPHORE_SW = (0x00009074) # macro
|
||||
G84_PERFBUFFER = (0x0000844c) # macro
|
||||
NV50_MEMORY_VIRTUAL = (0x000050a0) # macro
|
||||
NV50_P2P = (0x0000503b) # macro
|
||||
NV50_THIRD_PARTY_P2P = (0x0000503c) # macro
|
||||
FERMI_TWOD_A = (0x0000902d) # macro
|
||||
FERMI_VASPACE_A = (0x000090f1) # macro
|
||||
HOPPER_SEC2_WORK_LAUNCH_A = (0x0000cba2) # macro
|
||||
GF100_HDACODEC = (0x000090ec) # macro
|
||||
NVB8B0_VIDEO_DECODER = (0x0000b8b0) # macro
|
||||
NVC4B0_VIDEO_DECODER = (0x0000c4b0) # macro
|
||||
NVC6B0_VIDEO_DECODER = (0x0000c6b0) # macro
|
||||
NVC7B0_VIDEO_DECODER = (0x0000c7b0) # macro
|
||||
NVC9B0_VIDEO_DECODER = (0x0000c9b0) # macro
|
||||
NVC4B7_VIDEO_ENCODER = (0x0000c4b7) # macro
|
||||
NVB4B7_VIDEO_ENCODER = (0x0000b4b7) # macro
|
||||
NVC7B7_VIDEO_ENCODER = (0x0000c7b7) # macro
|
||||
NVC9B7_VIDEO_ENCODER = (0x0000c9b7) # macro
|
||||
NVB8D1_VIDEO_NVJPG = (0x0000b8d1) # macro
|
||||
NVC4D1_VIDEO_NVJPG = (0x0000c4d1) # macro
|
||||
NVC9D1_VIDEO_NVJPG = (0x0000c9d1) # macro
|
||||
NVB8FA_VIDEO_OFA = (0x0000b8fa) # macro
|
||||
NVC6FA_VIDEO_OFA = (0x0000c6fa) # macro
|
||||
NVC7FA_VIDEO_OFA = (0x0000c7fa) # macro
|
||||
NVC9FA_VIDEO_OFA = (0x0000c9fa) # macro
|
||||
KEPLER_INLINE_TO_MEMORY_B = (0x0000a140) # macro
|
||||
FERMI_CONTEXT_SHARE_A = (0x00009067) # macro
|
||||
KEPLER_CHANNEL_GROUP_A = (0x0000a06c) # macro
|
||||
PASCAL_DMA_COPY_A = (0x0000c0b5) # macro
|
||||
TURING_DMA_COPY_A = (0x0000c5b5) # macro
|
||||
AMPERE_DMA_COPY_A = (0x0000c6b5) # macro
|
||||
AMPERE_DMA_COPY_B = (0x0000c7b5) # macro
|
||||
HOPPER_DMA_COPY_A = (0x0000c8b5) # macro
|
||||
MAXWELL_DMA_COPY_A = (0x0000b0b5) # macro
|
||||
ACCESS_COUNTER_NOTIFY_BUFFER = (0x0000c365) # macro
|
||||
MMU_FAULT_BUFFER = (0x0000c369) # macro
|
||||
MMU_VIDMEM_ACCESS_BIT_BUFFER = (0x0000c763) # macro
|
||||
TURING_A = (0x0000c597) # macro
|
||||
TURING_COMPUTE_A = (0x0000c5c0) # macro
|
||||
AMPERE_A = (0x0000c697) # macro
|
||||
AMPERE_COMPUTE_A = (0x0000c6c0) # macro
|
||||
AMPERE_B = (0x0000c797) # macro
|
||||
AMPERE_COMPUTE_B = (0x0000c7c0) # macro
|
||||
ADA_A = (0x0000c997) # macro
|
||||
ADA_COMPUTE_A = (0x0000c9c0) # macro
|
||||
AMPERE_SMC_PARTITION_REF = (0x0000c637) # macro
|
||||
AMPERE_SMC_EXEC_PARTITION_REF = (0x0000c638) # macro
|
||||
AMPERE_SMC_CONFIG_SESSION = (0x0000c639) # macro
|
||||
NV0092_RG_LINE_CALLBACK = (0x00000092) # macro
|
||||
AMPERE_SMC_MONITOR_SESSION = (0x0000c640) # macro
|
||||
HOPPER_A = (0x0000cb97) # macro
|
||||
HOPPER_COMPUTE_A = (0x0000cbc0) # macro
|
||||
NV40_DEBUG_BUFFER = (0x000000db) # macro
|
||||
RM_USER_SHARED_DATA = (0x000000de) # macro
|
||||
GT200_DEBUGGER = (0x000083de) # macro
|
||||
NV40_I2C = (0x0000402c) # macro
|
||||
NVA081_VGPU_CONFIG = (0x0000a081) # macro
|
||||
NVA084_KERNEL_HOST_VGPU_DEVICE = (0x0000a084) # macro
|
||||
NV0060_SYNC_GPU_BOOST = (0x00000060) # macro
|
||||
GP100_UVM_SW = (0x0000c076) # macro
|
||||
NV_EVENT_BUFFER = (0x000090cd) # macro
|
||||
NV_CONFIDENTIAL_COMPUTE = (0x0000cb33) # macro
|
||||
NV_COUNTER_COLLECTION_UNIT = (0x0000cbca) # macro
|
||||
NV_SEMAPHORE_SURFACE = (0x000000da) # macro
|
||||
__all__ = \
|
||||
['ACCESS_COUNTER_NOTIFY_BUFFER', 'ADA_A', 'ADA_COMPUTE_A',
|
||||
'AMPERE_A', 'AMPERE_B', 'AMPERE_CHANNEL_GPFIFO_A',
|
||||
'AMPERE_COMPUTE_A', 'AMPERE_COMPUTE_B', 'AMPERE_DMA_COPY_A',
|
||||
'AMPERE_DMA_COPY_B', 'AMPERE_SMC_CONFIG_SESSION',
|
||||
'AMPERE_SMC_EXEC_PARTITION_REF', 'AMPERE_SMC_MONITOR_SESSION',
|
||||
'AMPERE_SMC_PARTITION_REF', 'AMPERE_USERMODE_A',
|
||||
'FABRIC_MANAGER_SESSION', 'FABRIC_VASPACE_A',
|
||||
'FERMI_CONTEXT_SHARE_A', 'FERMI_TWOD_A', 'FERMI_VASPACE_A',
|
||||
'G84_PERFBUFFER', 'GF100_CHANNEL_GPFIFO', 'GF100_DISP_SW',
|
||||
'GF100_HDACODEC', 'GF100_PROFILER', 'GF100_SUBDEVICE_INFOROM',
|
||||
'GF100_SUBDEVICE_MASTER', 'GF100_TIMED_SEMAPHORE_SW',
|
||||
'GF100_ZBC_CLEAR', 'GP100_UVM_SW', 'GT200_DEBUGGER', 'HOPPER_A',
|
||||
'HOPPER_CHANNEL_GPFIFO_A', 'HOPPER_COMPUTE_A',
|
||||
'HOPPER_DMA_COPY_A', 'HOPPER_SEC2_WORK_LAUNCH_A',
|
||||
'HOPPER_USERMODE_A', 'IO_VASPACE_A', 'KEPLER_CHANNEL_GPFIFO_A',
|
||||
'KEPLER_CHANNEL_GPFIFO_B', 'KEPLER_CHANNEL_GROUP_A',
|
||||
'KEPLER_INLINE_TO_MEMORY_B', 'KERNEL_GRAPHICS_CONTEXT',
|
||||
'MAXWELL_CHANNEL_GPFIFO_A', 'MAXWELL_DMA_COPY_A',
|
||||
'MAXWELL_PROFILER', 'MAXWELL_PROFILER_DEVICE', 'MMU_FAULT_BUFFER',
|
||||
'MMU_VIDMEM_ACCESS_BIT_BUFFER', 'MPS_COMPUTE',
|
||||
'NV0020_GPU_MANAGEMENT', 'NV0060_SYNC_GPU_BOOST',
|
||||
'NV0092_RG_LINE_CALLBACK', 'NV01_CONTEXT_DMA', 'NV01_DEVICE_0',
|
||||
'NV01_EVENT', 'NV01_EVENT_KERNEL_CALLBACK',
|
||||
'NV01_EVENT_KERNEL_CALLBACK_EX', 'NV01_EVENT_OS_EVENT',
|
||||
'NV01_EVENT_WIN32_EVENT', 'NV01_MEMORY_DEVICELESS',
|
||||
'NV01_MEMORY_FLA', 'NV01_MEMORY_FRAMEBUFFER_CONSOLE',
|
||||
'NV01_MEMORY_HW_RESOURCES', 'NV01_MEMORY_LIST_FBMEM',
|
||||
'NV01_MEMORY_LIST_OBJECT', 'NV01_MEMORY_LIST_SYSTEM',
|
||||
'NV01_MEMORY_LOCAL_PHYSICAL', 'NV01_MEMORY_LOCAL_PRIVILEGED',
|
||||
'NV01_MEMORY_LOCAL_USER', 'NV01_MEMORY_PRIVILEGED',
|
||||
'NV01_MEMORY_SYSTEM', 'NV01_MEMORY_SYSTEM_DYNAMIC',
|
||||
'NV01_MEMORY_SYSTEM_OS_DESCRIPTOR', 'NV01_MEMORY_USER',
|
||||
'NV01_MEMORY_VIRTUAL', 'NV01_NULL', 'NV01_NULL_OBJECT',
|
||||
'NV01_ROOT', 'NV01_ROOT_CLIENT', 'NV01_ROOT_NON_PRIV',
|
||||
'NV01_TIMER', 'NV04_DISPLAY_COMMON', 'NV04_SOFTWARE_TEST',
|
||||
'NV1_EVENT', 'NV1_EVENT_KERNEL_CALLBACK',
|
||||
'NV1_EVENT_KERNEL_CALLBACK_EX', 'NV1_EVENT_OS_EVENT',
|
||||
'NV1_EVENT_WIN32_EVENT', 'NV1_MEMORY_LOCAL_PRIVILEGED',
|
||||
'NV1_MEMORY_LOCAL_USER', 'NV1_MEMORY_PRIVILEGED',
|
||||
'NV1_MEMORY_SYSTEM', 'NV1_MEMORY_SYSTEM_DYNAMIC',
|
||||
'NV1_MEMORY_USER', 'NV1_NULL', 'NV1_NULL_OBJECT', 'NV1_ROOT',
|
||||
'NV1_ROOT_NON_PRIV', 'NV1_TIMER', 'NV2081_BINAPI',
|
||||
'NV2082_BINAPI_PRIVILEGED', 'NV20_SUBDEVICE_0',
|
||||
'NV20_SUBDEVICE_DIAG', 'NV30_GSYNC', 'NV40_DEBUG_BUFFER',
|
||||
'NV40_I2C', 'NV4_SOFTWARE_TEST', 'NV50_CHANNEL_GPFIFO',
|
||||
'NV50_DEFERRED_API_CLASS', 'NV50_MEMORY_VIRTUAL', 'NV50_P2P',
|
||||
'NV50_THIRD_PARTY_P2P', 'NV9010_VBLANK_CALLBACK',
|
||||
'NVA081_VGPU_CONFIG', 'NVA084_KERNEL_HOST_VGPU_DEVICE',
|
||||
'NVB4B7_VIDEO_ENCODER', 'NVB8B0_VIDEO_DECODER',
|
||||
'NVB8D1_VIDEO_NVJPG', 'NVB8FA_VIDEO_OFA', 'NVC371_DISP_SF_USER',
|
||||
'NVC372_DISPLAY_SW', 'NVC4B0_VIDEO_DECODER',
|
||||
'NVC4B7_VIDEO_ENCODER', 'NVC4D1_VIDEO_NVJPG', 'NVC570_DISPLAY',
|
||||
'NVC573_DISP_CAPABILITIES', 'NVC57A_CURSOR_IMM_CHANNEL_PIO',
|
||||
'NVC57B_WINDOW_IMM_CHANNEL_DMA', 'NVC57D_CORE_CHANNEL_DMA',
|
||||
'NVC57E_WINDOW_CHANNEL_DMA', 'NVC670_DISPLAY',
|
||||
'NVC671_DISP_SF_USER', 'NVC673_DISP_CAPABILITIES',
|
||||
'NVC67A_CURSOR_IMM_CHANNEL_PIO', 'NVC67B_WINDOW_IMM_CHANNEL_DMA',
|
||||
'NVC67D_CORE_CHANNEL_DMA', 'NVC67E_WINDOW_CHANNEL_DMA',
|
||||
'NVC6B0_VIDEO_DECODER', 'NVC6FA_VIDEO_OFA', 'NVC770_DISPLAY',
|
||||
'NVC771_DISP_SF_USER', 'NVC773_DISP_CAPABILITIES',
|
||||
'NVC77D_CORE_CHANNEL_DMA', 'NVC77F_ANY_CHANNEL_DMA',
|
||||
'NVC7B0_VIDEO_DECODER', 'NVC7B7_VIDEO_ENCODER',
|
||||
'NVC7FA_VIDEO_OFA', 'NVC9B0_VIDEO_DECODER',
|
||||
'NVC9B7_VIDEO_ENCODER', 'NVC9D1_VIDEO_NVJPG', 'NVC9FA_VIDEO_OFA',
|
||||
'NV_CE_UTILS', 'NV_CONFIDENTIAL_COMPUTE',
|
||||
'NV_COUNTER_COLLECTION_UNIT', 'NV_EVENT_BUFFER',
|
||||
'NV_MEMORY_EXTENDED_USER', 'NV_MEMORY_FABRIC', 'NV_MEMORY_MAPPER',
|
||||
'NV_MEMORY_MULTICAST_FABRIC', 'NV_SEMAPHORE_SURFACE',
|
||||
'PASCAL_CHANNEL_GPFIFO_A', 'PASCAL_DMA_COPY_A',
|
||||
'RM_USER_SHARED_DATA', 'TURING_A', 'TURING_CHANNEL_GPFIFO_A',
|
||||
'TURING_COMPUTE_A', 'TURING_DMA_COPY_A', 'TURING_USERMODE_A',
|
||||
'UVM_CHANNEL_RETAINER', 'VOLTA_CHANNEL_GPFIFO_A',
|
||||
'VOLTA_USERMODE_A']
|
||||
26
extra/nv_gpu_driver/codegen.sh
Executable file
26
extra/nv_gpu_driver/codegen.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
SRC=/home/kafka/build/open-gpu-kernel-modules
|
||||
|
||||
clang2py \
|
||||
$SRC/src/nvidia/generated/g_allclasses.h \
|
||||
-o class_ioctl.py -k cdefstum
|
||||
|
||||
exit
|
||||
|
||||
#clang2py $SRC/src/nvidia/arch/nvalloc/unix/include/nv_escape.h \
|
||||
# $SRC/src/nvidia/arch/nvalloc/unix/include/nv-ioctl-numbers.h \
|
||||
# $SRC/src/common/sdk/nvidia/inc/nvos.h \
|
||||
# --clang-args="-I $SRC/src/common/sdk/nvidia/inc -I $SRC/src/common/sdk/nvidia/inc/ctrl" \
|
||||
# -o esc_ioctl.py -k cdefstum
|
||||
|
||||
clang2py \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrl0000/*.h \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrl0080/*.h \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrl2080/*.h \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrl83de/*.h \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrlc36f.h \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrlcb33.h \
|
||||
$SRC/src/common/sdk/nvidia/inc/ctrl/ctrla06c.h \
|
||||
--clang-args="-I $SRC/src/common/sdk/nvidia/inc -I $SRC/src/common/sdk/nvidia/inc/ctrl" \
|
||||
-o ctrl_ioctl.py -k cdefstum
|
||||
sed -i "s\(0000000001)\1\g" ctrl_ioctl.py
|
||||
24295
extra/nv_gpu_driver/ctrl_ioctl.py
Normal file
24295
extra/nv_gpu_driver/ctrl_ioctl.py
Normal file
File diff suppressed because it is too large
Load Diff
2594
extra/nv_gpu_driver/esc_ioctl.py
Normal file
2594
extra/nv_gpu_driver/esc_ioctl.py
Normal file
File diff suppressed because it is too large
Load Diff
93
extra/nv_gpu_driver/nv_ioctl.py
Normal file
93
extra/nv_gpu_driver/nv_ioctl.py
Normal file
@@ -0,0 +1,93 @@
|
||||
# type: ignore
|
||||
import ctypes, ctypes.util, struct, platform, pathlib, re, time, os
|
||||
start = time.perf_counter()
|
||||
|
||||
# *** ioctl lib ***
|
||||
libc = ctypes.CDLL(ctypes.util.find_library("c"))
|
||||
processor = platform.processor()
|
||||
IOCTL_SYSCALL = {"aarch64": 0x1d, "x86_64":16}[processor]
|
||||
|
||||
def get_struct(argp, stype):
|
||||
return ctypes.cast(ctypes.c_void_p(argp), ctypes.POINTER(stype)).contents
|
||||
|
||||
def format_struct(s):
|
||||
sdats = []
|
||||
for field_name, field_type in s._fields_:
|
||||
dat = getattr(s, field_name)
|
||||
if isinstance(dat, int): sdats.append(f"{field_name}:0x{dat:X}")
|
||||
else: sdats.append(f"{field_name}:{dat}")
|
||||
return sdats
|
||||
|
||||
def install_hook(c_function, python_function):
|
||||
python_function_addr = ctypes.cast(ctypes.byref(python_function), ctypes.POINTER(ctypes.c_ulong)).contents.value
|
||||
# AARCH64 trampoline to ioctl
|
||||
if processor == "aarch64":
|
||||
# 0x0000000000000000: 70 00 00 10 adr x16, #0xc
|
||||
# 0x0000000000000004: 10 02 40 F9 ldr x16, [x16]
|
||||
# 0x0000000000000008: 00 02 1F D6 br x16
|
||||
tramp = b"\x70\x00\x00\x10\x10\x02\x40\xf9\x00\x02\x1f\xd6"
|
||||
tramp += struct.pack("Q", python_function_addr)
|
||||
elif processor == "x86_64":
|
||||
# 0x0000000000000000: 49 B8 aa aa aa aa aa aa aa aa movabs r8, <address>
|
||||
# 0x000000000000000a: 41 FF E0 jmp r8
|
||||
tramp = b"\x49\xB8" + struct.pack("Q", python_function_addr) + b"\x41\xFF\xE0"
|
||||
else:
|
||||
raise Exception(f"processor {processor} not supported")
|
||||
|
||||
# get real ioctl address
|
||||
ioctl_address = ctypes.cast(ctypes.byref(c_function), ctypes.POINTER(ctypes.c_ulong))
|
||||
|
||||
# hook ioctl
|
||||
ret = libc.mprotect(ctypes.c_ulong((ioctl_address.contents.value//0x1000)*0x1000), 0x2000, 7)
|
||||
assert ret == 0
|
||||
libc.memcpy(ioctl_address.contents, ctypes.create_string_buffer(tramp), len(tramp))
|
||||
|
||||
# *** ioctl lib end ***
|
||||
import extra.nv_gpu_driver.esc_ioctl as ESC
|
||||
import extra.nv_gpu_driver.ctrl_ioctl as CTRL
|
||||
import extra.nv_gpu_driver.class_ioctl as CLASS
|
||||
nvescs = {getattr(ESC, x):x for x in dir(ESC) if x.startswith("NV_ESC")}
|
||||
nvcmds = {getattr(CTRL, x):(x, getattr(CTRL, "struct_"+x+"_PARAMS", getattr(CTRL, "struct_"+x.replace("_CMD_", "_")+"_PARAMS", None))) for x in dir(CTRL) if \
|
||||
x.startswith("NV") and x[6:].startswith("_CTRL_") and isinstance(getattr(CTRL, x), int)}
|
||||
nvclasses = {getattr(CLASS, x):x for x in dir(CLASS) if isinstance(getattr(CLASS, x), int)}
|
||||
|
||||
@ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int, ctypes.c_ulong, ctypes.c_void_p)
|
||||
def ioctl(fd, request, argp):
|
||||
st = time.perf_counter()
|
||||
ret = libc.syscall(IOCTL_SYSCALL, ctypes.c_int(fd), ctypes.c_ulong(request), ctypes.c_void_p(argp))
|
||||
et = time.perf_counter()-st
|
||||
fn = os.readlink(f"/proc/self/fd/{fd}")
|
||||
#print(f"ioctl {request:8x} {fn:20s}")
|
||||
idir, size, itype, nr = (request>>30), (request>>16)&0x3FFF, (request>>8)&0xFF, request&0xFF
|
||||
if itype == ord(ESC.NV_IOCTL_MAGIC):
|
||||
if nr == ESC.NV_ESC_RM_CONTROL:
|
||||
s = get_struct(argp, ESC.NVOS54_PARAMETERS)
|
||||
if s.cmd in nvcmds:
|
||||
name, struc = nvcmds[s.cmd]
|
||||
if struc is not None:
|
||||
ss = get_struct(s.params, struc)
|
||||
print("NV_ESC_RM_CONTROL ", name, format_struct(ss))
|
||||
else:
|
||||
print("NV_ESC_RM_CONTROL ", name)
|
||||
else:
|
||||
print("unhandled cmd", hex(s.cmd))
|
||||
#format_struct(s)
|
||||
#print(f"{(st-start)*1000:7.2f} ms +{et*1000.:7.2f} ms : {ret:2d} = {name:40s}", ' '.join(format_struct(s)))
|
||||
elif nr == ESC.NV_ESC_RM_ALLOC:
|
||||
s = get_struct(argp, ESC.NVOS21_PARAMETERS)
|
||||
print(f"NV_ESC_RM_ALLOC class: {nvclasses[s.hClass]:30s}")
|
||||
elif nr == ESC.NV_ESC_RM_MAP_MEMORY:
|
||||
# nv_ioctl_nvos33_parameters_with_fd
|
||||
s = get_struct(argp, ESC.NVOS33_PARAMETERS)
|
||||
print(f"NV_ESC_RM_MAP_MEMORY {s.pLinearAddress:x}")
|
||||
elif nr in nvescs:
|
||||
print(nvescs[nr])
|
||||
else:
|
||||
print("unhandled NR", nr)
|
||||
#print("ioctl", f"{idir=} {size=} {itype=} {nr=} {fd=} {ret=}", os.readlink(f"/proc/self/fd/{fd}") if fd >= 0 else "")
|
||||
return ret
|
||||
|
||||
install_hook(libc.ioctl, ioctl)
|
||||
|
||||
|
||||
# IOCTL=1 PTX=1 CUDA=1 python3 test/test_ops.py TestOps.test_tiny_add
|
||||
@@ -8,6 +8,7 @@ from tinygrad.device import Compiled, LRUAllocator, MallocAllocator, Compiler, B
|
||||
from tinygrad.codegen.kernel import LinearizerOptions
|
||||
from tinygrad.renderer.cstyle import CUDARenderer
|
||||
from tinygrad.renderer.assembly import PTXRenderer
|
||||
if getenv("IOCTL"): import extra.nv_gpu_driver.nv_ioctl # noqa: F401
|
||||
|
||||
def pretty_ptx(s):
|
||||
# all expressions match `<valid_before><expr><valid_after>` and replace it with `<valid_before>color(<expr>)<valid_after>`
|
||||
|
||||
@@ -8,6 +8,7 @@ from tinygrad.codegen.kernel import LinearizerOptions
|
||||
from tinygrad.runtime.driver.hsa import check, scan_agents, find_memory_pool, AQLQueue
|
||||
from tinygrad.renderer.cstyle import HIPRenderer
|
||||
from tinygrad.runtime.driver.hip_comgr import compile_hip
|
||||
if getenv("IOCTL"): import extra.hip_gpu_driver.hip_ioctl # noqa: F401
|
||||
|
||||
PROFILE = getenv("PROFILE", 0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user