[zion] Move all APIC functions into a global class.

This commit is contained in:
Drew Galbraith 2023-08-01 22:26:29 -07:00
parent f8de60e2dd
commit 35b1844862
7 changed files with 161 additions and 87 deletions

View file

@ -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;