2020-04-07 07:02:52 -04:00
/*
2022-03-09 05:50:57 +00:00
* Copyright ( C ) 2020 - 2022 Intel Corporation
2020-04-07 07:02:52 -04:00
*
* SPDX - License - Identifier : MIT
*
*/
# include "level_zero/tools/source/sysman/engine/engine.h"
2020-07-29 13:03:15 -04:00
# include "shared/source/helpers/basic_math.h"
2020-04-07 07:02:52 -04:00
# include "level_zero/tools/source/sysman/engine/engine_imp.h"
2020-08-24 13:08:59 -04:00
class OsEngine ;
2020-04-07 07:02:52 -04:00
namespace L0 {
2020-08-24 13:08:59 -04:00
EngineHandleContext : : EngineHandleContext ( OsSysman * pOsSysman ) {
this - > pOsSysman = pOsSysman ;
}
2020-04-07 07:02:52 -04:00
EngineHandleContext : : ~ EngineHandleContext ( ) {
2020-09-25 14:04:02 -04:00
releaseEngines ( ) ;
2020-04-07 07:02:52 -04:00
}
2021-06-12 12:07:21 +05:30
void EngineHandleContext : : createHandle ( zes_engine_group_t engineType , uint32_t engineInstance , uint32_t subDeviceId ) {
Engine * pEngine = new EngineImp ( pOsSysman , engineType , engineInstance , subDeviceId ) ;
2022-03-09 05:50:57 +00:00
if ( pEngine - > initSuccess = = true ) {
handleList . push_back ( pEngine ) ;
} else {
delete pEngine ;
}
2020-07-30 18:01:57 +05:30
}
void EngineHandleContext : : init ( ) {
2021-06-12 12:07:21 +05:30
std : : set < std : : pair < zes_engine_group_t , EngineInstanceSubDeviceId > > engineGroupInstance = { } ; //set contains pair of engine group and struct containing engine instance and subdeviceId
2020-10-05 17:36:05 +05:30
OsEngine : : getNumEngineTypeAndInstances ( engineGroupInstance , pOsSysman ) ;
2020-08-24 13:08:59 -04:00
for ( auto itr = engineGroupInstance . begin ( ) ; itr ! = engineGroupInstance . end ( ) ; + + itr ) {
2021-06-12 12:07:21 +05:30
createHandle ( itr - > first , itr - > second . first , itr - > second . second ) ;
2020-08-24 13:08:59 -04:00
}
2020-07-30 18:01:57 +05:30
}
2020-09-25 14:04:02 -04:00
void EngineHandleContext : : releaseEngines ( ) {
for ( Engine * pEngine : handleList ) {
delete pEngine ;
}
handleList . clear ( ) ;
}
2020-07-30 18:01:57 +05:30
ze_result_t EngineHandleContext : : engineGet ( uint32_t * pCount , zes_engine_handle_t * phEngine ) {
2022-08-11 13:42:59 +00:00
std : : call_once ( initEngineOnce , [ this ] ( ) {
this - > init ( ) ;
this - > engineInitDone = true ;
} ) ;
2020-07-29 13:03:15 -04:00
uint32_t handleListSize = static_cast < uint32_t > ( handleList . size ( ) ) ;
uint32_t numToCopy = std : : min ( * pCount , handleListSize ) ;
if ( 0 = = * pCount | | * pCount > handleListSize ) {
* pCount = handleListSize ;
2020-04-16 04:57:23 -04:00
}
2020-07-29 13:03:15 -04:00
if ( nullptr ! = phEngine ) {
for ( uint32_t i = 0 ; i < numToCopy ; i + + ) {
phEngine [ i ] = handleList [ i ] - > toHandle ( ) ;
2020-04-16 04:57:23 -04:00
}
}
2020-04-07 07:02:52 -04:00
return ZE_RESULT_SUCCESS ;
}
} // namespace L0