~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to hw/arm_gic.c

  • Committer: blueswir1
  • Date: 2007-11-25 08:48:16 UTC
  • Revision ID: git-v1:b76482e76560345c00e7d6c89199ced204a926d2
 Fix buffer mux handling for unconnected serial ports


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3737 c046a42c-6fe2-441c-8c8c-71466251a162

Show diffs side-by-side

added added

removed removed

Lines of Context:
62
62
#define GIC_TEST_MODEL(irq) s->irq_state[irq].model
63
63
#define GIC_SET_LEVEL(irq, cm) s->irq_state[irq].level = (cm)
64
64
#define GIC_CLEAR_LEVEL(irq, cm) s->irq_state[irq].level &= ~(cm)
65
 
#define GIC_TEST_LEVEL(irq, cm) ((s->irq_state[irq].level & (cm)) != 0)
 
65
#define GIC_TEST_LEVEL(irq, cm) (s->irq_state[irq].level & (cm)) != 0
66
66
#define GIC_SET_TRIGGER(irq) s->irq_state[irq].trigger = 1
67
67
#define GIC_CLEAR_TRIGGER(irq) s->irq_state[irq].trigger = 0
68
68
#define GIC_TEST_TRIGGER(irq) s->irq_state[irq].trigger
650
650
#endif
651
651
}
652
652
 
653
 
static void gic_save(QEMUFile *f, void *opaque)
654
 
{
655
 
    gic_state *s = (gic_state *)opaque;
656
 
    int i;
657
 
    int j;
658
 
 
659
 
    qemu_put_be32(f, s->enabled);
660
 
    for (i = 0; i < NCPU; i++) {
661
 
        qemu_put_be32(f, s->cpu_enabled[i]);
662
 
#ifndef NVIC
663
 
        qemu_put_be32(f, s->irq_target[i]);
664
 
#endif
665
 
        for (j = 0; j < 32; j++)
666
 
            qemu_put_be32(f, s->priority1[j][i]);
667
 
        for (j = 0; j < GIC_NIRQ; j++)
668
 
            qemu_put_be32(f, s->last_active[j][i]);
669
 
        qemu_put_be32(f, s->priority_mask[i]);
670
 
        qemu_put_be32(f, s->running_irq[i]);
671
 
        qemu_put_be32(f, s->running_priority[i]);
672
 
        qemu_put_be32(f, s->current_pending[i]);
673
 
    }
674
 
    for (i = 0; i < GIC_NIRQ - 32; i++) {
675
 
        qemu_put_be32(f, s->priority2[i]);
676
 
    }
677
 
    for (i = 0; i < GIC_NIRQ; i++) {
678
 
        qemu_put_byte(f, s->irq_state[i].enabled);
679
 
        qemu_put_byte(f, s->irq_state[i].pending);
680
 
        qemu_put_byte(f, s->irq_state[i].active);
681
 
        qemu_put_byte(f, s->irq_state[i].level);
682
 
        qemu_put_byte(f, s->irq_state[i].model);
683
 
        qemu_put_byte(f, s->irq_state[i].trigger);
684
 
    }
685
 
}
686
 
 
687
 
static int gic_load(QEMUFile *f, void *opaque, int version_id)
688
 
{
689
 
    gic_state *s = (gic_state *)opaque;
690
 
    int i;
691
 
    int j;
692
 
 
693
 
    if (version_id != 1)
694
 
        return -EINVAL;
695
 
 
696
 
    s->enabled = qemu_get_be32(f);
697
 
    for (i = 0; i < NCPU; i++) {
698
 
        s->cpu_enabled[i] = qemu_get_be32(f);
699
 
#ifndef NVIC
700
 
        s->irq_target[i] = qemu_get_be32(f);
701
 
#endif
702
 
        for (j = 0; j < 32; j++)
703
 
            s->priority1[j][i] = qemu_get_be32(f);
704
 
        for (j = 0; j < GIC_NIRQ; j++)
705
 
            s->last_active[j][i] = qemu_get_be32(f);
706
 
        s->priority_mask[i] = qemu_get_be32(f);
707
 
        s->running_irq[i] = qemu_get_be32(f);
708
 
        s->running_priority[i] = qemu_get_be32(f);
709
 
        s->current_pending[i] = qemu_get_be32(f);
710
 
    }
711
 
    for (i = 0; i < GIC_NIRQ - 32; i++) {
712
 
        s->priority2[i] = qemu_get_be32(f);
713
 
    }
714
 
    for (i = 0; i < GIC_NIRQ; i++) {
715
 
        s->irq_state[i].enabled = qemu_get_byte(f);
716
 
        s->irq_state[i].pending = qemu_get_byte(f);
717
 
        s->irq_state[i].active = qemu_get_byte(f);
718
 
        s->irq_state[i].level = qemu_get_byte(f);
719
 
        s->irq_state[i].model = qemu_get_byte(f);
720
 
        s->irq_state[i].trigger = qemu_get_byte(f);
721
 
    }
722
 
 
723
 
    return 0;
724
 
}
725
 
 
726
653
static gic_state *gic_init(uint32_t base, qemu_irq *parent_irq)
727
654
{
728
655
    gic_state *s;
742
669
                                 iomemtype);
743
670
    s->base = base;
744
671
    gic_reset(s);
745
 
    register_savevm("arm_gic", -1, 1, gic_save, gic_load, s);
746
672
    return s;
747
673
}