示例#1
0
void do_irq()
{
  unsigned int irq = gic_acknowledge_irq();
  if (irq == SPURIOUS_IRQ)
    return;

  if (table[irq])
    table[irq]();
  gic_complete_irq(irq);
}
示例#2
0
文件: arm_gic.c 项目: AmesianX/winkvm
static uint32_t gic_cpu_read(void *opaque, target_phys_addr_t offset)
{
    gic_state *s = (gic_state *)opaque;
    offset -= s->base;
    switch (offset) {
    case 0x00: /* Control */
        return s->cpu_enabled;
    case 0x04: /* Priority mask */
        return s->priority_mask;
    case 0x08: /* Binary Point */
        /* ??? Not implemented.  */
        return 0;
    case 0x0c: /* Acknowledge */
        return gic_acknowledge_irq(s);
    case 0x14: /* Runing Priority */
        return s->running_priority;
    case 0x18: /* Highest Pending Interrupt */
        return s->current_pending;
    default:
        cpu_abort (cpu_single_env, "gic_cpu_writeb: Bad offset %x\n", offset);
        return 0;
    }
}