// Mask all interrupts until they are enabled....
ioapic->redir_tbl[i].mask = 1;
}
+
+ // special case redir_tbl[0] for pin 0 as ExtInt for Virtual Wire Mode
+ ioapic->redir_tbl[0].del_mode=EXTINT;
+ ioapic->redir_tbl[0].mask=0;
}
}
}
+ PrintDebug("ioapic %u: IOAPIC Read at %p gave value 0x%x\n", ioapic->ioapic_id.val, (void *)guest_addr, *op_val);
+
return length;
}
irq_entry = &(ioapic->redir_tbl[irq]);
if (irq_entry->mask == 0) {
+
PrintDebug("ioapic %u: IOAPIC Signalling APIC to raise INTR %d\n", ioapic->ioapic_id.val, irq_entry->vec);
+
// the format of the redirection table entry is just slightly
// different than that of the lapic's cmd register, which is the other
// way an IPI is initiated. So we will translate
icr.dst_shorthand=0; // no shorthand
icr.rsvd2=0;
- v3_icc_send_ipi(ioapic->icc_bus, ioapic->ioapic_id.val,icr.val);
+ // Note: 0 yhere is "cluster model", but it should be irrelevant
+ // since we are sending this as a physical destination
+ v3_icc_send_ipi(ioapic->icc_bus, ioapic->ioapic_id.val,icr.val, 0, irq);
}
return 0;