github.com/nicocha30/gvisor-ligolo@v0.0.0-20230726075806-989fa2c0a413/pkg/abi/nvgpu/classes.go (about)

     1  // Copyright 2023 The gVisor Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package nvgpu
    16  
    17  // Class handles, from src/nvidia/generated/g_allclasses.h.
    18  const (
    19  	NV01_ROOT                        = 0x00000000
    20  	NV01_ROOT_NON_PRIV               = 0x00000001
    21  	NV01_MEMORY_SYSTEM               = 0x0000003e
    22  	NV01_ROOT_CLIENT                 = 0x00000041
    23  	NV01_MEMORY_SYSTEM_OS_DESCRIPTOR = 0x00000071
    24  	NV01_EVENT_OS_EVENT              = 0x00000079
    25  	NV01_DEVICE_0                    = 0x00000080
    26  	NV20_SUBDEVICE_0                 = 0x00002080
    27  	NV50_THIRD_PARTY_P2P             = 0x0000503c
    28  	GT200_DEBUGGER                   = 0x000083de
    29  	GF100_SUBDEVICE_MASTER           = 0x000090e6
    30  	FERMI_CONTEXT_SHARE_A            = 0x00009067
    31  	FERMI_VASPACE_A                  = 0x000090f1
    32  	KEPLER_CHANNEL_GROUP_A           = 0x0000a06c
    33  	VOLTA_USERMODE_A                 = 0x0000c361
    34  	VOLTA_CHANNEL_GPFIFO_A           = 0x0000c36f
    35  	TURING_USERMODE_A                = 0x0000c461
    36  	TURING_CHANNEL_GPFIFO_A          = 0x0000c46f
    37  	AMPERE_CHANNEL_GPFIFO_A          = 0x0000c56f
    38  	TURING_DMA_COPY_A                = 0x0000c5b5
    39  	TURING_COMPUTE_A                 = 0x0000c5c0
    40  	HOPPER_USERMODE_A                = 0x0000c661
    41  	AMPERE_DMA_COPY_A                = 0x0000c6b5
    42  	AMPERE_COMPUTE_A                 = 0x0000c6c0
    43  	AMPERE_DMA_COPY_B                = 0x0000c7b5
    44  	AMPERE_COMPUTE_B                 = 0x0000c7c0
    45  	HOPPER_DMA_COPY_A                = 0x0000c8b5
    46  	ADA_COMPUTE_A                    = 0x0000c9c0
    47  	HOPPER_COMPUTE_A                 = 0x0000cbc0
    48  )
    49  
    50  // Class handles for older generations that are not supported by the open source
    51  // driver. Volta was the last such generation. These are defined in files under
    52  // src/common/sdk/nvidia/inc/class/.
    53  const (
    54  	VOLTA_COMPUTE_A  = 0x0000c3c0
    55  	VOLTA_DMA_COPY_A = 0x0000c3b5
    56  )
    57  
    58  // NV0005_ALLOC_PARAMETERS is the alloc params type for NV01_EVENT_OS_EVENT,
    59  // from src/common/sdk/nvidia/inc/class/cl0005.h.
    60  //
    61  // +marshal
    62  type NV0005_ALLOC_PARAMETERS struct {
    63  	HParentClient Handle
    64  	HSrcResource  Handle
    65  	HClass        uint32
    66  	NotifyIndex   uint32
    67  	Data          P64 // actually FD for NV01_EVENT_OS_EVENT, see src/nvidia/src/kernel/rmapi/event.c:eventConstruct_IMPL() => src/nvidia/arch/nvalloc/unix/src/os.c:osUserHandleToKernelPtr()
    68  }
    69  
    70  // NV0080_ALLOC_PARAMETERS is the alloc params type for NV01_DEVICE_0, from
    71  // src/common/sdk/nvidia/inc/class/cl0080.h.
    72  //
    73  // +marshal
    74  type NV0080_ALLOC_PARAMETERS struct {
    75  	DeviceID        uint32
    76  	HClientShare    Handle
    77  	HTargetClient   Handle
    78  	HTargetDevice   Handle
    79  	Flags           uint32
    80  	Pad0            [4]byte
    81  	VASpaceSize     uint64
    82  	VAStartInternal uint64
    83  	VALimitInternal uint64
    84  	VAMode          uint32
    85  	Pad1            [4]byte
    86  }
    87  
    88  // NV2080_ALLOC_PARAMETERS is the alloc params type for NV20_SUBDEVICE_0, from
    89  // src/common/sdk/nvidia/inc/class/cl2080.h.
    90  //
    91  // +marshal
    92  type NV2080_ALLOC_PARAMETERS struct {
    93  	SubDeviceID uint32
    94  }
    95  
    96  // NV503C_ALLOC_PARAMETERS is the alloc params type for NV50_THIRD_PARTY_P2P,
    97  // from src/common/sdk/nvidia/inc/class/cl503c.h.
    98  //
    99  // +marshal
   100  type NV503C_ALLOC_PARAMETERS struct {
   101  	Flags uint32
   102  }
   103  
   104  // NV83DE_ALLOC_PARAMETERS is the alloc params type for GT200_DEBUGGER,
   105  // from src/common/sdk/nvidia/inc/class/cl83de.h.
   106  //
   107  // +marshal
   108  type NV83DE_ALLOC_PARAMETERS struct {
   109  	HDebuggerClient_Obsolete Handle
   110  	HAppClient               Handle
   111  	HClass3DObject           Handle
   112  }
   113  
   114  // NV_CTXSHARE_ALLOCATION_PARAMETERS is the alloc params type for
   115  // FERMI_CONTEXT_SHARE_A, from src/common/sdk/nvidia/inc/nvos.h.
   116  //
   117  // +marshal
   118  type NV_CTXSHARE_ALLOCATION_PARAMETERS struct {
   119  	HVASpace Handle
   120  	Flags    uint32
   121  	SubctxID uint32
   122  }
   123  
   124  // NV_VASPACE_ALLOCATION_PARAMETERS is the alloc params type for
   125  // FERMI_VASPACE_A, from src/common/sdk/nvidia/inc/nvos.h.
   126  //
   127  // +marshal
   128  type NV_VASPACE_ALLOCATION_PARAMETERS struct {
   129  	Index           uint32
   130  	Flags           uint32
   131  	VASize          uint64
   132  	VAStartInternal uint64
   133  	VALimitInternal uint64
   134  	BigPageSize     uint32
   135  	Pad0            [4]byte
   136  	VABase          uint64
   137  }
   138  
   139  // NV_CHANNEL_GROUP_ALLOCATION_PARAMETERS is the alloc params type for
   140  // KEPLER_CHANNEL_GROUP_A, from src/common/sdk/nvidia/inc/nvos.h.
   141  //
   142  // +marshal
   143  type NV_CHANNEL_GROUP_ALLOCATION_PARAMETERS struct {
   144  	HObjectError                Handle
   145  	HObjectECCError             Handle
   146  	HVASpace                    Handle
   147  	EngineType                  uint32
   148  	BIsCallingContextVgpuPlugin uint8
   149  	Pad0                        [3]byte
   150  }
   151  
   152  // NV_MEMORY_DESC_PARAMS is from
   153  // src/common/sdk/nvidia/inc/alloc/alloc_channel.h.
   154  //
   155  // +marshal
   156  type NV_MEMORY_DESC_PARAMS struct {
   157  	Base         uint64
   158  	Size         uint64
   159  	AddressSpace uint32
   160  	CacheAttrib  uint32
   161  }
   162  
   163  // NV_CHANNEL_ALLOC_PARAMS is the alloc params type for TURING_CHANNEL_GPFIFO_A
   164  // and AMPERE_CHANNEL_GPFIFO_A, from
   165  // src/common/sdk/nvidia/inc/alloc/alloc_channel.h.
   166  //
   167  // +marshal
   168  type NV_CHANNEL_ALLOC_PARAMS struct {
   169  	HObjectError        Handle
   170  	HObjectBuffer       Handle
   171  	GPFIFOOffset        uint64
   172  	GPFIFOEntries       uint32
   173  	Flags               uint32
   174  	HContextShare       Handle
   175  	HVASpace            Handle
   176  	HUserdMemory        [NV_MAX_SUBDEVICES]Handle
   177  	UserdOffset         [NV_MAX_SUBDEVICES]uint64
   178  	EngineType          uint32
   179  	CID                 uint32
   180  	SubDeviceID         uint32
   181  	HObjectECCError     Handle
   182  	InstanceMem         NV_MEMORY_DESC_PARAMS
   183  	UserdMem            NV_MEMORY_DESC_PARAMS
   184  	RamfcMem            NV_MEMORY_DESC_PARAMS
   185  	MthdbufMem          NV_MEMORY_DESC_PARAMS
   186  	HPhysChannelGroup   Handle
   187  	InternalFlags       uint32
   188  	ErrorNotifierMem    NV_MEMORY_DESC_PARAMS
   189  	ECCErrorNotifierMem NV_MEMORY_DESC_PARAMS
   190  	ProcessID           uint32
   191  	SubProcessID        uint32
   192  }
   193  
   194  // NVB0B5_ALLOCATION_PARAMETERS is the alloc param type for TURING_DMA_COPY_A,
   195  // AMPERE_DMA_COPY_A, and AMPERE_DMA_COPY_B from
   196  // src/common/sdk/nvidia/inc/class/clb0b5sw.h.
   197  //
   198  // +marshal
   199  type NVB0B5_ALLOCATION_PARAMETERS struct {
   200  	Version    uint32
   201  	EngineType uint32
   202  }
   203  
   204  // NV_GR_ALLOCATION_PARAMETERS is the alloc param type for TURING_COMPUTE_A,
   205  // AMPERE_COMPUTE_A, and ADA_COMPUTE_A, from src/common/sdk/nvidia/inc/nvos.h.
   206  //
   207  // +marshal
   208  type NV_GR_ALLOCATION_PARAMETERS struct {
   209  	Version uint32
   210  	Flags   uint32
   211  	Size    uint32
   212  	Caps    uint32
   213  }
   214  
   215  // NV_HOPPER_USERMODE_A_PARAMS is the alloc param type for HOPPER_USERMODE_A,
   216  // from src/common/sdk/nvidia/inc/nvos.h.
   217  //
   218  // +marshal
   219  type NV_HOPPER_USERMODE_A_PARAMS struct {
   220  	Bar1Mapping uint8
   221  	Priv        uint8
   222  }