@@ -3,8 +3,8 @@
#include "msr.h"
#include "processor.h"
-static void *g_apic = (void *)0xfee00000;
-static void *g_ioapic = (void *)0xfec00000;
+void *g_apic = (void *)0xfee00000;
+void *g_ioapic = (void *)0xfec00000;
struct apic_ops {
u32 (*reg_read)(unsigned reg);
@@ -187,6 +187,18 @@ ioapic_redir_entry_t ioapic_read_redir(unsigned line)
}
+void set_ioapic_redir(unsigned line, unsigned vec,
+ trigger_mode_t trig_mode)
+{
+ ioapic_redir_entry_t e = {
+ .vector = vec,
+ .delivery_mode = 0,
+ .trig_mode = trig_mode,
+ };
+
+ ioapic_write_redir(line, e);
+}
+
void set_mask(unsigned line, int mask)
{
ioapic_redir_entry_t e = ioapic_read_redir(line);
@@ -195,6 +207,11 @@ void set_mask(unsigned line, int mask)
ioapic_write_redir(line, e);
}
+void set_irq_line(unsigned line, int val)
+{
+ asm volatile("out %0, %1" : : "a"((u8)val), "d"((u16)(0x2000 + line)));
+}
+
void enable_apic(void)
{
printf("enabling apic\n");
@@ -4,6 +4,9 @@
#include <stdint.h>
#include "apic-defs.h"
+extern void *g_apic;
+extern void *g_ioapic;
+
typedef struct {
uint8_t vector;
uint8_t delivery_mode:3;
@@ -35,8 +38,13 @@ void ioapic_write_reg(unsigned reg, uint32_t value);
ioapic_redir_entry_t ioapic_read_redir(unsigned line);
uint32_t ioapic_read_reg(unsigned reg);
+void set_ioapic_redir(unsigned line, unsigned vec,
+ trigger_mode_t trig_mode);
+
void set_mask(unsigned line, int mask);
+void set_irq_line(unsigned line, int val);
+
void enable_apic(void);
uint32_t apic_read(unsigned reg);
bool apic_read_bit(unsigned reg, int n);
@@ -5,23 +5,6 @@
#include "desc.h"
#include "isr.h"
-static void set_ioapic_redir(unsigned line, unsigned vec,
- trigger_mode_t trig_mode)
-{
- ioapic_redir_entry_t e = {
- .vector = vec,
- .delivery_mode = 0,
- .trig_mode = trig_mode,
- };
-
- ioapic_write_redir(line, e);
-}
-
-static void set_irq_line(unsigned line, int val)
-{
- asm volatile("out %0, %1" : : "a"((u8)val), "d"((u16)(0x2000 + line)));
-}
-
static void toggle_irq_line(unsigned line)
{
set_irq_line(line, 1);