17d36db35SAvi Kivity #ifndef CFLAT_APIC_H 27d36db35SAvi Kivity #define CFLAT_APIC_H 37d36db35SAvi Kivity 47d36db35SAvi Kivity #include <stdint.h> 57d36db35SAvi Kivity #include "apic-defs.h" 67d36db35SAvi Kivity 7f66d11caSArbel Moshe extern void *g_apic; 8f66d11caSArbel Moshe extern void *g_ioapic; 9f66d11caSArbel Moshe 107d36db35SAvi Kivity typedef struct { 117d36db35SAvi Kivity uint8_t vector; 127d36db35SAvi Kivity uint8_t delivery_mode:3; 137d36db35SAvi Kivity uint8_t dest_mode:1; 147d36db35SAvi Kivity uint8_t delivery_status:1; 157d36db35SAvi Kivity uint8_t polarity:1; 167d36db35SAvi Kivity uint8_t remote_irr:1; 177d36db35SAvi Kivity uint8_t trig_mode:1; 187d36db35SAvi Kivity uint8_t mask:1; 197d36db35SAvi Kivity uint8_t reserve:7; 207d36db35SAvi Kivity uint8_t reserved[4]; 217d36db35SAvi Kivity uint8_t dest_id; 227d36db35SAvi Kivity } ioapic_redir_entry_t; 237d36db35SAvi Kivity 240172b95cSPeter Xu typedef enum trigger_mode { 250172b95cSPeter Xu TRIGGER_EDGE = 0, 260172b95cSPeter Xu TRIGGER_LEVEL, 270172b95cSPeter Xu TRIGGER_MAX, 280172b95cSPeter Xu } trigger_mode_t; 290172b95cSPeter Xu 307d36db35SAvi Kivity void mask_pic_interrupts(void); 317d36db35SAvi Kivity 320f187a08SSteve Rutherford void eoi(void); 33e0a5cfcaSPaolo Bonzini uint8_t apic_get_tpr(void); 34e0a5cfcaSPaolo Bonzini void apic_set_tpr(uint8_t tpr); 350f187a08SSteve Rutherford 367d36db35SAvi Kivity void ioapic_write_redir(unsigned line, ioapic_redir_entry_t e); 377d36db35SAvi Kivity void ioapic_write_reg(unsigned reg, uint32_t value); 380f187a08SSteve Rutherford ioapic_redir_entry_t ioapic_read_redir(unsigned line); 390f187a08SSteve Rutherford uint32_t ioapic_read_reg(unsigned reg); 400f187a08SSteve Rutherford 4122207960SLiran Alon void ioapic_set_redir(unsigned line, unsigned vec, 42f66d11caSArbel Moshe trigger_mode_t trig_mode); 43f66d11caSArbel Moshe 440f187a08SSteve Rutherford void set_mask(unsigned line, int mask); 457d36db35SAvi Kivity 46f66d11caSArbel Moshe void set_irq_line(unsigned line, int val); 47f66d11caSArbel Moshe 487d36db35SAvi Kivity void enable_apic(void); 497d36db35SAvi Kivity uint32_t apic_read(unsigned reg); 507c5f3ee9SPaolo Bonzini bool apic_read_bit(unsigned reg, int n); 517d36db35SAvi Kivity void apic_write(unsigned reg, uint32_t val); 527d36db35SAvi Kivity void apic_icr_write(uint32_t val, uint32_t dest); 537d36db35SAvi Kivity uint32_t apic_id(void); 547d36db35SAvi Kivity 557d36db35SAvi Kivity int enable_x2apic(void); 56*e38858bcSJim Mattson void disable_apic(void); 57a222b5e2SRadim Krčmář void reset_apic(void); 587d36db35SAvi Kivity 597d36db35SAvi Kivity #endif 60