Revision 822557eb hw/hpet.c

b/hw/hpet.c
29 29
#include "console.h"
30 30
#include "qemu-timer.h"
31 31
#include "hpet_emul.h"
32
#include "sysbus.h"
32 33

  
33 34
//#define HPET_DEBUG
34 35
#ifdef HPET_DEBUG
......
54 55
} HPETTimer;
55 56

  
56 57
typedef struct HPETState {
58
    SysBusDevice busdev;
57 59
    uint64_t hpet_offset;
58
    qemu_irq *irqs;
60
    qemu_irq irqs[HPET_NUM_IRQ_ROUTES];
59 61
    HPETTimer timer[HPET_NUM_TIMERS];
60 62

  
61 63
    /* Memory-mapped, software visible registers */
......
565 567
    hpet_ram_writel,
566 568
};
567 569

  
568
static void hpet_reset(void *opaque)
570
static void hpet_reset(DeviceState *d)
569 571
{
570
    HPETState *s = opaque;
572
    HPETState *s = FROM_SYSBUS(HPETState, sysbus_from_qdev(d));
571 573
    int i;
572 574
    static int count = 0;
573 575

  
......
600 602
    count = 1;
601 603
}
602 604

  
603

  
604
void hpet_init(qemu_irq *irq)
605
static int hpet_init(SysBusDevice *dev)
605 606
{
607
    HPETState *s = FROM_SYSBUS(HPETState, dev);
606 608
    int i, iomemtype;
607 609
    HPETTimer *timer;
608
    HPETState *s;
609

  
610
    DPRINTF ("hpet_init\n");
611 610

  
612
    s = qemu_mallocz(sizeof(HPETState));
611
    assert(!hpet_statep);
613 612
    hpet_statep = s;
614
    s->irqs = irq;
613
    for (i = 0; i < HPET_NUM_IRQ_ROUTES; i++) {
614
        sysbus_init_irq(dev, &s->irqs[i]);
615
    }
615 616
    for (i = 0; i < HPET_NUM_TIMERS; i++) {
616 617
        timer = &s->timer[i];
617 618
        timer->qemu_timer = qemu_new_timer(vm_clock, hpet_timer, timer);
618 619
        timer->tn = i;
619 620
        timer->state = s;
620 621
    }
621
    vmstate_register(-1, &vmstate_hpet, s);
622
    qemu_register_reset(hpet_reset, s);
622

  
623 623
    /* HPET Area */
624 624
    iomemtype = cpu_register_io_memory(hpet_ram_read,
625 625
                                       hpet_ram_write, s);
626
    cpu_register_physical_memory(HPET_BASE, 0x400, iomemtype);
626
    sysbus_init_mmio(dev, 0x400, iomemtype);
627
    return 0;
627 628
}
629

  
630
static SysBusDeviceInfo hpet_device_info = {
631
    .qdev.name    = "hpet",
632
    .qdev.size    = sizeof(HPETState),
633
    .qdev.no_user = 1,
634
    .qdev.vmsd    = &vmstate_hpet,
635
    .qdev.reset   = hpet_reset,
636
    .init         = hpet_init,
637
};
638

  
639
static void hpet_register_device(void)
640
{
641
    sysbus_register_withprop(&hpet_device_info);
642
}
643

  
644
device_init(hpet_register_device)

Also available in: Unified diff