1 /*
2  * Copyright (C) 2020 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 #include "level_zero/core/source/device/device.h"
10 #include <level_zero/zes_api.h>
11 
12 #include <vector>
13 
14 struct _zes_mem_handle_t {
15     virtual ~_zes_mem_handle_t() = default;
16 };
17 
18 namespace L0 {
19 
20 struct OsSysman;
21 
22 class Memory : _zes_mem_handle_t {
23   public:
24     virtual ze_result_t memoryGetProperties(zes_mem_properties_t *pProperties) = 0;
25     virtual ze_result_t memoryGetBandwidth(zes_mem_bandwidth_t *pBandwidth) = 0;
26     virtual ze_result_t memoryGetState(zes_mem_state_t *pState) = 0;
27 
fromHandle(zes_mem_handle_t handle)28     static Memory *fromHandle(zes_mem_handle_t handle) {
29         return static_cast<Memory *>(handle);
30     }
toHandle()31     inline zes_mem_handle_t toHandle() { return this; }
32     bool initSuccess = false;
33 };
34 
35 struct MemoryHandleContext {
MemoryHandleContextMemoryHandleContext36     MemoryHandleContext(OsSysman *pOsSysman) : pOsSysman(pOsSysman){};
37     ~MemoryHandleContext();
38 
39     ze_result_t init(std::vector<ze_device_handle_t> &deviceHandles);
40 
41     ze_result_t memoryGet(uint32_t *pCount, zes_mem_handle_t *phMemory);
42 
43     OsSysman *pOsSysman = nullptr;
44     bool isLmemSupported = false;
45     std::vector<Memory *> handleList = {};
46 
47   private:
48     void createHandle(ze_device_handle_t deviceHandle);
49 };
50 
51 } // namespace L0
52