1 /*
2  * Copyright (C) 2019-2021 Intel Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  */
7 
8 #pragma once
9 #include "shared/source/os_interface/linux/ioctl_helper.h"
10 
11 #include <cstddef>
12 #include <cstdint>
13 #include <vector>
14 
15 namespace NEO {
16 class Drm;
17 struct HardwareInfo;
18 
19 class MemoryInfo {
20   public:
21     using RegionContainer = std::vector<MemoryRegion>;
22 
~MemoryInfo()23     virtual ~MemoryInfo(){};
24 
25     MemoryInfo(const MemoryRegion *regionInfo, size_t count);
26 
27     void assignRegionsFromDistances(const void *distanceInfosPtr, size_t size);
28 
29     MOCKABLE_VIRTUAL uint32_t createGemExt(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle);
30 
31     MemoryClassInstance getMemoryRegionClassAndInstance(uint32_t memoryBank, const HardwareInfo &hwInfo);
32 
33     MOCKABLE_VIRTUAL size_t getMemoryRegionSize(uint32_t memoryBank);
34 
35     void printRegionSizes();
36 
37     MOCKABLE_VIRTUAL uint32_t createGemExtWithSingleRegion(Drm *drm, uint32_t memoryBanks, size_t allocSize, uint32_t &handle);
38 
getDrmRegionInfos()39     const RegionContainer &getDrmRegionInfos() const { return drmQueryRegions; }
40 
41   protected:
42     const RegionContainer drmQueryRegions;
43 
44     const MemoryRegion &systemMemoryRegion;
45 
46     RegionContainer localMemoryRegions;
47 };
48 
49 } // namespace NEO
50