// Copyright 2016 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.

#ifndef GTT_H
#define GTT_H

#include "address_space.h"
#include "platform_pci_device.h"
#include <memory>
#include <mutex>

class Gtt : public AddressSpace {
public:
    class Owner : public AddressSpace::Owner {
    public:
        virtual magma::PlatformPciDevice* platform_device() = 0;
    };

    Gtt(Owner* owner) : AddressSpace(owner, ADDRESS_SPACE_GGTT) {}

    virtual bool Init(uint64_t gtt_size) = 0;

    bool GlobalGttInsert(uint64_t addr, magma::PlatformBuffer* buffer, uint64_t page_offset,
                         uint64_t page_count)
    {
        std::lock_guard<std::mutex> lock(mutex());
        return GlobalGttInsertLocked(addr, buffer, page_offset, page_count);
    }

    static std::unique_ptr<Gtt> CreateShim(Owner* owner);

protected:
    virtual bool GlobalGttInsertLocked(uint64_t addr, magma::PlatformBuffer* buffer,
                                       uint64_t page_offset, uint64_t page_count) = 0;

    friend class TestGtt;
};

#endif // GTT_H
