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