/* * Copyright (C) 2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "igfxfmid.h" #include #include #include namespace NEO { class Drm; class LocalMemoryHelper; extern LocalMemoryHelper *localMemoryHelperFactory[IGFX_MAX_PRODUCT]; class LocalMemoryHelper { public: static LocalMemoryHelper *get(PRODUCT_FAMILY product); static uint32_t ioctl(Drm *drm, unsigned long request, void *arg); virtual uint32_t createGemExt(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle) = 0; virtual std::unique_ptr translateIfRequired(uint8_t *dataQuery, int32_t length) = 0; }; template class LocalMemoryHelperImpl : public LocalMemoryHelper { public: static LocalMemoryHelper *get() { static LocalMemoryHelperImpl instance; return &instance; } uint32_t createGemExt(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle) override; std::unique_ptr translateIfRequired(uint8_t *dataQuery, int32_t length) override; }; class LocalMemoryHelperDefault : public LocalMemoryHelper { public: static LocalMemoryHelper *get() { static LocalMemoryHelperDefault instance; return &instance; } uint32_t createGemExt(Drm *drm, void *data, uint32_t dataSize, size_t allocSize, uint32_t &handle) override; std::unique_ptr translateIfRequired(uint8_t *dataQuery, int32_t length) override; }; } // namespace NEO