Contributors: 2
Author Tokens Token Proportion Commits Commit Proportion
Ben Skeggs 1172 99.91% 14 93.33%
Dave Airlie 1 0.09% 1 6.67%
Total 1173 15


/* SPDX-License-Identifier: MIT */

/* Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. */

#ifndef __NVRM_ENGINE_H__
#define __NVRM_ENGINE_H__
#include <nvrm/nvtypes.h>

/* Excerpt of RM headers from https://github.com/NVIDIA/open-gpu-kernel-modules/tree/535.113.01 */

#define MC_ENGINE_IDX_NULL                          0 // This must be 0
#define MC_ENGINE_IDX_TMR                           1
#define MC_ENGINE_IDX_DISP                          2
#define MC_ENGINE_IDX_FB                            3
#define MC_ENGINE_IDX_FIFO                          4
#define MC_ENGINE_IDX_VIDEO                         5
#define MC_ENGINE_IDX_MD                            6
#define MC_ENGINE_IDX_BUS                           7
#define MC_ENGINE_IDX_PMGR                          8
#define MC_ENGINE_IDX_VP2                           9
#define MC_ENGINE_IDX_CIPHER                        10
#define MC_ENGINE_IDX_BIF                           11
#define MC_ENGINE_IDX_PPP                           12
#define MC_ENGINE_IDX_PRIVRING                      13
#define MC_ENGINE_IDX_PMU                           14
#define MC_ENGINE_IDX_CE0                           15
#define MC_ENGINE_IDX_CE1                           16
#define MC_ENGINE_IDX_CE2                           17
#define MC_ENGINE_IDX_CE3                           18
#define MC_ENGINE_IDX_CE4                           19
#define MC_ENGINE_IDX_CE5                           20
#define MC_ENGINE_IDX_CE6                           21
#define MC_ENGINE_IDX_CE7                           22
#define MC_ENGINE_IDX_CE8                           23
#define MC_ENGINE_IDX_CE9                           24
#define MC_ENGINE_IDX_CE_MAX                        MC_ENGINE_IDX_CE9
#define MC_ENGINE_IDX_VIC                           35
#define MC_ENGINE_IDX_ISOHUB                        36
#define MC_ENGINE_IDX_VGPU                          37
#define MC_ENGINE_IDX_MSENC                         38
#define MC_ENGINE_IDX_MSENC1                        39
#define MC_ENGINE_IDX_MSENC2                        40
#define MC_ENGINE_IDX_C2C                           41
#define MC_ENGINE_IDX_LTC                           42
#define MC_ENGINE_IDX_FBHUB                         43
#define MC_ENGINE_IDX_HDACODEC                      44
#define MC_ENGINE_IDX_GMMU                          45
#define MC_ENGINE_IDX_SEC2                          46
#define MC_ENGINE_IDX_FSP                           47
#define MC_ENGINE_IDX_NVLINK                        48
#define MC_ENGINE_IDX_GSP                           49
#define MC_ENGINE_IDX_NVJPG                         50
#define MC_ENGINE_IDX_NVJPEG                        MC_ENGINE_IDX_NVJPG
#define MC_ENGINE_IDX_NVJPEG0                       MC_ENGINE_IDX_NVJPEG
#define MC_ENGINE_IDX_NVJPEG1                       51
#define MC_ENGINE_IDX_NVJPEG2                       52
#define MC_ENGINE_IDX_NVJPEG3                       53
#define MC_ENGINE_IDX_NVJPEG4                       54
#define MC_ENGINE_IDX_NVJPEG5                       55
#define MC_ENGINE_IDX_NVJPEG6                       56
#define MC_ENGINE_IDX_NVJPEG7                       57
#define MC_ENGINE_IDX_REPLAYABLE_FAULT              58
#define MC_ENGINE_IDX_ACCESS_CNTR                   59
#define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT          60
#define MC_ENGINE_IDX_REPLAYABLE_FAULT_ERROR        61
#define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT_ERROR    62
#define MC_ENGINE_IDX_INFO_FAULT                    63
#define MC_ENGINE_IDX_BSP                           64
#define MC_ENGINE_IDX_NVDEC                         MC_ENGINE_IDX_BSP
#define MC_ENGINE_IDX_NVDEC0                        MC_ENGINE_IDX_NVDEC
#define MC_ENGINE_IDX_NVDEC1                        65
#define MC_ENGINE_IDX_NVDEC2                        66
#define MC_ENGINE_IDX_NVDEC3                        67
#define MC_ENGINE_IDX_NVDEC4                        68
#define MC_ENGINE_IDX_NVDEC5                        69
#define MC_ENGINE_IDX_NVDEC6                        70
#define MC_ENGINE_IDX_NVDEC7                        71
#define MC_ENGINE_IDX_CPU_DOORBELL                  72
#define MC_ENGINE_IDX_PRIV_DOORBELL                 73
#define MC_ENGINE_IDX_MMU_ECC_ERROR                 74
#define MC_ENGINE_IDX_BLG                           75
#define MC_ENGINE_IDX_PERFMON                       76
#define MC_ENGINE_IDX_BUF_RESET                     77
#define MC_ENGINE_IDX_XBAR                          78
#define MC_ENGINE_IDX_ZPW                           79
#define MC_ENGINE_IDX_OFA0                          80
#define MC_ENGINE_IDX_TEGRA                         81
#define MC_ENGINE_IDX_GR                            82
#define MC_ENGINE_IDX_GR0                           MC_ENGINE_IDX_GR
#define MC_ENGINE_IDX_GR1                           83
#define MC_ENGINE_IDX_GR2                           84
#define MC_ENGINE_IDX_GR3                           85
#define MC_ENGINE_IDX_GR4                           86
#define MC_ENGINE_IDX_GR5                           87
#define MC_ENGINE_IDX_GR6                           88
#define MC_ENGINE_IDX_GR7                           89
#define MC_ENGINE_IDX_ESCHED                        90
#define MC_ENGINE_IDX_ESCHED__SIZE                  64
#define MC_ENGINE_IDX_GR_FECS_LOG                   154
#define MC_ENGINE_IDX_GR0_FECS_LOG                  MC_ENGINE_IDX_GR_FECS_LOG
#define MC_ENGINE_IDX_GR1_FECS_LOG                  155
#define MC_ENGINE_IDX_GR2_FECS_LOG                  156
#define MC_ENGINE_IDX_GR3_FECS_LOG                  157
#define MC_ENGINE_IDX_GR4_FECS_LOG                  158
#define MC_ENGINE_IDX_GR5_FECS_LOG                  159
#define MC_ENGINE_IDX_GR6_FECS_LOG                  160
#define MC_ENGINE_IDX_GR7_FECS_LOG                  161
#define MC_ENGINE_IDX_TMR_SWRL                      162
#define MC_ENGINE_IDX_DISP_GSP                      163
#define MC_ENGINE_IDX_REPLAYABLE_FAULT_CPU          164
#define MC_ENGINE_IDX_NON_REPLAYABLE_FAULT_CPU      165
#define MC_ENGINE_IDX_PXUC                          166
#define MC_ENGINE_IDX_MAX                           167 // This must be kept as the max bit if
#define MC_ENGINE_IDX_INVALID                0xFFFFFFFF
#define MC_ENGINE_IDX_GRn(x)            (MC_ENGINE_IDX_GR0 + (x))
#define MC_ENGINE_IDX_GRn_FECS_LOG(x)   (MC_ENGINE_IDX_GR0_FECS_LOG + (x))
#define MC_ENGINE_IDX_CE(x)             (MC_ENGINE_IDX_CE0 + (x))
#define MC_ENGINE_IDX_MSENCn(x)         (MC_ENGINE_IDX_MSENC + (x))
#define MC_ENGINE_IDX_NVDECn(x)         (MC_ENGINE_IDX_NVDEC + (x))
#define MC_ENGINE_IDX_NVJPEGn(x)        (MC_ENGINE_IDX_NVJPEG + (x))
#define MC_ENGINE_IDX_ESCHEDn(x)        (MC_ENGINE_IDX_ESCHED + (x))

typedef enum
{
    RM_ENGINE_TYPE_NULL                 =       (0x00000000),
    RM_ENGINE_TYPE_GR0                  =       (0x00000001),
    RM_ENGINE_TYPE_GR1                  =       (0x00000002),
    RM_ENGINE_TYPE_GR2                  =       (0x00000003),
    RM_ENGINE_TYPE_GR3                  =       (0x00000004),
    RM_ENGINE_TYPE_GR4                  =       (0x00000005),
    RM_ENGINE_TYPE_GR5                  =       (0x00000006),
    RM_ENGINE_TYPE_GR6                  =       (0x00000007),
    RM_ENGINE_TYPE_GR7                  =       (0x00000008),
    RM_ENGINE_TYPE_COPY0                =       (0x00000009),
    RM_ENGINE_TYPE_COPY1                =       (0x0000000a),
    RM_ENGINE_TYPE_COPY2                =       (0x0000000b),
    RM_ENGINE_TYPE_COPY3                =       (0x0000000c),
    RM_ENGINE_TYPE_COPY4                =       (0x0000000d),
    RM_ENGINE_TYPE_COPY5                =       (0x0000000e),
    RM_ENGINE_TYPE_COPY6                =       (0x0000000f),
    RM_ENGINE_TYPE_COPY7                =       (0x00000010),
    RM_ENGINE_TYPE_COPY8                =       (0x00000011),
    RM_ENGINE_TYPE_COPY9                =       (0x00000012),
    RM_ENGINE_TYPE_NVDEC0               =       (0x0000001d),
    RM_ENGINE_TYPE_NVDEC1               =       (0x0000001e),
    RM_ENGINE_TYPE_NVDEC2               =       (0x0000001f),
    RM_ENGINE_TYPE_NVDEC3               =       (0x00000020),
    RM_ENGINE_TYPE_NVDEC4               =       (0x00000021),
    RM_ENGINE_TYPE_NVDEC5               =       (0x00000022),
    RM_ENGINE_TYPE_NVDEC6               =       (0x00000023),
    RM_ENGINE_TYPE_NVDEC7               =       (0x00000024),
    RM_ENGINE_TYPE_NVENC0               =       (0x00000025),
    RM_ENGINE_TYPE_NVENC1               =       (0x00000026),
    RM_ENGINE_TYPE_NVENC2               =       (0x00000027),
    RM_ENGINE_TYPE_VP                   =       (0x00000028),
    RM_ENGINE_TYPE_ME                   =       (0x00000029),
    RM_ENGINE_TYPE_PPP                  =       (0x0000002a),
    RM_ENGINE_TYPE_MPEG                 =       (0x0000002b),
    RM_ENGINE_TYPE_SW                   =       (0x0000002c),
    RM_ENGINE_TYPE_TSEC                 =       (0x0000002d),
    RM_ENGINE_TYPE_VIC                  =       (0x0000002e),
    RM_ENGINE_TYPE_MP                   =       (0x0000002f),
    RM_ENGINE_TYPE_SEC2                 =       (0x00000030),
    RM_ENGINE_TYPE_HOST                 =       (0x00000031),
    RM_ENGINE_TYPE_DPU                  =       (0x00000032),
    RM_ENGINE_TYPE_PMU                  =       (0x00000033),
    RM_ENGINE_TYPE_FBFLCN               =       (0x00000034),
    RM_ENGINE_TYPE_NVJPEG0              =       (0x00000035),
    RM_ENGINE_TYPE_NVJPEG1              =       (0x00000036),
    RM_ENGINE_TYPE_NVJPEG2              =       (0x00000037),
    RM_ENGINE_TYPE_NVJPEG3              =       (0x00000038),
    RM_ENGINE_TYPE_NVJPEG4              =       (0x00000039),
    RM_ENGINE_TYPE_NVJPEG5              =       (0x0000003a),
    RM_ENGINE_TYPE_NVJPEG6              =       (0x0000003b),
    RM_ENGINE_TYPE_NVJPEG7              =       (0x0000003c),
    RM_ENGINE_TYPE_OFA                  =       (0x0000003d),
    RM_ENGINE_TYPE_LAST                 =       (0x0000003e),
} RM_ENGINE_TYPE;

#define NV2080_ENGINE_TYPE_NULL                       (0x00000000)
#define NV2080_ENGINE_TYPE_GRAPHICS                   (0x00000001)
#define NV2080_ENGINE_TYPE_GR0                        NV2080_ENGINE_TYPE_GRAPHICS
#define NV2080_ENGINE_TYPE_GR1                        (0x00000002)
#define NV2080_ENGINE_TYPE_GR2                        (0x00000003)
#define NV2080_ENGINE_TYPE_GR3                        (0x00000004)
#define NV2080_ENGINE_TYPE_GR4                        (0x00000005)
#define NV2080_ENGINE_TYPE_GR5                        (0x00000006)
#define NV2080_ENGINE_TYPE_GR6                        (0x00000007)
#define NV2080_ENGINE_TYPE_GR7                        (0x00000008)
#define NV2080_ENGINE_TYPE_COPY0                      (0x00000009)
#define NV2080_ENGINE_TYPE_COPY1                      (0x0000000a)
#define NV2080_ENGINE_TYPE_COPY2                      (0x0000000b)
#define NV2080_ENGINE_TYPE_COPY3                      (0x0000000c)
#define NV2080_ENGINE_TYPE_COPY4                      (0x0000000d)
#define NV2080_ENGINE_TYPE_COPY5                      (0x0000000e)
#define NV2080_ENGINE_TYPE_COPY6                      (0x0000000f)
#define NV2080_ENGINE_TYPE_COPY7                      (0x00000010)
#define NV2080_ENGINE_TYPE_COPY8                      (0x00000011)
#define NV2080_ENGINE_TYPE_COPY9                      (0x00000012)
#define NV2080_ENGINE_TYPE_BSP                        (0x00000013)
#define NV2080_ENGINE_TYPE_NVDEC0                     NV2080_ENGINE_TYPE_BSP
#define NV2080_ENGINE_TYPE_NVDEC1                     (0x00000014)
#define NV2080_ENGINE_TYPE_NVDEC2                     (0x00000015)
#define NV2080_ENGINE_TYPE_NVDEC3                     (0x00000016)
#define NV2080_ENGINE_TYPE_NVDEC4                     (0x00000017)
#define NV2080_ENGINE_TYPE_NVDEC5                     (0x00000018)
#define NV2080_ENGINE_TYPE_NVDEC6                     (0x00000019)
#define NV2080_ENGINE_TYPE_NVDEC7                     (0x0000001a)
#define NV2080_ENGINE_TYPE_MSENC                      (0x0000001b)
#define NV2080_ENGINE_TYPE_NVENC0                      NV2080_ENGINE_TYPE_MSENC  /* Mutually exclusive alias */
#define NV2080_ENGINE_TYPE_NVENC1                     (0x0000001c)
#define NV2080_ENGINE_TYPE_NVENC2                     (0x0000001d)
#define NV2080_ENGINE_TYPE_VP                         (0x0000001e)
#define NV2080_ENGINE_TYPE_ME                         (0x0000001f)
#define NV2080_ENGINE_TYPE_PPP                        (0x00000020)
#define NV2080_ENGINE_TYPE_MPEG                       (0x00000021)
#define NV2080_ENGINE_TYPE_SW                         (0x00000022)
#define NV2080_ENGINE_TYPE_CIPHER                     (0x00000023)
#define NV2080_ENGINE_TYPE_TSEC                       NV2080_ENGINE_TYPE_CIPHER
#define NV2080_ENGINE_TYPE_VIC                        (0x00000024)
#define NV2080_ENGINE_TYPE_MP                         (0x00000025)
#define NV2080_ENGINE_TYPE_SEC2                       (0x00000026)
#define NV2080_ENGINE_TYPE_HOST                       (0x00000027)
#define NV2080_ENGINE_TYPE_DPU                        (0x00000028)
#define NV2080_ENGINE_TYPE_PMU                        (0x00000029)
#define NV2080_ENGINE_TYPE_FBFLCN                     (0x0000002a)
#define NV2080_ENGINE_TYPE_NVJPG                      (0x0000002b)
#define NV2080_ENGINE_TYPE_NVJPEG0                     NV2080_ENGINE_TYPE_NVJPG
#define NV2080_ENGINE_TYPE_NVJPEG1                    (0x0000002c)
#define NV2080_ENGINE_TYPE_NVJPEG2                    (0x0000002d)
#define NV2080_ENGINE_TYPE_NVJPEG3                    (0x0000002e)
#define NV2080_ENGINE_TYPE_NVJPEG4                    (0x0000002f)
#define NV2080_ENGINE_TYPE_NVJPEG5                    (0x00000030)
#define NV2080_ENGINE_TYPE_NVJPEG6                    (0x00000031)
#define NV2080_ENGINE_TYPE_NVJPEG7                    (0x00000032)
#define NV2080_ENGINE_TYPE_OFA                        (0x00000033)
#define NV2080_ENGINE_TYPE_LAST                       (0x0000003e)
#define NV2080_ENGINE_TYPE_ALLENGINES                 (0xffffffff)
#define NV2080_ENGINE_TYPE_COPY_SIZE 10
#define NV2080_ENGINE_TYPE_NVENC_SIZE 3
#define NV2080_ENGINE_TYPE_NVJPEG_SIZE 8
#define NV2080_ENGINE_TYPE_NVDEC_SIZE 8
#define NV2080_ENGINE_TYPE_GR_SIZE 8
#define NV2080_ENGINE_TYPE_COPY(i)     (NV2080_ENGINE_TYPE_COPY0+(i))
#define NV2080_ENGINE_TYPE_IS_COPY(i)  (((i) >= NV2080_ENGINE_TYPE_COPY0) && ((i) <= NV2080_ENGINE_TYPE_COPY9))
#define NV2080_ENGINE_TYPE_COPY_IDX(i) ((i) - NV2080_ENGINE_TYPE_COPY0)
#define NV2080_ENGINE_TYPE_NVENC(i)    (NV2080_ENGINE_TYPE_NVENC0+(i))
#define NV2080_ENGINE_TYPE_IS_NVENC(i)  (((i) >= NV2080_ENGINE_TYPE_NVENC0) && ((i) < NV2080_ENGINE_TYPE_NVENC(NV2080_ENGINE_TYPE_NVENC_SIZE)))
#define NV2080_ENGINE_TYPE_NVENC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVENC0)
#define NV2080_ENGINE_TYPE_NVDEC(i)    (NV2080_ENGINE_TYPE_NVDEC0+(i))
#define NV2080_ENGINE_TYPE_IS_NVDEC(i)  (((i) >= NV2080_ENGINE_TYPE_NVDEC0) && ((i) < NV2080_ENGINE_TYPE_NVDEC(NV2080_ENGINE_TYPE_NVDEC_SIZE)))
#define NV2080_ENGINE_TYPE_NVDEC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVDEC0)
#define NV2080_ENGINE_TYPE_NVJPEG(i)    (NV2080_ENGINE_TYPE_NVJPEG0+(i))
#define NV2080_ENGINE_TYPE_IS_NVJPEG(i)  (((i) >= NV2080_ENGINE_TYPE_NVJPEG0) && ((i) < NV2080_ENGINE_TYPE_NVJPEG(NV2080_ENGINE_TYPE_NVJPEG_SIZE)))
#define NV2080_ENGINE_TYPE_NVJPEG_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVJPEG0)
#define NV2080_ENGINE_TYPE_GR(i)       (NV2080_ENGINE_TYPE_GR0 + (i))
#define NV2080_ENGINE_TYPE_IS_GR(i)    (((i) >= NV2080_ENGINE_TYPE_GR0) && ((i) < NV2080_ENGINE_TYPE_GR(NV2080_ENGINE_TYPE_GR_SIZE)))
#define NV2080_ENGINE_TYPE_GR_IDX(i)   ((i) - NV2080_ENGINE_TYPE_GR0)
#define NV2080_ENGINE_TYPE_IS_VALID(i) (((i) > (NV2080_ENGINE_TYPE_NULL)) && ((i) < (NV2080_ENGINE_TYPE_LAST)))
#endif