623
618
uint32_t io_base, uint16_t size,
627
target_phys_addr_t save_base;
629
s = qemu_mallocz(sizeof(m48t59_t));
632
s->buffer = qemu_mallocz(size);
639
s->mem_base = mem_base;
640
s->io_base = io_base;
625
dev = qdev_create(NULL, "m48t59");
626
qdev_prop_set_uint32(dev, "type", type);
627
qdev_prop_set_uint32(dev, "size", size);
628
qdev_prop_set_uint32(dev, "io_base", io_base);
630
s = sysbus_from_qdev(dev);
631
sysbus_connect_irq(s, 0, IRQ);
643
632
if (io_base != 0) {
644
633
register_ioport_read(io_base, 0x04, 1, NVRAM_readb, s);
645
634
register_ioport_write(io_base, 0x04, 1, NVRAM_writeb, s);
647
636
if (mem_base != 0) {
648
s->mem_index = cpu_register_io_memory(0, nvram_read, nvram_write, s);
649
cpu_register_physical_memory(mem_base, size, s->mem_index);
637
sysbus_mmio_map(s, 0, mem_base);
640
d = FROM_SYSBUS(m48t59_t, s);
645
static int m48t59_init1(SysBusDevice *dev)
647
m48t59_t *s = FROM_SYSBUS(m48t59_t, dev);
650
s->buffer = qemu_mallocz(s->size);
651
sysbus_init_irq(dev, &s->IRQ);
653
mem_index = cpu_register_io_memory(nvram_read, nvram_write, s);
654
sysbus_init_mmio(dev, s->size, mem_index);
652
657
s->alrm_timer = qemu_new_timer(vm_clock, &alarm_cb, s);
653
658
s->wd_timer = qemu_new_timer(vm_clock, &watchdog_cb, s);
656
660
qemu_get_timedate(&s->alarm, 0);
658
662
qemu_register_reset(m48t59_reset, s);
659
save_base = mem_base ? mem_base : io_base;
660
register_savevm("m48t59", save_base, 1, m48t59_save, m48t59_load, s);
663
register_savevm("m48t59", -1, 1, m48t59_save, m48t59_load, s);
667
static SysBusDeviceInfo m48t59_info = {
668
.init = m48t59_init1,
669
.qdev.name = "m48t59",
670
.qdev.size = sizeof(m48t59_t),
671
.qdev.props = (Property[]) {
672
DEFINE_PROP_UINT32("size", m48t59_t, size, -1),
673
DEFINE_PROP_UINT32("type", m48t59_t, type, -1),
674
DEFINE_PROP_HEX32( "io_base", m48t59_t, io_base, 0),
675
DEFINE_PROP_END_OF_LIST(),
679
static void m48t59_register_devices(void)
681
sysbus_register_withprop(&m48t59_info);
684
device_init(m48t59_register_devices)