use bitfield::bitfield;
use crate::arch::intr::DeliveryMode;
pub const IOREGSEL: u64 = 0x00;
pub const IOWIN: u64 = 0x10;
pub const IOAPICID: u8 = 0x00;
pub const IOAPICVER: u8 = 0x01;
pub const IOAPICARB: u8 = 0x02;
pub const IOREDTBL_BASE: u8 = 0x10;
pub const IOREDTBL_MAX: u8 = 0x3f;
pub const NUM_PINS: u8 = 24;
pub const IOAPIC_VER: u8 = 0x11;
bitfield! {
#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
pub struct RegId(u32);
impl Debug;
impl new;
pub u8, id, set_id : 27, 24;
}
bitfield! {
#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
pub struct RegVer(u32);
impl Debug;
impl new;
pub u8, version, set_version : 7, 0;
pub u8, max_entry, set_max_entry : 23, 16;
}
bitfield! {
#[derive(Copy, Clone, Default, PartialEq, Eq, Hash)]
pub struct RedirectEntry(u64);
impl Debug;
pub u8, vector, set_vector : 7, 0;
pub u8, from into DeliveryMode, delivery_mode, set_delivery_mode : 10, 8;
pub dest_mode, set_dest_mode : 11;
pub delivery_status, set_delivery_status : 12;
pub riority, set_priority : 13;
pub irr, set_irr : 14;
pub trigger_mode, set_trigger_mode : 15;
pub masked, set_masked : 16;
pub u8, virt_dest_id_hi, set_virt_dest_id_hi : 55, 49;
pub u8, dest_id, set_dest_id : 63, 56;
}