X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fdevices%2Fapic_regs.h;h=4d4f54094179f17527ee67f7af614ada92bade90;hb=2bc23d57beaa42446ee7db3f0c7052086f88b0c5;hp=ea1d55a7ba2c612374d6d723e309ac5288ca54fb;hpb=bd18ee6111c1b75fa0bbd670307d1ec1c622f91f;p=palacios.git diff --git a/palacios/include/devices/apic_regs.h b/palacios/include/devices/apic_regs.h index ea1d55a..4d4f540 100644 --- a/palacios/include/devices/apic_regs.h +++ b/palacios/include/devices/apic_regs.h @@ -20,293 +20,304 @@ struct lapic_id_reg { - union { - uint32_t val; - struct { - uint_t rsvd : 24; - uint_t apic_id : 8; + union { + uint32_t val; + struct { + uint_t rsvd : 24; + uint_t apic_id : 8; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct apic_ver_reg { - union { - uint32_t val; - struct { - uint_t ver : 8; - uint_t rsvd1 : 8; - uint_t max_lvts : 8; - uint_t rsvd2 : 7; - uint_t ext_reg_present : 1; + union { + uint32_t val; + struct { + uint_t ver : 8; + uint_t rsvd1 : 8; + uint_t max_lvts : 8; + uint_t rsvd2 : 7; + uint_t ext_reg_present : 1; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct ext_apic_ctrl_reg { - union { - uint32_t val; - struct { - uint_t ver : 1; - uint_t seoi_enable : 1; - uint_t ext_id_enable : 1; - uint_t rsvd2 : 29; + union { + uint32_t val; + struct { + uint_t ver : 1; + uint_t seoi_enable : 1; + uint_t ext_id_enable : 1; + uint_t rsvd2 : 29; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); + struct local_vec_tbl_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t msg_type : 3; - uint_t rsvd1 : 1; - uint_t del_status : 1; - uint_t rsvd2 : 1; - uint_t rem_irr : 1; - uint_t trig_mode : 1; - uint_t mask : 1; - uint_t tmr_mode : 1; - uint_t rsvd3 : 14; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t msg_type : 3; + uint_t rsvd1 : 1; + uint_t del_status : 1; + uint_t rsvd2 : 1; + uint_t rem_irr : 1; + uint_t trig_mode : 1; + uint_t mask : 1; + uint_t tmr_mode : 1; + uint_t rsvd3 : 14; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct tmr_vec_tbl_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t rsvd : 4; - uint_t del_status : 1; - uint_t rsvd2 : 3; - uint_t mask : 1; - uint_t tmr_mode : 1; - uint_t rsvd3 : 14; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t rsvd : 4; + uint_t del_status : 1; + uint_t rsvd2 : 3; + uint_t mask : 1; +#define APIC_TMR_ONESHOT 0 +#define APIC_TMR_PERIODIC 1 + uint_t tmr_mode : 1; + uint_t rsvd3 : 14; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); -struct div_cfg_reg { - union { - uint32_t val; - struct { - uint_t div_val : 2; - uint_t rsvd : 1; - uint_t div_val2 : 1; - uint_t rsvd2 : 28; +struct tmr_div_cfg_reg { +#define APIC_TMR_DIV1 0xb // 1011 +#define APIC_TMR_DIV2 0x0 // 0000 +#define APIC_TMR_DIV4 0x1 // 0001 +#define APIC_TMR_DIV8 0x2 // 0010 +#define APIC_TMR_DIV16 0x3 // 0011 +#define APIC_TMR_DIV32 0x8 // 1000 +#define APIC_TMR_DIV64 0x9 // 1001 +#define APIC_TMR_DIV128 0xa // 1010 + union { + uint32_t val; + struct { + uint_t div_val : 2; + uint_t rsvd1 : 1; + uint_t div_val2 : 1; + uint_t rsvd2 : 28; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct lint_vec_tbl_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t msg_type : 3; - uint_t rsvd1 : 1; - uint_t del_status : 1; - uint_t rsvd2 : 1; - uint_t rem_irr : 1; - uint_t trig_mode : 1; - uint_t mask : 1; - uint_t rsvd3 : 15; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t msg_type : 3; + uint_t rsvd1 : 1; + uint_t del_status : 1; + uint_t rsvd2 : 1; + uint_t rem_irr : 1; + uint_t trig_mode : 1; + uint_t mask : 1; + uint_t rsvd3 : 15; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct perf_ctr_loc_vec_tbl_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t msg_type : 3; - uint_t rsvd1 : 1; - uint_t del_status : 1; - uint_t rsvd2 : 3; - uint_t mask : 1; - uint_t rsvd3 : 15; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t msg_type : 3; + uint_t rsvd1 : 1; + uint_t del_status : 1; + uint_t rsvd2 : 3; + uint_t mask : 1; + uint_t rsvd3 : 15; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct therm_loc_vec_tbl_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t msg_type : 3; - uint_t rsvd1 : 1; - uint_t del_status : 1; - uint_t rsvd2 : 3; - uint_t mask : 1; - uint_t rsvd3 : 15; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t msg_type : 3; + uint_t rsvd1 : 1; + uint_t del_status : 1; + uint_t rsvd2 : 3; + uint_t mask : 1; + uint_t rsvd3 : 15; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct err_vec_tbl_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t msg_type : 3; - uint_t rsvd1 : 1; - uint_t del_status : 1; - uint_t rsvd2 : 3; - uint_t mask : 1; - uint_t rsvd3 : 15; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t msg_type : 3; + uint_t rsvd1 : 1; + uint_t del_status : 1; + uint_t rsvd2 : 3; + uint_t mask : 1; + uint_t rsvd3 : 15; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct err_status_reg { - union { - uint32_t val; - struct { - uint_t rsvd1 : 2; - uint_t sent_acc_err : 1; - uint_t recv_acc_err : 1; - uint_t rsvd2 : 1; - uint_t sent_ill_err : 1; - uint_t recv_ill_err : 1; - uint_t ill_reg_addr : 1; - uint_t rsvd3 : 24; + union { + uint32_t val; + struct { + uint_t rsvd1 : 2; + uint_t sent_acc_err : 1; + uint_t recv_acc_err : 1; + uint_t rsvd2 : 1; + uint_t sent_ill_err : 1; + uint_t recv_ill_err : 1; + uint_t ill_reg_addr : 1; + uint_t rsvd3 : 24; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct spurious_int_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t apic_soft_en : 1; - uint_t foc_cpu_chk : 1; - uint_t rsvd1 : 22; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t apic_soft_en : 1; + uint_t foc_cpu_chk : 1; + uint_t rsvd1 : 22; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct int_cmd_reg { - union { - uint64_t val; - - struct { - uint32_t lo; - uint32_t hi; - } __attribute__((packed)); - - struct { - uint_t vec : 8; - uint_t msg_type : 3; - uint_t dst_mode : 1; - uint_t del_status : 1; - uint_t rsvd1 : 1; - uint_t lvl : 1; - uint_t trig_mode : 1; - uint_t rem_rd_status : 2; - uint_t dst_shorthand : 2; - uint64_t rsvd2 : 36; - uint32_t dst : 8; + union { + uint64_t val; + + struct { + uint32_t lo; + uint32_t hi; + } __attribute__((packed)); + + struct { + uint_t vec : 8; + uint_t msg_type : 3; + uint_t dst_mode : 1; + uint_t del_status : 1; + uint_t rsvd1 : 1; + uint_t lvl : 1; + uint_t trig_mode : 1; + uint_t rem_rd_status : 2; + uint_t dst_shorthand : 2; + uint64_t rsvd2 : 36; + uint32_t dst : 8; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); -struct loc_dst_reg { - union { - uint32_t val; - struct { - uint_t rsvd1 : 24; - uint_t dst_log_id : 8; +struct log_dst_reg { + union { + uint32_t val; + struct { + uint_t rsvd1 : 24; + uint_t dst_log_id : 8; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct dst_fmt_reg { - union { - uint32_t val; - struct { - uint_t rsvd1 : 28; - uint_t model : 4; + union { + uint32_t val; + struct { + uint_t rsvd1 : 28; + uint_t model : 4; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct arb_prio_reg { - union { - uint32_t val; - struct { - uint_t arb_prio_sub : 4; - uint_t arb_prio : 4; - uint_t rsvd1 : 24; + union { + uint32_t val; + struct { + uint_t arb_prio_sub : 4; + uint_t arb_prio : 4; + uint_t rsvd1 : 24; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct task_prio_reg { - union { - uint32_t val; - struct { - uint_t task_prio_sub : 4; - uint_t task_prio : 4; - uint_t rsvd1 : 24; + union { + uint32_t val; + struct { + uint_t task_prio_sub : 4; + uint_t task_prio : 4; + uint_t rsvd1 : 24; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct proc_prio_reg { - union { - uint32_t val; - struct { - uint_t proc_prio_sub : 4; - uint_t proc_prio : 4; - uint_t rsvd1 : 24; + union { + uint32_t val; + struct { + uint_t proc_prio_sub : 4; + uint_t proc_prio : 4; + uint_t rsvd1 : 24; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct ext_apic_feature_reg { - union { - uint32_t val; - struct { - uint_t int_en_reg_cap : 1; - uint_t spec_eoi_cap : 1; - uint_t ext_apic_id_cap: 1; - uint_t rsvd1 : 13; - uint_t ext_lvt_cnt : 8; - uint_t rsvd2 : 8; + union { + uint32_t val; + struct { + uint_t int_en_reg_cap : 1; + uint_t spec_eoi_cap : 1; + uint_t ext_apic_id_cap: 1; + uint_t rsvd1 : 13; + uint_t ext_lvt_cnt : 8; + uint_t rsvd2 : 8; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed)); struct spec_eoi_reg { - union { - uint32_t val; - struct { - uint_t vec : 8; - uint_t rsvd1 : 24; + union { + uint32_t val; + struct { + uint_t vec : 8; + uint_t rsvd1 : 24; + } __attribute__((packed)); } __attribute__((packed)); - } __attribute__((packed)); } __attribute__((packed));