X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fio_apic.c;h=7a0c6e8f18db4cb3bc9111be7ee1877b0c41e82f;hb=0e29a343765b225251f5634fb34aa6a60085a0bd;hp=a7418001bbf3c27131f7c9171b8269728524e805;hpb=ac70737b315c43227fcafa5fd0726a73d3a2be33;p=palacios.git diff --git a/palacios/src/devices/io_apic.c b/palacios/src/devices/io_apic.c index a741800..7a0c6e8 100644 --- a/palacios/src/devices/io_apic.c +++ b/palacios/src/devices/io_apic.c @@ -157,8 +157,8 @@ static void init_ioapic_state(struct io_apic_state * ioapic, uint32_t id) { } // 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; + // ioapic->redir_tbl[0].del_mode=EXTINT; + // ioapic->redir_tbl[0].mask=0; } @@ -184,21 +184,21 @@ static int ioapic_read(struct guest_info * core, addr_t guest_addr, void * dst, case IOAPIC_ARB_REG: *op_val = ioapic->ioapic_arb_id.val; break; - default: - { - uint_t redir_index = (ioapic->index_reg - IOAPIC_REDIR_BASE_REG) >> 1; - uint_t hi_val = (ioapic->index_reg - IOAPIC_REDIR_BASE_REG) % 1; - - if (redir_index > 0x3f) { - PrintError("ioapic %u: Invalid redirection table entry %x\n", ioapic->ioapic_id.id, (uint32_t)redir_index); - return -1; - } - if (hi_val) { - *op_val = ioapic->redir_tbl[redir_index].hi; - } else { - *op_val = ioapic->redir_tbl[redir_index].lo; - } + default: { + uint_t redir_index = (ioapic->index_reg - IOAPIC_REDIR_BASE_REG) >> 1; + uint_t hi_val = (ioapic->index_reg - IOAPIC_REDIR_BASE_REG) % 1; + + if (redir_index > 0x3f) { + PrintError("ioapic %u: Invalid redirection table entry %x\n", ioapic->ioapic_id.id, (uint32_t)redir_index); + return -1; + } + + if (hi_val) { + *op_val = ioapic->redir_tbl[redir_index].hi; + } else { + *op_val = ioapic->redir_tbl[redir_index].lo; } + } } } @@ -291,9 +291,12 @@ static int ioapic_raise_irq(struct v3_vm_info * vm, void * private_data, int irq icr.rem_rd_status=0; icr.dst_shorthand=0; // no shorthand icr.rsvd2=0; + + // Note: 0 yhere is "cluster model", but it should be irrelevant + // since we are sending this as a physical destination PrintDebug("io apic %u: raising irq %u on ICC bus.\n", ioapic->ioapic_id.id, irq); - v3_icc_send_ipi(ioapic->icc_bus, ioapic->ioapic_id.id,icr.val, irq); + v3_icc_send_ipi(ioapic->icc_bus, ioapic->ioapic_id.id,icr.val, 0, irq); } return 0;