core: remove apic.c and unused function in pic.c
This commit is contained in:
parent
1640b2e125
commit
0812a06350
@ -1,69 +0,0 @@
|
|||||||
#include "apic.h"
|
|
||||||
#include "cpuid.h"
|
|
||||||
#include <cpuid.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define IA32_APIC_BASE_MSR 0x1B
|
|
||||||
#define IA32_APIC_BASE_MSR_BSP 0x100 // Processor is a BSP
|
|
||||||
#define IA32_APIC_BASE_MSR_ENABLE 0x800
|
|
||||||
|
|
||||||
/** returns a 'true' value if the CPU supports APIC
|
|
||||||
* and if the local APIC hasn't been disabled in MSRs
|
|
||||||
* note that this requires CPUID to be supported.
|
|
||||||
*/
|
|
||||||
bool check_apic()
|
|
||||||
{
|
|
||||||
static unsigned int eax, edx, unused;
|
|
||||||
__get_cpuid(1, &eax, &unused, &unused, &edx);
|
|
||||||
return edx & CPUID_FEAT_EDX_APIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the physical address for local APIC registers */
|
|
||||||
static void cpu_set_apic_base(uintptr_t apic)
|
|
||||||
{
|
|
||||||
uint32_t edx = 0;
|
|
||||||
uint32_t eax = (apic & 0xfffff0000) | IA32_APIC_BASE_MSR_ENABLE;
|
|
||||||
|
|
||||||
#ifdef __PHYSICAL_MEMORY_EXTENSION__
|
|
||||||
edx = (apic >> 32) & 0x0f;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
cpu_set_msr(IA32_APIC_BASE_MSR, eax, edx);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the physical address of the APIC registers page
|
|
||||||
* make sure you map it to virtual memory ;)
|
|
||||||
*/
|
|
||||||
static uintptr_t cpu_get_apic_base(void)
|
|
||||||
{
|
|
||||||
uint32_t eax, edx;
|
|
||||||
cpu_get_msr(IA32_APIC_BASE_MSR, &eax, &edx);
|
|
||||||
|
|
||||||
#ifdef __PHYSICAL_MEMORY_EXTENSION__
|
|
||||||
return (eax & 0xfffff000) | ((edx & 0x0f) << 32);
|
|
||||||
#else
|
|
||||||
return (eax & 0xfffff000);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t read_apic_register(uint32_t reg)
|
|
||||||
{
|
|
||||||
return *((volatile uint32_t *)(cpu_get_apic_base()) + reg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void write_apic_register(uint32_t reg, uint32_t value)
|
|
||||||
{
|
|
||||||
*((volatile uint32_t *)(cpu_get_apic_base() + reg)) = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void enable_apic(void)
|
|
||||||
{
|
|
||||||
/* Hardware enable the Local APIC if it wasn't enabled */
|
|
||||||
cpu_set_apic_base(cpu_get_apic_base());
|
|
||||||
|
|
||||||
/* Set the Spurious Interrupt Vector Register bit 8 to start receiving
|
|
||||||
* interrupts */
|
|
||||||
write_apic_register(0xF0, read_apic_register(0xF0) | 0x100);
|
|
||||||
}
|
|
@ -56,12 +56,6 @@ void pic_remap(int offset_master, int offset_slave)
|
|||||||
outb(PIC2_DATA, a2);
|
outb(PIC2_DATA, a2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pic_disable(void)
|
|
||||||
{
|
|
||||||
outb(PIC1_DATA, 0xff);
|
|
||||||
outb(PIC2_DATA, 0xff);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pic_send_eoi(uint8_t irq)
|
void pic_send_eoi(uint8_t irq)
|
||||||
{
|
{
|
||||||
if (irq >= 8)
|
if (irq >= 8)
|
||||||
|
Loading…
Reference in New Issue
Block a user