1 /* SPDX-License-Identifier: MIT */ 2 3 /* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. */ 4 5 #ifndef __NVRM_ENGINE_H__ 6 #define __NVRM_ENGINE_H__ 7 #include <nvrm/nvtypes.h> 8 9 /* Excerpt of RM headers from https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.113.01 */ 10 11 #define MC_ENGINE_IDX_NULL 0 // This must be 0 12 #define MC_ENGINE_IDX_TMR 1 13 #define MC_ENGINE_IDX_DISP 2 14 #define MC_ENGINE_IDX_FB 3 15 #define MC_ENGINE_IDX_FIFO 4 16 #define MC_ENGINE_IDX_VIDEO 5 17 #define MC_ENGINE_IDX_MD 6 18 #define MC_ENGINE_IDX_BUS 7 19 #define MC_ENGINE_IDX_PMGR 8 20 #define MC_ENGINE_IDX_VP2 9 21 #define MC_ENGINE_IDX_CIPHER 10 22 #define MC_ENGINE_IDX_BIF 11 23 #define MC_ENGINE_IDX_PPP 12 24 #define MC_ENGINE_IDX_PRIVRING 13 25 #define MC_ENGINE_IDX_PMU 14 26 #define MC_ENGINE_IDX_CE0 15 27 #define MC_ENGINE_IDX_CE1 16 28 #define MC_ENGINE_IDX_CE2 17 29 #define MC_ENGINE_IDX_CE3 18 30 #define MC_ENGINE_IDX_CE4 19 31 #define MC_ENGINE_IDX_CE5 20 32 #define MC_ENGINE_IDX_CE6 21 33 #define MC_ENGINE_IDX_CE7 22 34 #define MC_ENGINE_IDX_CE8 23 35 #define MC_ENGINE_IDX_CE9 24 36 #define MC_ENGINE_IDX_CE_MAX MC_ENGINE_IDX_CE9 37 #define MC_ENGINE_IDX_VIC 35 38 #define MC_ENGINE_IDX_ISOHUB 36 39 #define MC_ENGINE_IDX_VGPU 37 40 #define MC_ENGINE_IDX_MSENC 38 41 #define MC_ENGINE_IDX_MSENC1 39 42 #define MC_ENGINE_IDX_MSENC2 40 43 #define MC_ENGINE_IDX_C2C 41 44 #define MC_ENGINE_IDX_LTC 42 45 #define MC_ENGINE_IDX_FBHUB 43 46 #define MC_ENGINE_IDX_HDACODEC 44 47 #define MC_ENGINE_IDX_GMMU 45 48 #define MC_ENGINE_IDX_SEC2 46 49 #define MC_ENGINE_IDX_FSP 47 50 #define MC_ENGINE_IDX_NVLINK 48 51 #define MC_ENGINE_IDX_GSP 49 52 #define MC_ENGINE_IDX_NVJPG 50 53 #define MC_ENGINE_IDX_NVJPEG MC_ENGINE_IDX_NVJPG 54 #define MC_ENGINE_IDX_NVJPEG0 MC_ENGINE_IDX_NVJPEG 55 #define MC_ENGINE_IDX_NVJPEG1 51 56 #define MC_ENGINE_IDX_NVJPEG2 52 57 #define MC_ENGINE_IDX_NVJPEG3 53 58 #define MC_ENGINE_IDX_NVJPEG4 54 59 #define MC_ENGINE_IDX_NVJPEG5 55 60 #define MC_ENGINE_IDX_NVJPEG6 56 61 #define MC_ENGINE_IDX_NVJPEG7 57 62 #define MC_ENGINE_IDX_REPLAYABLE_FAULT 58 63 #define MC_ENGINE_IDX_ACCESS_CNTR 59 64 #define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT 60 65 #define MC_ENGINE_IDX_REPLAYABLE_FAULT_ERROR 61 66 #define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT_ERROR 62 67 #define MC_ENGINE_IDX_INFO_FAULT 63 68 #define MC_ENGINE_IDX_BSP 64 69 #define MC_ENGINE_IDX_NVDEC MC_ENGINE_IDX_BSP 70 #define MC_ENGINE_IDX_NVDEC0 MC_ENGINE_IDX_NVDEC 71 #define MC_ENGINE_IDX_NVDEC1 65 72 #define MC_ENGINE_IDX_NVDEC2 66 73 #define MC_ENGINE_IDX_NVDEC3 67 74 #define MC_ENGINE_IDX_NVDEC4 68 75 #define MC_ENGINE_IDX_NVDEC5 69 76 #define MC_ENGINE_IDX_NVDEC6 70 77 #define MC_ENGINE_IDX_NVDEC7 71 78 #define MC_ENGINE_IDX_CPU_DOORBELL 72 79 #define MC_ENGINE_IDX_PRIV_DOORBELL 73 80 #define MC_ENGINE_IDX_MMU_ECC_ERROR 74 81 #define MC_ENGINE_IDX_BLG 75 82 #define MC_ENGINE_IDX_PERFMON 76 83 #define MC_ENGINE_IDX_BUF_RESET 77 84 #define MC_ENGINE_IDX_XBAR 78 85 #define MC_ENGINE_IDX_ZPW 79 86 #define MC_ENGINE_IDX_OFA0 80 87 #define MC_ENGINE_IDX_TEGRA 81 88 #define MC_ENGINE_IDX_GR 82 89 #define MC_ENGINE_IDX_GR0 MC_ENGINE_IDX_GR 90 #define MC_ENGINE_IDX_GR1 83 91 #define MC_ENGINE_IDX_GR2 84 92 #define MC_ENGINE_IDX_GR3 85 93 #define MC_ENGINE_IDX_GR4 86 94 #define MC_ENGINE_IDX_GR5 87 95 #define MC_ENGINE_IDX_GR6 88 96 #define MC_ENGINE_IDX_GR7 89 97 #define MC_ENGINE_IDX_ESCHED 90 98 #define MC_ENGINE_IDX_ESCHED__SIZE 64 99 #define MC_ENGINE_IDX_GR_FECS_LOG 154 100 #define MC_ENGINE_IDX_GR0_FECS_LOG MC_ENGINE_IDX_GR_FECS_LOG 101 #define MC_ENGINE_IDX_GR1_FECS_LOG 155 102 #define MC_ENGINE_IDX_GR2_FECS_LOG 156 103 #define MC_ENGINE_IDX_GR3_FECS_LOG 157 104 #define MC_ENGINE_IDX_GR4_FECS_LOG 158 105 #define MC_ENGINE_IDX_GR5_FECS_LOG 159 106 #define MC_ENGINE_IDX_GR6_FECS_LOG 160 107 #define MC_ENGINE_IDX_GR7_FECS_LOG 161 108 #define MC_ENGINE_IDX_TMR_SWRL 162 109 #define MC_ENGINE_IDX_DISP_GSP 163 110 #define MC_ENGINE_IDX_REPLAYABLE_FAULT_CPU 164 111 #define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT_CPU 165 112 #define MC_ENGINE_IDX_PXUC 166 113 #define MC_ENGINE_IDX_MAX 167 // This must be kept as the max bit if 114 #define MC_ENGINE_IDX_INVALID 0xFFFFFFFF 115 #define MC_ENGINE_IDX_GRn(x) (MC_ENGINE_IDX_GR0 + (x)) 116 #define MC_ENGINE_IDX_GRn_FECS_LOG(x) (MC_ENGINE_IDX_GR0_FECS_LOG + (x)) 117 #define MC_ENGINE_IDX_CE(x) (MC_ENGINE_IDX_CE0 + (x)) 118 #define MC_ENGINE_IDX_MSENCn(x) (MC_ENGINE_IDX_MSENC + (x)) 119 #define MC_ENGINE_IDX_NVDECn(x) (MC_ENGINE_IDX_NVDEC + (x)) 120 #define MC_ENGINE_IDX_NVJPEGn(x) (MC_ENGINE_IDX_NVJPEG + (x)) 121 #define MC_ENGINE_IDX_ESCHEDn(x) (MC_ENGINE_IDX_ESCHED + (x)) 122 123 typedef enum 124 { 125 RM_ENGINE_TYPE_NULL = (0x00000000), 126 RM_ENGINE_TYPE_GR0 = (0x00000001), 127 RM_ENGINE_TYPE_GR1 = (0x00000002), 128 RM_ENGINE_TYPE_GR2 = (0x00000003), 129 RM_ENGINE_TYPE_GR3 = (0x00000004), 130 RM_ENGINE_TYPE_GR4 = (0x00000005), 131 RM_ENGINE_TYPE_GR5 = (0x00000006), 132 RM_ENGINE_TYPE_GR6 = (0x00000007), 133 RM_ENGINE_TYPE_GR7 = (0x00000008), 134 RM_ENGINE_TYPE_COPY0 = (0x00000009), 135 RM_ENGINE_TYPE_COPY1 = (0x0000000a), 136 RM_ENGINE_TYPE_COPY2 = (0x0000000b), 137 RM_ENGINE_TYPE_COPY3 = (0x0000000c), 138 RM_ENGINE_TYPE_COPY4 = (0x0000000d), 139 RM_ENGINE_TYPE_COPY5 = (0x0000000e), 140 RM_ENGINE_TYPE_COPY6 = (0x0000000f), 141 RM_ENGINE_TYPE_COPY7 = (0x00000010), 142 RM_ENGINE_TYPE_COPY8 = (0x00000011), 143 RM_ENGINE_TYPE_COPY9 = (0x00000012), 144 RM_ENGINE_TYPE_NVDEC0 = (0x0000001d), 145 RM_ENGINE_TYPE_NVDEC1 = (0x0000001e), 146 RM_ENGINE_TYPE_NVDEC2 = (0x0000001f), 147 RM_ENGINE_TYPE_NVDEC3 = (0x00000020), 148 RM_ENGINE_TYPE_NVDEC4 = (0x00000021), 149 RM_ENGINE_TYPE_NVDEC5 = (0x00000022), 150 RM_ENGINE_TYPE_NVDEC6 = (0x00000023), 151 RM_ENGINE_TYPE_NVDEC7 = (0x00000024), 152 RM_ENGINE_TYPE_NVENC0 = (0x00000025), 153 RM_ENGINE_TYPE_NVENC1 = (0x00000026), 154 RM_ENGINE_TYPE_NVENC2 = (0x00000027), 155 RM_ENGINE_TYPE_VP = (0x00000028), 156 RM_ENGINE_TYPE_ME = (0x00000029), 157 RM_ENGINE_TYPE_PPP = (0x0000002a), 158 RM_ENGINE_TYPE_MPEG = (0x0000002b), 159 RM_ENGINE_TYPE_SW = (0x0000002c), 160 RM_ENGINE_TYPE_TSEC = (0x0000002d), 161 RM_ENGINE_TYPE_VIC = (0x0000002e), 162 RM_ENGINE_TYPE_MP = (0x0000002f), 163 RM_ENGINE_TYPE_SEC2 = (0x00000030), 164 RM_ENGINE_TYPE_HOST = (0x00000031), 165 RM_ENGINE_TYPE_DPU = (0x00000032), 166 RM_ENGINE_TYPE_PMU = (0x00000033), 167 RM_ENGINE_TYPE_FBFLCN = (0x00000034), 168 RM_ENGINE_TYPE_NVJPEG0 = (0x00000035), 169 RM_ENGINE_TYPE_NVJPEG1 = (0x00000036), 170 RM_ENGINE_TYPE_NVJPEG2 = (0x00000037), 171 RM_ENGINE_TYPE_NVJPEG3 = (0x00000038), 172 RM_ENGINE_TYPE_NVJPEG4 = (0x00000039), 173 RM_ENGINE_TYPE_NVJPEG5 = (0x0000003a), 174 RM_ENGINE_TYPE_NVJPEG6 = (0x0000003b), 175 RM_ENGINE_TYPE_NVJPEG7 = (0x0000003c), 176 RM_ENGINE_TYPE_OFA = (0x0000003d), 177 RM_ENGINE_TYPE_LAST = (0x0000003e), 178 } RM_ENGINE_TYPE; 179 180 #define NV2080_ENGINE_TYPE_NULL (0x00000000) 181 #define NV2080_ENGINE_TYPE_GRAPHICS (0x00000001) 182 #define NV2080_ENGINE_TYPE_GR0 NV2080_ENGINE_TYPE_GRAPHICS 183 #define NV2080_ENGINE_TYPE_GR1 (0x00000002) 184 #define NV2080_ENGINE_TYPE_GR2 (0x00000003) 185 #define NV2080_ENGINE_TYPE_GR3 (0x00000004) 186 #define NV2080_ENGINE_TYPE_GR4 (0x00000005) 187 #define NV2080_ENGINE_TYPE_GR5 (0x00000006) 188 #define NV2080_ENGINE_TYPE_GR6 (0x00000007) 189 #define NV2080_ENGINE_TYPE_GR7 (0x00000008) 190 #define NV2080_ENGINE_TYPE_COPY0 (0x00000009) 191 #define NV2080_ENGINE_TYPE_COPY1 (0x0000000a) 192 #define NV2080_ENGINE_TYPE_COPY2 (0x0000000b) 193 #define NV2080_ENGINE_TYPE_COPY3 (0x0000000c) 194 #define NV2080_ENGINE_TYPE_COPY4 (0x0000000d) 195 #define NV2080_ENGINE_TYPE_COPY5 (0x0000000e) 196 #define NV2080_ENGINE_TYPE_COPY6 (0x0000000f) 197 #define NV2080_ENGINE_TYPE_COPY7 (0x00000010) 198 #define NV2080_ENGINE_TYPE_COPY8 (0x00000011) 199 #define NV2080_ENGINE_TYPE_COPY9 (0x00000012) 200 #define NV2080_ENGINE_TYPE_BSP (0x00000013) 201 #define NV2080_ENGINE_TYPE_NVDEC0 NV2080_ENGINE_TYPE_BSP 202 #define NV2080_ENGINE_TYPE_NVDEC1 (0x00000014) 203 #define NV2080_ENGINE_TYPE_NVDEC2 (0x00000015) 204 #define NV2080_ENGINE_TYPE_NVDEC3 (0x00000016) 205 #define NV2080_ENGINE_TYPE_NVDEC4 (0x00000017) 206 #define NV2080_ENGINE_TYPE_NVDEC5 (0x00000018) 207 #define NV2080_ENGINE_TYPE_NVDEC6 (0x00000019) 208 #define NV2080_ENGINE_TYPE_NVDEC7 (0x0000001a) 209 #define NV2080_ENGINE_TYPE_MSENC (0x0000001b) 210 #define NV2080_ENGINE_TYPE_NVENC0 NV2080_ENGINE_TYPE_MSENC /* Mutually exclusive alias */ 211 #define NV2080_ENGINE_TYPE_NVENC1 (0x0000001c) 212 #define NV2080_ENGINE_TYPE_NVENC2 (0x0000001d) 213 #define NV2080_ENGINE_TYPE_VP (0x0000001e) 214 #define NV2080_ENGINE_TYPE_ME (0x0000001f) 215 #define NV2080_ENGINE_TYPE_PPP (0x00000020) 216 #define NV2080_ENGINE_TYPE_MPEG (0x00000021) 217 #define NV2080_ENGINE_TYPE_SW (0x00000022) 218 #define NV2080_ENGINE_TYPE_CIPHER (0x00000023) 219 #define NV2080_ENGINE_TYPE_TSEC NV2080_ENGINE_TYPE_CIPHER 220 #define NV2080_ENGINE_TYPE_VIC (0x00000024) 221 #define NV2080_ENGINE_TYPE_MP (0x00000025) 222 #define NV2080_ENGINE_TYPE_SEC2 (0x00000026) 223 #define NV2080_ENGINE_TYPE_HOST (0x00000027) 224 #define NV2080_ENGINE_TYPE_DPU (0x00000028) 225 #define NV2080_ENGINE_TYPE_PMU (0x00000029) 226 #define NV2080_ENGINE_TYPE_FBFLCN (0x0000002a) 227 #define NV2080_ENGINE_TYPE_NVJPG (0x0000002b) 228 #define NV2080_ENGINE_TYPE_NVJPEG0 NV2080_ENGINE_TYPE_NVJPG 229 #define NV2080_ENGINE_TYPE_NVJPEG1 (0x0000002c) 230 #define NV2080_ENGINE_TYPE_NVJPEG2 (0x0000002d) 231 #define NV2080_ENGINE_TYPE_NVJPEG3 (0x0000002e) 232 #define NV2080_ENGINE_TYPE_NVJPEG4 (0x0000002f) 233 #define NV2080_ENGINE_TYPE_NVJPEG5 (0x00000030) 234 #define NV2080_ENGINE_TYPE_NVJPEG6 (0x00000031) 235 #define NV2080_ENGINE_TYPE_NVJPEG7 (0x00000032) 236 #define NV2080_ENGINE_TYPE_OFA (0x00000033) 237 #define NV2080_ENGINE_TYPE_LAST (0x0000003e) 238 #define NV2080_ENGINE_TYPE_ALLENGINES (0xffffffff) 239 #define NV2080_ENGINE_TYPE_COPY_SIZE 10 240 #define NV2080_ENGINE_TYPE_NVENC_SIZE 3 241 #define NV2080_ENGINE_TYPE_NVJPEG_SIZE 8 242 #define NV2080_ENGINE_TYPE_NVDEC_SIZE 8 243 #define NV2080_ENGINE_TYPE_GR_SIZE 8 244 #define NV2080_ENGINE_TYPE_COPY(i) (NV2080_ENGINE_TYPE_COPY0+(i)) 245 #define NV2080_ENGINE_TYPE_IS_COPY(i) (((i) >= NV2080_ENGINE_TYPE_COPY0) && ((i) <= NV2080_ENGINE_TYPE_COPY9)) 246 #define NV2080_ENGINE_TYPE_COPY_IDX(i) ((i) - NV2080_ENGINE_TYPE_COPY0) 247 #define NV2080_ENGINE_TYPE_NVENC(i) (NV2080_ENGINE_TYPE_NVENC0+(i)) 248 #define NV2080_ENGINE_TYPE_IS_NVENC(i) (((i) >= NV2080_ENGINE_TYPE_NVENC0) && ((i) < NV2080_ENGINE_TYPE_NVENC(NV2080_ENGINE_TYPE_NVENC_SIZE))) 249 #define NV2080_ENGINE_TYPE_NVENC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVENC0) 250 #define NV2080_ENGINE_TYPE_NVDEC(i) (NV2080_ENGINE_TYPE_NVDEC0+(i)) 251 #define NV2080_ENGINE_TYPE_IS_NVDEC(i) (((i) >= NV2080_ENGINE_TYPE_NVDEC0) && ((i) < NV2080_ENGINE_TYPE_NVDEC(NV2080_ENGINE_TYPE_NVDEC_SIZE))) 252 #define NV2080_ENGINE_TYPE_NVDEC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVDEC0) 253 #define NV2080_ENGINE_TYPE_NVJPEG(i) (NV2080_ENGINE_TYPE_NVJPEG0+(i)) 254 #define NV2080_ENGINE_TYPE_IS_NVJPEG(i) (((i) >= NV2080_ENGINE_TYPE_NVJPEG0) && ((i) < NV2080_ENGINE_TYPE_NVJPEG(NV2080_ENGINE_TYPE_NVJPEG_SIZE))) 255 #define NV2080_ENGINE_TYPE_NVJPEG_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVJPEG0) 256 #define NV2080_ENGINE_TYPE_GR(i) (NV2080_ENGINE_TYPE_GR0 + (i)) 257 #define NV2080_ENGINE_TYPE_IS_GR(i) (((i) >= NV2080_ENGINE_TYPE_GR0) && ((i) < NV2080_ENGINE_TYPE_GR(NV2080_ENGINE_TYPE_GR_SIZE))) 258 #define NV2080_ENGINE_TYPE_GR_IDX(i) ((i) - NV2080_ENGINE_TYPE_GR0) 259 #define NV2080_ENGINE_TYPE_IS_VALID(i) (((i) > (NV2080_ENGINE_TYPE_NULL)) && ((i) < (NV2080_ENGINE_TYPE_LAST))) 260 #endif 261