pirq
int src, pirq = 0, rirq = 0;
pirq = (src & sc->pch.hwch)? 1 : 0;
pirq = 1;
if (!pirq && !rirq)
DEB(printf("ess_intr: pirq:%d rirq:%d\n",pirq,rirq));
if (pirq) {
struct pirq *pirq;
pirq = &pirqs[pin - 1];
pthread_mutex_lock(&pirq->lock);
if (pirq->reg != (val & (PIRQ_DIS | PIRQ_IRQ))) {
if (pirq->active_count != 0 && pirq_valid_irq(pirq->reg))
vm_isa_deassert_irq(ctx, pirq->reg & PIRQ_IRQ, -1);
pirq->reg = val & (PIRQ_DIS | PIRQ_IRQ);
if (pirq->active_count != 0 && pirq_valid_irq(pirq->reg))
vm_isa_assert_irq(ctx, pirq->reg & PIRQ_IRQ, -1);
pthread_mutex_unlock(&pirq->lock);
struct pirq *pirq;
pirq = &pirqs[pin - 1];
pthread_mutex_lock(&pirq->lock);
pirq->active_count++;
if (pirq->active_count == 1 && pirq_valid_irq(pirq->reg)) {
vm_isa_assert_irq(pi->pi_vmctx, pirq->reg & PIRQ_IRQ,
pthread_mutex_unlock(&pirq->lock);
pthread_mutex_unlock(&pirq->lock);
struct pirq *pirq;
pirq = &pirqs[pin - 1];
pthread_mutex_lock(&pirq->lock);
pirq->active_count--;
if (pirq->active_count == 0 && pirq_valid_irq(pirq->reg)) {
vm_isa_deassert_irq(pi->pi_vmctx, pirq->reg & PIRQ_IRQ,
pthread_mutex_unlock(&pirq->lock);
pthread_mutex_unlock(&pirq->lock);