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