X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fdevices%2Ficc_bus.h;h=e9aebbdc72106c045d1446b87506d5a20b5ed595;hb=d2d752b3690d4f8ce114864724a69d0282279d58;hp=c51f6f87a6ce198afc53da9abb73d5eb0a1fa256;hpb=e1dcef8166cab60ca0304121ddd176760af0d3d6;p=palacios-OLD.git diff --git a/palacios/include/devices/icc_bus.h b/palacios/include/devices/icc_bus.h index c51f6f8..e9aebbd 100644 --- a/palacios/include/devices/icc_bus.h +++ b/palacios/include/devices/icc_bus.h @@ -23,25 +23,41 @@ struct v3_icc_ops { int (*raise_intr)(struct guest_info * core, int intr_num, void * private_data); + int (*should_deliver)(struct guest_info * core, uint8_t mda, void * private_data); }; /** * */ -int v3_icc_register_apic(struct guest_info * vm, struct vm_device * icc_bus, uint8_t apic_phys_id, struct v3_icc_ops * ops, void * priv_data); - +int v3_icc_register_apic(struct guest_info *core, struct vm_device * icc_bus, uint8_t apic_phys_id, struct v3_icc_ops * ops, void * priv_data); +int v3_icc_register_ioapic(struct v3_vm_info *vm, struct vm_device * icc_bus, uint8_t apic_phys_id); /** - * Send an inter-processor interrupt (IPI) from this local APIC to another local APIC. + * Send an inter-processor interrupt (IPI) from one local APIC to another local APIC. * - * @param icc_bus - The ICC bus that routes IPIs. + * @param icc_bus - The ICC bus that routes IPIs. + * @param apic_src - The source APIC id. * @param apic_num - The remote APIC number. - * @param intr_num - The interrupt number. + * @param icr - A copy of the APIC's ICR. (LAPIC-style ICR, clone from redir table for ioapics) + * @param dfr - A copy of the APIC's DFR (LAPIC-style DFR) + & @param extirq - irq for external interrupts (e.g., from 8259) */ -int v3_icc_send_irq(struct vm_device * icc_bus, uint8_t apic_num, uint32_t irq_num); +int v3_icc_send_ipi(struct vm_device * icc_bus, uint32_t apic_src, uint64_t icr, uint32_t ext_irq); + +#if 0 +/** + * Send an IRQinter-processor interrupt (IPI) from one local APIC to another local APIC. + * + * @param icc_bus - The ICC bus that routes IPIs. + * @param apic_src - The source APIC id. + * @param apic_num - The remote APIC number. + * @param icrlo - The low 32 bites of the APIC's ICR. + */ +int v3_icc_send_irq(struct vm_device * icc_bus, uint32_t ioapic_src, uint8_t apic_num, uint8_t irq); +#endif #endif /* ICC_BUS_H_ */