| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gtt.h" |
| #include "msd_intel_pci_device.h" |
| |
| class GttShim : public Gtt { |
| public: |
| GttShim(Owner* owner) : Gtt(owner), owner_(owner) {} |
| |
| uint64_t Size() const override { return pci_device()->GetGtt()->Size(); } |
| |
| // Init only on core gtt |
| bool Init(uint64_t gtt_size) override |
| { |
| DASSERT(false); |
| return false; |
| } |
| |
| private: |
| // AddressSpace overrides |
| bool AllocLocked(size_t size, uint8_t align_pow2, uint64_t* addr_out) override |
| { |
| return pci_device()->GetGtt()->Alloc(size, align_pow2, addr_out); |
| } |
| bool FreeLocked(uint64_t addr) override { return pci_device()->GetGtt()->Free(addr); } |
| |
| bool ClearLocked(uint64_t addr, uint64_t page_count) override |
| { |
| return pci_device()->GetGtt()->Clear(addr, page_count); |
| } |
| |
| bool InsertLocked(uint64_t addr, magma::PlatformBusMapper::BusMapping* bus_mapping) override |
| { |
| DASSERT(false); |
| return false; |
| } |
| |
| bool GlobalGttInsertLocked(uint64_t addr, magma::PlatformBuffer* buffer, uint64_t page_offset, |
| uint64_t page_count) override |
| { |
| return pci_device()->GetGtt()->GlobalGttInsert(addr, buffer, page_offset, page_count); |
| } |
| |
| MsdIntelPciDevice* pci_device() const |
| { |
| return static_cast<MsdIntelPciDevice*>(owner_->platform_device()); |
| } |
| |
| Owner* owner_; |
| }; |
| |
| std::unique_ptr<Gtt> Gtt::CreateShim(Owner* owner) { return std::make_unique<GttShim>(owner); } |