1 /* 2 * Copyright (C) 2020-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 10 #include "shared/source/os_interface/os_interface.h" 11 #include "shared/source/os_interface/windows/wddm/wddm.h" 12 13 #include "level_zero/tools/source/sysman/windows/kmd_sys.h" 14 #include "level_zero/ze_api.h" 15 #include "level_zero/zet_api.h" 16 17 #include <string> 18 #include <vector> 19 20 namespace L0 { 21 class KmdSysManager { 22 public: 23 static KmdSysManager *create(NEO::Wddm *pWddm); 24 KmdSysManager() = default; 25 ~KmdSysManager() = default; 26 27 MOCKABLE_VIRTUAL ze_result_t requestSingle(KmdSysman::RequestProperty &In, KmdSysman::ResponseProperty &Out); 28 ze_result_t requestMultiple(std::vector<KmdSysman::RequestProperty> &vIn, std::vector<KmdSysman::ResponseProperty> &vOut); GetWddmAccess()29 NEO::Wddm *GetWddmAccess() { return pWddmAccess; } 30 31 private: 32 MOCKABLE_VIRTUAL bool escape(uint32_t escapeOp, uint64_t pDataIn, uint32_t dataInSize, uint64_t pDataOut, uint32_t dataOutSize); 33 34 bool parseBufferIn(KmdSysman::GfxSysmanMainHeaderIn *pIn, std::vector<KmdSysman::RequestProperty> &vIn); 35 bool parseBufferOut(KmdSysman::GfxSysmanMainHeaderOut *pOut, std::vector<KmdSysman::ResponseProperty> &vOut); 36 37 KmdSysManager(NEO::Wddm *pWddm); 38 NEO::Wddm *pWddmAccess = nullptr; 39 }; 40 } // namespace L0 41