1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "level_zero/tools/source/sysman/engine/engine.h"
9 
10 #include "shared/source/helpers/basic_math.h"
11 #include "shared/source/helpers/debug_helpers.h"
12 
13 #include "level_zero/tools/source/sysman/engine/engine_imp.h"
14 class OsEngine;
15 namespace L0 {
16 
EngineHandleContext(OsSysman * pOsSysman)17 EngineHandleContext::EngineHandleContext(OsSysman *pOsSysman) {
18     this->pOsSysman = pOsSysman;
19 }
20 
~EngineHandleContext()21 EngineHandleContext::~EngineHandleContext() {
22     releaseEngines();
23 }
24 
createHandle(zes_engine_group_t engineType,uint32_t engineInstance,uint32_t subDeviceId)25 void EngineHandleContext::createHandle(zes_engine_group_t engineType, uint32_t engineInstance, uint32_t subDeviceId) {
26     Engine *pEngine = new EngineImp(pOsSysman, engineType, engineInstance, subDeviceId);
27     handleList.push_back(pEngine);
28 }
29 
init()30 void EngineHandleContext::init() {
31     std::set<std::pair<zes_engine_group_t, EngineInstanceSubDeviceId>> engineGroupInstance = {}; //set contains pair of engine group and struct containing engine instance and subdeviceId
32     OsEngine::getNumEngineTypeAndInstances(engineGroupInstance, pOsSysman);
33     for (auto itr = engineGroupInstance.begin(); itr != engineGroupInstance.end(); ++itr) {
34         createHandle(itr->first, itr->second.first, itr->second.second);
35     }
36 }
37 
releaseEngines()38 void EngineHandleContext::releaseEngines() {
39     for (Engine *pEngine : handleList) {
40         delete pEngine;
41     }
42     handleList.clear();
43 }
44 
engineGet(uint32_t * pCount,zes_engine_handle_t * phEngine)45 ze_result_t EngineHandleContext::engineGet(uint32_t *pCount, zes_engine_handle_t *phEngine) {
46     uint32_t handleListSize = static_cast<uint32_t>(handleList.size());
47     uint32_t numToCopy = std::min(*pCount, handleListSize);
48     if (0 == *pCount || *pCount > handleListSize) {
49         *pCount = handleListSize;
50     }
51     if (nullptr != phEngine) {
52         for (uint32_t i = 0; i < numToCopy; i++) {
53             phEngine[i] = handleList[i]->toHandle();
54         }
55     }
56     return ZE_RESULT_SUCCESS;
57 }
58 
59 } // namespace L0
60