// This file is automatically generated by rmconfig - DO NOT EDIT!
//
// HAL support for use in HAL setup
//
// Profile:  shipping-gpus-openrm
// Template: templates/gt_hal.h
//

#ifndef _G_RMCFG_HAL_H_
#define _G_RMCFG_HAL_H_


typedef struct DISP_HAL_IFACES    *PDISP_HAL_IFACES;
typedef struct DPU_HAL_IFACES     *PDPU_HAL_IFACES;
typedef struct RPC_HAL_IFACES     *PRPC_HAL_IFACES;
typedef struct RPCSTRUCTURECOPY_HAL_IFACES *PRPCSTRUCTURECOPY_HAL_IFACES;



//
// per-GPU list of function ptrs to setup iface for each engine
//

typedef struct {

    void (*rpcHalIfacesSetupFn)(PRPC_HAL_IFACES pRpcHal);
    void (*rpcstructurecopyHalIfacesSetupFn)(PRPCSTRUCTURECOPY_HAL_IFACES pRpcstructurecopyHal);

} HAL_IFACE_SETUP, *PHAL_IFACE_SETUP;



//
// IP_VERSIONS support
//

typedef struct IGRP_IP_VERSIONS_TABLE_INFO IGRP_IP_VERSIONS_TABLE_INFO;

// generic form of Head_iGrp_ipVersions_getInfo typedef

typedef void      IGrp_ipVersions_install(IGRP_IP_VERSIONS_TABLE_INFO *);
typedef NV_STATUS  IGrp_ipVersions_wrapup(IGRP_IP_VERSIONS_TABLE_INFO *);

// a single inclusive version range
typedef struct {
    NvU32  v0;
    NvU32  v1;
} IGRP_IP_VERSION_RANGE;


typedef struct {
    const IGRP_IP_VERSION_RANGE   *pRanges;
    NvU32                          numRanges;
    IGrp_ipVersions_install       *ifacesInstallFn;
} IGRP_IP_VERSIONS_ENTRY;


struct IGRP_IP_VERSIONS_TABLE_INFO {
    POBJGPU                       pGpu;
    Dynamic                      *pDynamic;             // eg: pBiff

    const IGRP_IP_VERSIONS_ENTRY *pTable;
    NvU32                         numEntries;
    IGrp_ipVersions_wrapup       *ifacesWrapupFn;       // overrides and asserts
};

// HAL_IMPLEMENTATION enum
typedef enum
{
    HAL_IMPL_GF100,
    HAL_IMPL_GF100B,
    HAL_IMPL_GF104,
    HAL_IMPL_GF104B,
    HAL_IMPL_GF106,
    HAL_IMPL_GF106B,
    HAL_IMPL_GF108,
    HAL_IMPL_GF110D,
    HAL_IMPL_GF110,
    HAL_IMPL_GF117,
    HAL_IMPL_GF118,
    HAL_IMPL_GF119,
    HAL_IMPL_GF110F,
    HAL_IMPL_GF110F2,
    HAL_IMPL_GF110F3,
    HAL_IMPL_GK104,
    HAL_IMPL_GK106,
    HAL_IMPL_GK107,
    HAL_IMPL_GK20A,
    HAL_IMPL_GK110,
    HAL_IMPL_GK110B,
    HAL_IMPL_GK110C,
    HAL_IMPL_GK208,
    HAL_IMPL_GK208S,
    HAL_IMPL_GM107,
    HAL_IMPL_GM108,
    HAL_IMPL_GM200,
    HAL_IMPL_GM204,
    HAL_IMPL_GM206,
    HAL_IMPL_GP100,
    HAL_IMPL_GP102,
    HAL_IMPL_GP104,
    HAL_IMPL_GP106,
    HAL_IMPL_GP107,
    HAL_IMPL_GP108,
    HAL_IMPL_GV100,
    HAL_IMPL_GV11B,
    HAL_IMPL_TU102,
    HAL_IMPL_TU104,
    HAL_IMPL_TU106,
    HAL_IMPL_TU116,
    HAL_IMPL_TU117,
    HAL_IMPL_GA100,
    HAL_IMPL_GA102,
    HAL_IMPL_GA103,
    HAL_IMPL_GA104,
    HAL_IMPL_GA106,
    HAL_IMPL_GA107,
    HAL_IMPL_GA10B,
    HAL_IMPL_GA102F,
    HAL_IMPL_AD102,
    HAL_IMPL_AD103,
    HAL_IMPL_AD104,
    HAL_IMPL_AD106,
    HAL_IMPL_AD107,
    HAL_IMPL_GH100,
    HAL_IMPL_GB100,
    HAL_IMPL_GB102,
    HAL_IMPL_GB10B,
    HAL_IMPL_GB110,
    HAL_IMPL_GB112,
    HAL_IMPL_GB202,
    HAL_IMPL_GB203,
    HAL_IMPL_GB205,
    HAL_IMPL_GB206,
    HAL_IMPL_GB207,
    HAL_IMPL_GB20B,
    HAL_IMPL_GB20C,
    HAL_IMPL_GR100,
    HAL_IMPL_GR102,
    HAL_IMPL_T001_FERMI_NOT_EXIST,
    HAL_IMPL_T124,
    HAL_IMPL_T132,
    HAL_IMPL_T210,
    HAL_IMPL_T186,
    HAL_IMPL_T194,
    HAL_IMPL_T002_TURING_NOT_EXIST,
    HAL_IMPL_T234,
    HAL_IMPL_T003_ADA_NOT_EXIST,
    HAL_IMPL_T004_HOPPER_NOT_EXIST,
    HAL_IMPL_T234D,
    HAL_IMPL_T239D,
    HAL_IMPL_T264D,
    HAL_IMPL_AMODEL,

    HAL_IMPL_MAXIMUM,       // NOTE: this symbol must be at the end of the enum list.
                            // It is used to allocate arrays and control loop iterations.
} HAL_IMPLEMENTATION;

//
// HAL implementation names for debug & logging use
//
#define HAL_IMPL_NAME_LIST \
    { HAL_IMPL_TU102, "TU102" }, \
    { HAL_IMPL_TU104, "TU104" }, \
    { HAL_IMPL_TU106, "TU106" }, \
    { HAL_IMPL_TU116, "TU116" }, \
    { HAL_IMPL_TU117, "TU117" }, \
    { HAL_IMPL_GA100, "GA100" }, \
    { HAL_IMPL_GA102, "GA102" }, \
    { HAL_IMPL_GA103, "GA103" }, \
    { HAL_IMPL_GA104, "GA104" }, \
    { HAL_IMPL_GA106, "GA106" }, \
    { HAL_IMPL_GA107, "GA107" }, \
    { HAL_IMPL_AD102, "AD102" }, \
    { HAL_IMPL_AD103, "AD103" }, \
    { HAL_IMPL_AD104, "AD104" }, \
    { HAL_IMPL_AD106, "AD106" }, \
    { HAL_IMPL_AD107, "AD107" }, \
    { HAL_IMPL_GH100, "GH100" }, \
    { HAL_IMPL_GB100, "GB100" }, \
    { HAL_IMPL_GB102, "GB102" }, \
    { HAL_IMPL_GB10B, "GB10B" }, \
    { HAL_IMPL_GB110, "GB110" }, \
    { HAL_IMPL_GB112, "GB112" }, \
    { HAL_IMPL_GB202, "GB202" }, \
    { HAL_IMPL_GB203, "GB203" }, \
    { HAL_IMPL_GB205, "GB205" }, \
    { HAL_IMPL_GB206, "GB206" }, \
    { HAL_IMPL_GB207, "GB207" }, \
    { HAL_IMPL_GB20B, "GB20B" }, \
    { HAL_IMPL_GB20C, "GB20C" }, \
    { HAL_IMPL_GR100, "GR100" }, \
    { HAL_IMPL_GR102, "GR102" }, \
    { HAL_IMPL_T234D, "T234D" }, \
    { HAL_IMPL_T239D, "T239D" }, \
    { HAL_IMPL_T264D, "T264D" }


#endif  // _G_RMCFG_HAL_H_
