Files
compute-runtime/level_zero/sysman/source/sysman_driver_handle_imp.cpp
Jitendra Sharma 0bc4294af4 Add support for Sysman init and sysman driver init
With this change we are adding support for initializing
Sysman and also providing support to get Sysman driver
handles and device handles.

Related-To: LOCI-3950

Signed-off-by: Jitendra Sharma <jitendra.sharma@intel.com>
2023-02-16 08:10:39 +01:00

92 lines
2.7 KiB
C++

/*
* Copyright (C) 2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/sysman/source/sysman_driver_handle_imp.h"
#include "shared/source/debug_settings/debug_settings_manager.h"
#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/os_interface/os_interface.h"
#include "level_zero/sysman/source/sysman_device.h"
#include "level_zero/sysman/source/sysman_driver.h"
#include <cstring>
#include <vector>
namespace L0 {
namespace Sysman {
struct SysmanDriverHandleImp *GlobalDriver;
SysmanDriverHandleImp::SysmanDriverHandleImp() = default;
ze_result_t SysmanDriverHandleImp::initialize(NEO::ExecutionEnvironment &executionEnvironment) {
for (uint32_t rootDeviceIndex = 0u; rootDeviceIndex < executionEnvironment.rootDeviceEnvironments.size(); rootDeviceIndex++) {
if (!executionEnvironment.rootDeviceEnvironments[rootDeviceIndex]->getHardwareInfo()->capabilityTable.levelZeroSupported) {
continue;
}
auto pSysmanDevice = SysmanDevice::create(executionEnvironment, rootDeviceIndex);
this->sysmanDevices.push_back(pSysmanDevice);
}
if (this->sysmanDevices.size() == 0) {
return ZE_RESULT_ERROR_UNINITIALIZED;
}
this->numDevices = static_cast<uint32_t>(this->sysmanDevices.size());
return ZE_RESULT_SUCCESS;
}
SysmanDriverHandle *SysmanDriverHandle::create(NEO::ExecutionEnvironment &executionEnvironment, ze_result_t *returnValue) {
SysmanDriverHandleImp *driverHandle = new SysmanDriverHandleImp;
UNRECOVERABLE_IF(nullptr == driverHandle);
ze_result_t res = driverHandle->initialize(executionEnvironment);
if (res != ZE_RESULT_SUCCESS) {
delete driverHandle;
driverHandle = nullptr;
*returnValue = res;
return nullptr;
}
GlobalDriver = driverHandle;
return driverHandle;
}
ze_result_t SysmanDriverHandleImp::getDevice(uint32_t *pCount, zes_device_handle_t *phDevices) {
if (*pCount == 0) {
*pCount = this->numDevices;
return ZE_RESULT_SUCCESS;
}
if (*pCount > this->numDevices) {
*pCount = this->numDevices;
}
if (phDevices == nullptr) {
return ZE_RESULT_ERROR_INVALID_NULL_HANDLE;
}
for (uint32_t i = 0; i < *pCount; i++) {
phDevices[i] = this->sysmanDevices[i];
}
return ZE_RESULT_SUCCESS;
}
SysmanDriverHandleImp::~SysmanDriverHandleImp() {
for (auto &device : this->sysmanDevices) {
delete device;
}
this->sysmanDevices.clear();
}
} // namespace Sysman
} // namespace L0