1 /*
2  * Copyright (C) 2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "level_zero/tools/source/sysman/diagnostics/linux/os_diagnostics_imp.h"
9 
10 #include "shared/source/helpers/string.h"
11 
12 #include "level_zero/core/source/device/device_imp.h"
13 
14 namespace L0 {
15 const std::string LinuxDiagnosticsImp::deviceDir("device");
16 
osGetDiagProperties(zes_diag_properties_t * pProperties)17 void LinuxDiagnosticsImp::osGetDiagProperties(zes_diag_properties_t *pProperties) {
18     pProperties->onSubdevice = isSubdevice;
19     pProperties->subdeviceId = subdeviceId;
20     pProperties->haveTests = 0; // osGetDiagTests is Unsupported
21     strncpy_s(pProperties->name, ZES_STRING_PROPERTY_SIZE, osDiagType.c_str(), osDiagType.size());
22     return;
23 }
24 
osGetDiagTests(uint32_t * pCount,zes_diag_test_t * pTests)25 ze_result_t LinuxDiagnosticsImp::osGetDiagTests(uint32_t *pCount, zes_diag_test_t *pTests) {
26     return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
27 }
28 
osRunDiagTests(uint32_t start,uint32_t end,zes_diag_result_t * pResult)29 ze_result_t LinuxDiagnosticsImp::osRunDiagTests(uint32_t start, uint32_t end, zes_diag_result_t *pResult) {
30     return osRunDiagTestsinFW(pResult);
31 }
32 
LinuxDiagnosticsImp(OsSysman * pOsSysman,const std::string & diagTests,ze_bool_t onSubdevice,uint32_t subdeviceId)33 LinuxDiagnosticsImp::LinuxDiagnosticsImp(OsSysman *pOsSysman, const std::string &diagTests, ze_bool_t onSubdevice, uint32_t subdeviceId) : osDiagType(diagTests), isSubdevice(onSubdevice), subdeviceId(subdeviceId) {
34     pLinuxSysmanImp = static_cast<LinuxSysmanImp *>(pOsSysman);
35     pFwInterface = pLinuxSysmanImp->getFwUtilInterface();
36     pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess();
37     pFsAccess = &pLinuxSysmanImp->getFsAccess();
38     pProcfsAccess = &pLinuxSysmanImp->getProcfsAccess();
39     pDevice = pLinuxSysmanImp->getDeviceHandle();
40     auto device = static_cast<DeviceImp *>(pDevice);
41     executionEnvironment = device->getNEODevice()->getExecutionEnvironment();
42     rootDeviceIndex = device->getNEODevice()->getRootDeviceIndex();
43 }
44 
create(OsSysman * pOsSysman,const std::string & diagTests,ze_bool_t onSubdevice,uint32_t subdeviceId)45 std::unique_ptr<OsDiagnostics> OsDiagnostics::create(OsSysman *pOsSysman, const std::string &diagTests, ze_bool_t onSubdevice, uint32_t subdeviceId) {
46     std::unique_ptr<LinuxDiagnosticsImp> pLinuxDiagnosticsImp = std::make_unique<LinuxDiagnosticsImp>(pOsSysman, diagTests, onSubdevice, subdeviceId);
47     return pLinuxDiagnosticsImp;
48 }
49 
50 } // namespace L0
51