コード例 #1
0
ファイル: vmx_interrupt.c プロジェクト: amodj/Utopia
void hvm_pci_intx_assert(
        struct domain *d, unsigned int device, unsigned int intx)
{
    struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
    unsigned int gsi;

    ASSERT((device <= 31) && (intx <= 3));

    if ( __test_and_set_bit(device * 4 + intx, &hvm_irq->pci_intx.i) )
        return;
    gsi = hvm_pci_intx_gsi(device, intx);
    if ( ++hvm_irq->gsi_assert_count[gsi] == 1 )
        viosapic_set_irq(d, gsi, 1);
}
コード例 #2
0
ファイル: irq.c プロジェクト: jonludlam/xen-arm
static void __hvm_pci_intx_deassert(
    struct domain *d, unsigned int device, unsigned int intx)
{
    struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
    unsigned int gsi, link, isa_irq;

    ASSERT((device <= 31) && (intx <= 3));

    if ( !__test_and_clear_bit(device*4 + intx, &hvm_irq->pci_intx.i) )
        return;

    gsi = hvm_pci_intx_gsi(device, intx);
    --hvm_irq->gsi_assert_count[gsi];

    link    = hvm_pci_intx_link(device, intx);
    isa_irq = hvm_irq->pci_link.route[link];
    if ( (--hvm_irq->pci_link_assert_count[link] == 0) && isa_irq &&
            (--hvm_irq->gsi_assert_count[isa_irq] == 0) )
        deassert_irq(d, isa_irq);
}