1 /*
2  * Copyright (C) 2020-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 #include "shared/source/helpers/non_copyable_or_moveable.h"
10 
11 #include "level_zero/tools/source/sysman/events/os_events.h"
12 #include "level_zero/tools/source/sysman/windows/os_sysman_imp.h"
13 
14 #include "sysman/windows/os_sysman_imp.h"
15 
16 namespace L0 {
17 class KmdSysManager;
18 
19 struct EventHandler {
20     HANDLE windowsHandle;
21     zes_event_type_flags_t id;
22     uint32_t requestId;
23 };
24 
25 class WddmEventsImp : public OsEvents, NEO::NonCopyableOrMovableClass {
26   public:
27     bool eventListen(zes_event_type_flags_t &pEvent, uint64_t timeout) override;
28     ze_result_t eventRegister(zes_event_type_flags_t events) override;
29     WddmEventsImp(OsSysman *pOsSysman);
~WddmEventsImp()30     ~WddmEventsImp() {
31         CloseHandle(exitHandle);
32     }
33 
34     // Don't allow copies of the WddmEventsImp object
35     WddmEventsImp(const WddmEventsImp &obj) = delete;
36     WddmEventsImp &operator=(const WddmEventsImp &obj) = delete;
37 
38   private:
39     void registerEvents(zes_event_type_flags_t eventId, uint32_t requestId);
40     void unregisterEvents();
41     HANDLE exitHandle;
42 
43   protected:
44     KmdSysManager *pKmdSysManager = nullptr;
45     std::vector<EventHandler> eventList;
46 };
47 
48 } // namespace L0
49