The Pedigree Project 0.1
Apic.h
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#ifndef KERNEL_MACHINE_X86_COMMON_APIC_H
21#define KERNEL_MACHINE_X86_COMMON_APIC_H
22#include <config.h>
23
24#if MULTIPROCESSOR
25
26#include "pedigree/kernel/compiler.h"
27#include "pedigree/kernel/machine/IrqManager.h"
28#include "pedigree/kernel/machine/types.h"
29#include "pedigree/kernel/processor/types.h"
30
31class Device;
32class HardIrqHandler;
33class IrqHandler;
34class IrqHandlerBase;
35
41class Apic : public IrqManager {
42 public:
44 inline Apic() {}
46 inline virtual ~Apic() {}
47
48 //
49 // IrqManager interface
50 //
51 virtual irq_id_t registerIsaIrqHandler(uint8_t, IrqHandler* handler, const IrqPolicy& policy);
52 virtual irq_id_t registerPciIrqHandler(IrqHandler* handler, Device* pDevice,
53 const IrqPolicy& policy);
54 virtual irq_id_t registerHardIsaIrqHandler(uint8_t, HardIrqHandler* handler,
55 const IrqPolicy& policy);
56 virtual irq_id_t registerHardPciIrqHandler(HardIrqHandler* handler, Device* pDevice,
57 const IrqPolicy& policy);
58 virtual bool unregisterHandler(irq_id_t Id, IrqHandlerBase* handler);
59 virtual void enable(irq_id_t Id, bool bEnable);
60
61 bool initialise() INITIALISATION_ONLY;
62
63 private:
66 Apic(const Apic&);
69 Apic& operator=(const Apic&);
70
72 static Apic m_Instance;
73};
74
77#endif
78
79#endif
virtual irq_id_t registerHardPciIrqHandler(HardIrqHandler *handler, Device *pDevice, const IrqPolicy &policy)=0
virtual irq_id_t registerIsaIrqHandler(uint8_t irq, IrqHandler *handler, const IrqPolicy &policy)=0
virtual bool unregisterHandler(irq_id_t Id, IrqHandlerBase *handler)=0
virtual irq_id_t registerPciIrqHandler(IrqHandler *handler, Device *pDevice, const IrqPolicy &policy)=0
virtual irq_id_t registerHardIsaIrqHandler(uint8_t irq, HardIrqHandler *handler, const IrqPolicy &policy)=0