[zion] Move all APIC functions into a global class.
This commit is contained in:
parent
f8de60e2dd
commit
35b1844862
7 changed files with 161 additions and 87 deletions
|
|
@ -2,17 +2,39 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
void InspectApic();
|
||||
#include "boot/acpi.h"
|
||||
|
||||
void EnableApic();
|
||||
class Apic {
|
||||
public:
|
||||
static void Init();
|
||||
static void DumpInfo();
|
||||
|
||||
#define LAPIC_TIMER_ONESHOT 0
|
||||
#define LAPIC_TIMER_PERIODIC 1 << 17
|
||||
uint32_t GetLocalTimerValue();
|
||||
enum TimerMode {
|
||||
ONESHOT,
|
||||
PERIODIC,
|
||||
};
|
||||
void InitializeLocalTimer(uint32_t init_cnt, TimerMode mode);
|
||||
|
||||
void SetLocalTimer(uint32_t init_cnt, uint64_t mode);
|
||||
uint32_t GetLocalTimer();
|
||||
void SignalEOI();
|
||||
|
||||
void UnmaskPit();
|
||||
void MaskPit();
|
||||
void UnmaskPit();
|
||||
void MaskPit();
|
||||
|
||||
void SignalEOI();
|
||||
private:
|
||||
uint64_t l_apic_base_;
|
||||
volatile uint8_t* io_apic_addr_;
|
||||
volatile uint32_t* io_apic_data_;
|
||||
|
||||
Apic(const ApicConfiguration& config);
|
||||
|
||||
uint32_t GetLocalReg(uint16_t offset);
|
||||
void SetLocalReg(uint16_t offset, uint32_t value);
|
||||
|
||||
uint64_t GetIoDoubleReg(uint8_t offset);
|
||||
void SetIoDoubleReg(uint8_t offset, uint64_t value);
|
||||
|
||||
uint32_t GetIoReg(uint8_t offset);
|
||||
};
|
||||
|
||||
extern Apic* gApic;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue