1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/*
* Copyright (C) 2023-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/execution_environment/execution_environment.h"
#include "shared/source/execution_environment/root_device_environment.h"
#include "shared/source/helpers/hw_info.h"
#include "shared/source/helpers/non_copyable_or_moveable.h"
#include "level_zero/sysman/source/device/sysman_device.h"
namespace NEO {
class ExecutionEnvironment;
} // namespace NEO
namespace L0 {
namespace Sysman {
struct OsSysman;
class Ecc;
class Events;
class GlobalOperations;
class Pci;
struct DiagnosticsHandleContext;
struct EngineHandleContext;
struct FabricPortHandleContext;
struct FanHandleContext;
struct FirmwareHandleContext;
struct FrequencyHandleContext;
struct MemoryHandleContext;
struct PerformanceHandleContext;
struct PowerHandleContext;
struct RasHandleContext;
struct SchedulerHandleContext;
struct StandbyHandleContext;
struct TemperatureHandleContext;
struct VfManagementHandleContext;
struct SysmanDeviceImp : SysmanDevice, NEO::NonCopyableAndNonMovableClass {
SysmanDeviceImp(NEO::ExecutionEnvironment *executionEnvironment, const uint32_t rootDeviceIndex);
SysmanDeviceImp();
~SysmanDeviceImp() override;
ze_result_t init();
OsSysman *pOsSysman = nullptr;
const NEO::RootDeviceEnvironment &getRootDeviceEnvironment() const {
return *executionEnvironment->rootDeviceEnvironments[rootDeviceIndex];
}
NEO::RootDeviceEnvironment &getRootDeviceEnvironmentRef() const {
return *executionEnvironment->rootDeviceEnvironments[rootDeviceIndex];
}
const NEO::HardwareInfo &getHardwareInfo() const override { return *getRootDeviceEnvironment().getHardwareInfo(); }
PRODUCT_FAMILY getProductFamily() const { return getHardwareInfo().platform.eProductFamily; }
NEO::ExecutionEnvironment *getExecutionEnvironment() const { return executionEnvironment; }
uint32_t getRootDeviceIndex() const { return rootDeviceIndex; }
double getTimerResolution();
GlobalOperations *pGlobalOperations = nullptr;
PowerHandleContext *pPowerHandleContext = nullptr;
FabricPortHandleContext *pFabricPortHandleContext = nullptr;
MemoryHandleContext *pMemoryHandleContext = nullptr;
EngineHandleContext *pEngineHandleContext = nullptr;
SchedulerHandleContext *pSchedulerHandleContext = nullptr;
FirmwareHandleContext *pFirmwareHandleContext = nullptr;
RasHandleContext *pRasHandleContext = nullptr;
DiagnosticsHandleContext *pDiagnosticsHandleContext = nullptr;
FrequencyHandleContext *pFrequencyHandleContext = nullptr;
StandbyHandleContext *pStandbyHandleContext = nullptr;
PerformanceHandleContext *pPerformanceHandleContext = nullptr;
Ecc *pEcc = nullptr;
TemperatureHandleContext *pTempHandleContext = nullptr;
Pci *pPci = nullptr;
FanHandleContext *pFanHandleContext = nullptr;
Events *pEvents = nullptr;
VfManagementHandleContext *pVfManagementHandleContext = nullptr;
ze_result_t powerGet(uint32_t *pCount, zes_pwr_handle_t *phPower) override;
ze_result_t powerGetCardDomain(zes_pwr_handle_t *phPower) override;
ze_result_t memoryGet(uint32_t *pCount, zes_mem_handle_t *phMemory) override;
ze_result_t fabricPortGet(uint32_t *pCount, zes_fabric_port_handle_t *phPort) override;
ze_result_t engineGet(uint32_t *pCount, zes_engine_handle_t *phEngine) override;
ze_result_t schedulerGet(uint32_t *pCount, zes_sched_handle_t *phScheduler) override;
ze_result_t frequencyGet(uint32_t *pCount, zes_freq_handle_t *phFrequency) override;
ze_result_t firmwareGet(uint32_t *pCount, zes_firmware_handle_t *phFirmware) override;
ze_result_t rasGet(uint32_t *pCount, zes_ras_handle_t *phRas) override;
ze_result_t diagnosticsGet(uint32_t *pCount, zes_diag_handle_t *phFirmware) override;
ze_result_t deviceGetProperties(zes_device_properties_t *pProperties) override;
ze_result_t deviceGetSubDeviceProperties(uint32_t *pCount, zes_subdevice_exp_properties_t *pSubdeviceProps) override;
ze_bool_t getDeviceInfoByUuid(zes_uuid_t uuid, ze_bool_t *onSubdevice, uint32_t *subdeviceId) override;
ze_result_t processesGetState(uint32_t *pCount, zes_process_state_t *pProcesses) override;
ze_result_t deviceReset(ze_bool_t force) override;
ze_result_t deviceGetState(zes_device_state_t *pState) override;
ze_result_t standbyGet(uint32_t *pCount, zes_standby_handle_t *phStandby) override;
ze_result_t deviceEccAvailable(ze_bool_t *pAvailable) override;
ze_result_t deviceEccConfigurable(ze_bool_t *pConfigurable) override;
ze_result_t deviceGetEccState(zes_device_ecc_properties_t *pState) override;
ze_result_t deviceSetEccState(const zes_device_ecc_desc_t *newState, zes_device_ecc_properties_t *pState) override;
ze_result_t temperatureGet(uint32_t *pCount, zes_temp_handle_t *phTemperature) override;
ze_result_t performanceGet(uint32_t *pCount, zes_perf_handle_t *phPerformance) override;
ze_result_t pciGetProperties(zes_pci_properties_t *pProperties) override;
ze_result_t pciGetState(zes_pci_state_t *pState) override;
ze_result_t pciGetBars(uint32_t *pCount, zes_pci_bar_properties_t *pProperties) override;
ze_result_t pciLinkSpeedUpdateExp(ze_bool_t downgradeUpgrade, zes_device_action_t *pendingAction) override;
ze_result_t pciGetStats(zes_pci_stats_t *pStats) override;
ze_result_t fanGet(uint32_t *pCount, zes_fan_handle_t *phFan) override;
ze_result_t deviceEventRegister(zes_event_type_flags_t events) override;
ze_result_t deviceResetExt(zes_reset_properties_t *pProperties) override;
bool deviceEventListen(zes_event_type_flags_t &pEvent, uint64_t timeout) override;
ze_result_t fabricPortGetMultiPortThroughput(uint32_t numPorts, zes_fabric_port_handle_t *phPort, zes_fabric_port_throughput_t **pThroughput) override;
ze_result_t deviceEnumEnabledVF(uint32_t *pCount, zes_vf_handle_t *phVFhandle) override;
OsSysman *deviceGetOsInterface() override;
void getDeviceUuids(std::vector<std::string> &deviceUuids) override;
private:
NEO::ExecutionEnvironment *executionEnvironment = nullptr;
const uint32_t rootDeviceIndex;
template <typename T>
void inline freeResource(T *&resource) {
if (resource) {
delete resource;
resource = nullptr;
}
}
};
} // namespace Sysman
} // namespace L0
|