xref: /kvm-unit-tests/lib/x86/apic.h (revision 7c5f3ee9880d82563b943a62c6779c2cc14284a1)
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 
77d36db35SAvi Kivity typedef struct {
87d36db35SAvi Kivity     uint8_t vector;
97d36db35SAvi Kivity     uint8_t delivery_mode:3;
107d36db35SAvi Kivity     uint8_t dest_mode:1;
117d36db35SAvi Kivity     uint8_t delivery_status:1;
127d36db35SAvi Kivity     uint8_t polarity:1;
137d36db35SAvi Kivity     uint8_t remote_irr:1;
147d36db35SAvi Kivity     uint8_t trig_mode:1;
157d36db35SAvi Kivity     uint8_t mask:1;
167d36db35SAvi Kivity     uint8_t reserve:7;
177d36db35SAvi Kivity     uint8_t reserved[4];
187d36db35SAvi Kivity     uint8_t dest_id;
197d36db35SAvi Kivity } ioapic_redir_entry_t;
207d36db35SAvi Kivity 
217d36db35SAvi Kivity void mask_pic_interrupts(void);
227d36db35SAvi Kivity 
230f187a08SSteve Rutherford void eoi(void);
240f187a08SSteve Rutherford 
257d36db35SAvi Kivity void ioapic_write_redir(unsigned line, ioapic_redir_entry_t e);
267d36db35SAvi Kivity void ioapic_write_reg(unsigned reg, uint32_t value);
270f187a08SSteve Rutherford ioapic_redir_entry_t ioapic_read_redir(unsigned line);
280f187a08SSteve Rutherford uint32_t ioapic_read_reg(unsigned reg);
290f187a08SSteve Rutherford 
300f187a08SSteve Rutherford void set_mask(unsigned line, int mask);
317d36db35SAvi Kivity 
327d36db35SAvi Kivity void enable_apic(void);
337d36db35SAvi Kivity uint32_t apic_read(unsigned reg);
34*7c5f3ee9SPaolo Bonzini bool apic_read_bit(unsigned reg, int n);
357d36db35SAvi Kivity void apic_write(unsigned reg, uint32_t val);
367d36db35SAvi Kivity void apic_icr_write(uint32_t val, uint32_t dest);
377d36db35SAvi Kivity uint32_t apic_id(void);
387d36db35SAvi Kivity 
397d36db35SAvi Kivity int enable_x2apic(void);
407d36db35SAvi Kivity 
417d36db35SAvi Kivity #endif
42