blob: b314c0dfb5e2871b41e3114e2d1303067a8a047d [file] [log] [blame]
// 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.
#ifndef INTERRUPT_MANAGER_H
#define INTERRUPT_MANAGER_H
#include "magma_util/register_io.h"
#include "platform_interrupt.h"
#include "platform_pci_device.h"
#include <type_traits>
class InterruptManager {
public:
class Owner {
public:
virtual magma::RegisterIo* register_io_for_interrupt() = 0;
virtual magma::PlatformPciDevice* platform_device() = 0;
};
virtual ~InterruptManager() {}
using InterruptCallback =
std::add_pointer_t<void(void* data, uint32_t master_interrupt_control)>;
virtual bool RegisterCallback(InterruptCallback callback, void* data,
uint32_t interrupt_mask) = 0;
static std::unique_ptr<InterruptManager> CreateShim(Owner* owner);
};
#endif // INTERRUPT_MANAGER_H