2022-05-18 01:16:13 +08:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2022 Intel Corporation
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: MIT
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
2022-05-25 00:13:02 +08:00
|
|
|
#include <cstddef>
|
2022-05-18 01:16:13 +08:00
|
|
|
#include <cstdint>
|
2022-06-06 23:48:31 +08:00
|
|
|
#include <string>
|
|
|
|
|
2022-05-18 01:16:13 +08:00
|
|
|
namespace NEO {
|
2022-05-26 01:05:52 +08:00
|
|
|
class IoctlHelper;
|
2022-05-18 01:16:13 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
};
|
2022-05-18 05:40:34 +08:00
|
|
|
|
|
|
|
struct QueryItem {
|
|
|
|
uint64_t queryId;
|
|
|
|
int32_t length;
|
|
|
|
uint32_t flags;
|
|
|
|
uint64_t dataPtr;
|
|
|
|
};
|
|
|
|
|
2022-05-19 20:30:26 +08:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2022-05-19 22:06:33 +08:00
|
|
|
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[];
|
|
|
|
};
|
|
|
|
|
2022-05-19 23:07:45 +08:00
|
|
|
struct MemoryClassInstance {
|
|
|
|
uint16_t memoryClass;
|
|
|
|
uint16_t memoryInstance;
|
|
|
|
};
|
|
|
|
|
2022-05-20 00:56:01 +08:00
|
|
|
struct GemMmapOffset {
|
|
|
|
uint32_t handle;
|
|
|
|
uint32_t pad;
|
|
|
|
uint64_t offset;
|
|
|
|
uint64_t flags;
|
|
|
|
uint64_t extensions;
|
|
|
|
};
|
|
|
|
|
2022-05-20 22:36:09 +08:00
|
|
|
struct GemSetDomain {
|
|
|
|
uint32_t handle;
|
|
|
|
uint32_t readDomains;
|
|
|
|
uint32_t writeDomain;
|
|
|
|
};
|
2022-05-20 23:04:07 +08:00
|
|
|
|
|
|
|
struct GemContextParam {
|
|
|
|
uint32_t contextId;
|
|
|
|
uint32_t size;
|
|
|
|
uint64_t param;
|
|
|
|
uint64_t value;
|
|
|
|
};
|
|
|
|
|
2022-05-23 23:05:47 +08:00
|
|
|
struct DrmUserExtension {
|
|
|
|
uint64_t nextExtension;
|
|
|
|
uint32_t name;
|
|
|
|
uint32_t flags;
|
|
|
|
uint32_t reserved[4];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct GemContextCreateExtSetParam {
|
|
|
|
DrmUserExtension base;
|
|
|
|
GemContextParam param;
|
|
|
|
};
|
|
|
|
|
2022-05-24 22:36:24 +08:00
|
|
|
struct GemContextCreateExt {
|
|
|
|
uint32_t contextId;
|
|
|
|
uint32_t flags;
|
|
|
|
uint64_t extensions;
|
|
|
|
};
|
|
|
|
|
2022-05-24 23:06:15 +08:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
2022-05-25 00:13:02 +08:00
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct DrmVersion {
|
|
|
|
int versionMajor;
|
|
|
|
int versionMinor;
|
|
|
|
int versionPatch;
|
|
|
|
size_t nameLen;
|
|
|
|
char *name;
|
|
|
|
size_t dateLen;
|
|
|
|
char *date;
|
|
|
|
size_t descLen;
|
|
|
|
char *desc;
|
|
|
|
};
|
2022-05-26 01:05:52 +08:00
|
|
|
|
|
|
|
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,
|
|
|
|
};
|
|
|
|
|
2022-06-01 21:04:38 +08:00
|
|
|
enum class DrmParam {
|
|
|
|
EngineClassRender,
|
|
|
|
EngineClassCompute,
|
|
|
|
EngineClassCopy,
|
|
|
|
EngineClassVideo,
|
|
|
|
EngineClassVideoEnhance,
|
|
|
|
EngineClassInvalid,
|
|
|
|
EngineClassInvalidNone,
|
2022-06-15 00:47:02 +08:00
|
|
|
ExecBlt,
|
|
|
|
ExecDefault,
|
|
|
|
ExecNoReloc,
|
|
|
|
ExecRender,
|
2022-06-21 15:50:34 +08:00
|
|
|
MemoryClassDevice,
|
|
|
|
MemoryClassSystem,
|
2022-06-06 23:48:31 +08:00
|
|
|
ParamChipsetId,
|
|
|
|
ParamRevision,
|
|
|
|
ParamHasExecSoftpin,
|
|
|
|
ParamHasPooledEu,
|
|
|
|
ParamHasScheduler,
|
|
|
|
ParamEuTotal,
|
|
|
|
ParamSubsliceTotal,
|
|
|
|
ParamMinEuInPool,
|
|
|
|
ParamCsTimestampFrequency,
|
|
|
|
ParamHasVmBind,
|
|
|
|
ParamHasPageFault,
|
2022-06-02 00:03:01 +08:00
|
|
|
QueryEngineInfo,
|
|
|
|
QueryHwconfigTable,
|
2022-06-02 02:35:56 +08:00
|
|
|
QueryComputeSlices,
|
|
|
|
QueryMemoryRegions,
|
2022-07-26 20:11:50 +08:00
|
|
|
QueryTopologyInfo,
|
2022-06-21 23:41:40 +08:00
|
|
|
TilingNone,
|
|
|
|
TilingY,
|
2022-06-01 21:04:38 +08:00
|
|
|
};
|
|
|
|
|
2022-05-26 01:05:52 +08:00
|
|
|
unsigned int getIoctlRequestValue(DrmIoctl ioctlRequest, IoctlHelper *ioctlHelper);
|
2022-06-06 23:48:31 +08:00
|
|
|
int getDrmParamValue(DrmParam drmParam, IoctlHelper *ioctlHelper);
|
2022-07-14 23:32:26 +08:00
|
|
|
std::string getDrmParamString(DrmParam param, IoctlHelper *ioctlHelper);
|
|
|
|
std::string getIoctlString(DrmIoctl ioctlRequest, IoctlHelper *ioctlHelper);
|
2022-06-06 23:48:31 +08:00
|
|
|
|
2022-05-18 01:16:13 +08:00
|
|
|
} // namespace NEO
|