1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #include "level_zero/tools/source/sysman/windows/os_sysman_imp.h"
9 
10 #include "shared/source/os_interface/windows/wddm/wddm.h"
11 
12 namespace L0 {
13 
init()14 ze_result_t WddmSysmanImp::init() {
15     pDevice = Device::fromHandle(pParentSysmanDeviceImp->hCoreDevice);
16     UNRECOVERABLE_IF(nullptr == pDevice);
17 
18     NEO::OSInterface &OsInterface = pDevice->getOsInterface();
19     auto driverModel = OsInterface.getDriverModel();
20     if (driverModel) {
21         pWddm = driverModel->as<NEO::Wddm>();
22     }
23     pKmdSysManager = KmdSysManager::create(pWddm);
24     UNRECOVERABLE_IF(nullptr == pKmdSysManager);
25 
26     return ZE_RESULT_SUCCESS;
27 }
28 
getDeviceHandle()29 Device *WddmSysmanImp::getDeviceHandle() {
30     return pDevice;
31 }
32 
getWddm()33 NEO::Wddm &WddmSysmanImp::getWddm() {
34     UNRECOVERABLE_IF(nullptr == pWddm);
35     return *pWddm;
36 }
37 
getKmdSysManager()38 KmdSysManager &WddmSysmanImp::getKmdSysManager() {
39     UNRECOVERABLE_IF(nullptr == pKmdSysManager);
40     return *pKmdSysManager;
41 }
42 
WddmSysmanImp(SysmanDeviceImp * pParentSysmanDeviceImp)43 WddmSysmanImp::WddmSysmanImp(SysmanDeviceImp *pParentSysmanDeviceImp) {
44     this->pParentSysmanDeviceImp = pParentSysmanDeviceImp;
45 }
46 
~WddmSysmanImp()47 WddmSysmanImp::~WddmSysmanImp() {
48     if (nullptr != pKmdSysManager) {
49         delete pKmdSysManager;
50         pKmdSysManager = nullptr;
51     }
52 }
53 
create(SysmanDeviceImp * pParentSysmanDeviceImp)54 OsSysman *OsSysman::create(SysmanDeviceImp *pParentSysmanDeviceImp) {
55     WddmSysmanImp *pWddmSysmanImp = new WddmSysmanImp(pParentSysmanDeviceImp);
56     return static_cast<OsSysman *>(pWddmSysmanImp);
57 }
58 
59 } // namespace L0
60