compute-runtime/shared/source/os_interface/linux/drm_wrappers.h

304 lines
5.4 KiB
C++

/*
* Copyright (C) 2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include <cstddef>
#include <cstdint>
#include <string>
namespace NEO {
class IoctlHelper;
struct RegisterRead {
uint64_t offset;
uint64_t value;
};
struct ExecObject {
uint8_t data[56];
};
struct ExecBuffer {
uint8_t data[64];
};
struct GemCreate {
uint64_t size;
uint32_t handle;
};
struct GemUserPtr {
uint64_t userPtr;
uint64_t userSize;
uint32_t flags;
uint32_t handle;
};
struct GemSetTiling {
uint32_t handle;
uint32_t tilingMode;
uint32_t stride;
uint32_t swizzleMode;
};
struct GemGetTiling {
uint32_t handle;
uint32_t tilingMode;
uint32_t swizzleMode;
uint32_t physSwizzleMode;
};
struct QueryItem {
uint64_t queryId;
int32_t length;
uint32_t flags;
uint64_t dataPtr;
};
struct EngineClassInstance {
uint16_t engineClass;
uint16_t engineInstance;
};
struct GemContextParamSseu {
EngineClassInstance engine;
uint32_t flags;
uint64_t sliceMask;
uint64_t subsliceMask;
uint16_t minEusPerSubslice;
uint16_t maxEusPerSubslice;
};
struct QueryTopologyInfo {
uint16_t flags;
uint16_t maxSlices;
uint16_t maxSubslices;
uint16_t maxEusPerSubslice;
uint16_t subsliceOffset;
uint16_t subsliceStride;
uint16_t euOffset;
uint16_t euStride;
uint8_t data[];
};
struct MemoryClassInstance {
uint16_t memoryClass;
uint16_t memoryInstance;
};
struct GemMmapOffset {
uint32_t handle;
uint32_t pad;
uint64_t offset;
uint64_t flags;
uint64_t extensions;
};
struct GemSetDomain {
uint32_t handle;
uint32_t readDomains;
uint32_t writeDomain;
};
struct GemContextParam {
uint32_t contextId;
uint32_t size;
uint64_t param;
uint64_t value;
};
struct DrmUserExtension {
uint64_t nextExtension;
uint32_t name;
uint32_t flags;
uint32_t reserved[4];
};
struct GemContextCreateExtSetParam {
DrmUserExtension base;
GemContextParam param;
};
struct GemContextCreateExt {
uint32_t contextId;
uint32_t flags;
uint64_t extensions;
};
struct GemContextDestroy {
uint32_t contextId;
uint32_t reserved;
};
struct GemVmControl {
uint64_t extensions;
uint32_t flags;
uint32_t vmId;
};
struct GemWait {
uint32_t boHandle;
uint32_t flags;
int64_t timeoutNs;
};
struct ResetStats {
uint32_t contextId;
uint32_t flags;
uint32_t resetCount;
uint32_t batchActive;
uint32_t batchPending;
uint32_t reserved;
};
struct GetParam {
int32_t param;
int *value;
};
struct Query {
uint32_t numItems;
uint32_t flags;
uint64_t itemsPtr;
};
struct GemClose {
uint32_t handle;
uint32_t reserved;
};
struct PrimeHandle {
uint32_t handle;
uint32_t flags;
int32_t fileDescriptor;
};
#pragma pack(1)
template <uint32_t numEngines>
struct ContextParamEngines {
uint64_t extensions;
EngineClassInstance engines[numEngines];
};
template <uint32_t numEngines>
struct ContextEnginesLoadBalance {
DrmUserExtension base;
uint16_t engineIndex;
uint16_t numSiblings;
uint32_t flags;
uint64_t reserved;
EngineClassInstance engines[numEngines];
};
#pragma pack()
struct DrmVersion {
int versionMajor;
int versionMinor;
int versionPatch;
size_t nameLen;
char *name;
size_t dateLen;
char *date;
size_t descLen;
char *desc;
};
enum class DrmIoctl {
GemExecbuffer2,
GemWait,
GemUserptr,
Getparam,
GemCreate,
GemSetDomain,
GemSetTiling,
GemGetTiling,
GemContextCreateExt,
GemContextDestroy,
RegRead,
GetResetStats,
GemContextGetparam,
GemContextSetparam,
Query,
GemMmapOffset,
GemVmCreate,
GemVmDestroy,
GemClose,
PrimeFdToHandle,
PrimeHandleToFd,
GemVmBind,
GemVmUnbind,
GemWaitUserFence,
DG1GemCreateExt,
GemCreateExt,
GemVmAdvise,
GemVmPrefetch,
UuidRegister,
UuidUnregister,
DebuggerOpen,
GemClosReserve,
GemClosFree,
GemCacheReserve,
SyncobjCreate,
SyncobjWait,
SyncobjDestroy,
Version,
};
enum class DrmParam {
ContextCreateExtSetparam,
ContextCreateFlagsUseExtensions,
ContextEnginesExtLoadBalance,
ContextParamEngines,
ContextParamGttSize,
ContextParamPersistence,
ContextParamPriority,
ContextParamRecoverable,
ContextParamSseu,
ContextParamVm,
EngineClassRender,
EngineClassCompute,
EngineClassCopy,
EngineClassVideo,
EngineClassVideoEnhance,
EngineClassInvalid,
EngineClassInvalidNone,
ExecBlt,
ExecDefault,
ExecNoReloc,
ExecRender,
MemoryClassDevice,
MemoryClassSystem,
MmapOffsetWb,
MmapOffsetWc,
ParamChipsetId,
ParamRevision,
ParamHasExecSoftpin,
ParamHasPooledEu,
ParamHasScheduler,
ParamEuTotal,
ParamSubsliceTotal,
ParamMinEuInPool,
ParamCsTimestampFrequency,
ParamHasVmBind,
ParamHasPageFault,
QueryEngineInfo,
QueryHwconfigTable,
QueryComputeSlices,
QueryMemoryRegions,
QueryTopologyInfo,
SchedulerCapPreemption,
TilingNone,
TilingY,
};
unsigned int getIoctlRequestValue(DrmIoctl ioctlRequest, IoctlHelper *ioctlHelper);
int getDrmParamValue(DrmParam drmParam, IoctlHelper *ioctlHelper);
std::string getDrmParamString(DrmParam param, IoctlHelper *ioctlHelper);
std::string getIoctlString(DrmIoctl ioctlRequest, IoctlHelper *ioctlHelper);
} // namespace NEO