Commit bda42033253c0615cf8d3d4db9ad2fc38bfe5403
1 parent
1baffa46
Sparc64: convert memory to qdev
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Showing
1 changed file
with
59 additions
and
4 deletions
hw/sun4u.c
| @@ -401,6 +401,63 @@ static void prom_register_devices(void) | @@ -401,6 +401,63 @@ static void prom_register_devices(void) | ||
| 401 | 401 | ||
| 402 | device_init(prom_register_devices); | 402 | device_init(prom_register_devices); |
| 403 | 403 | ||
| 404 | + | ||
| 405 | +typedef struct RamDevice | ||
| 406 | +{ | ||
| 407 | + SysBusDevice busdev; | ||
| 408 | + uint32_t size; // XXX | ||
| 409 | +} RamDevice; | ||
| 410 | + | ||
| 411 | +/* System RAM */ | ||
| 412 | +static void ram_init1(SysBusDevice *dev) | ||
| 413 | +{ | ||
| 414 | + ram_addr_t RAM_size, ram_offset; | ||
| 415 | + RamDevice *d = FROM_SYSBUS(RamDevice, dev); | ||
| 416 | + | ||
| 417 | + RAM_size = d->size; | ||
| 418 | + | ||
| 419 | + ram_offset = qemu_ram_alloc(RAM_size); | ||
| 420 | + sysbus_init_mmio(dev, RAM_size, ram_offset); | ||
| 421 | +} | ||
| 422 | + | ||
| 423 | +static void ram_init(target_phys_addr_t addr, ram_addr_t RAM_size) | ||
| 424 | +{ | ||
| 425 | + DeviceState *dev; | ||
| 426 | + SysBusDevice *s; | ||
| 427 | + RamDevice *d; | ||
| 428 | + | ||
| 429 | + /* allocate RAM */ | ||
| 430 | + dev = qdev_create(NULL, "memory"); | ||
| 431 | + s = sysbus_from_qdev(dev); | ||
| 432 | + | ||
| 433 | + d = FROM_SYSBUS(RamDevice, s); | ||
| 434 | + d->size = RAM_size; | ||
| 435 | + qdev_init(dev); | ||
| 436 | + | ||
| 437 | + sysbus_mmio_map(s, 0, addr); | ||
| 438 | +} | ||
| 439 | + | ||
| 440 | +static SysBusDeviceInfo ram_info = { | ||
| 441 | + .init = ram_init1, | ||
| 442 | + .qdev.name = "memory", | ||
| 443 | + .qdev.size = sizeof(RamDevice), | ||
| 444 | + .qdev.props = (Property[]) { | ||
| 445 | + { | ||
| 446 | + .name = "size", | ||
| 447 | + .info = &qdev_prop_uint32, | ||
| 448 | + .offset = offsetof(RamDevice, size), | ||
| 449 | + }, | ||
| 450 | + {/* end of property list */} | ||
| 451 | + } | ||
| 452 | +}; | ||
| 453 | + | ||
| 454 | +static void ram_register_devices(void) | ||
| 455 | +{ | ||
| 456 | + sysbus_register_withprop(&ram_info); | ||
| 457 | +} | ||
| 458 | + | ||
| 459 | +device_init(ram_register_devices); | ||
| 460 | + | ||
| 404 | static void sun4uv_init(ram_addr_t RAM_size, | 461 | static void sun4uv_init(ram_addr_t RAM_size, |
| 405 | const char *boot_devices, | 462 | const char *boot_devices, |
| 406 | const char *kernel_filename, const char *kernel_cmdline, | 463 | const char *kernel_filename, const char *kernel_cmdline, |
| @@ -411,7 +468,6 @@ static void sun4uv_init(ram_addr_t RAM_size, | @@ -411,7 +468,6 @@ static void sun4uv_init(ram_addr_t RAM_size, | ||
| 411 | m48t59_t *nvram; | 468 | m48t59_t *nvram; |
| 412 | int linux_boot; | 469 | int linux_boot; |
| 413 | unsigned int i; | 470 | unsigned int i; |
| 414 | - ram_addr_t ram_offset; | ||
| 415 | long initrd_size, kernel_size; | 471 | long initrd_size, kernel_size; |
| 416 | PCIBus *pci_bus, *pci_bus2, *pci_bus3; | 472 | PCIBus *pci_bus, *pci_bus2, *pci_bus3; |
| 417 | QEMUBH *bh; | 473 | QEMUBH *bh; |
| @@ -454,9 +510,8 @@ static void sun4uv_init(ram_addr_t RAM_size, | @@ -454,9 +510,8 @@ static void sun4uv_init(ram_addr_t RAM_size, | ||
| 454 | env->pc = hwdef->prom_addr + 0x20ULL; | 510 | env->pc = hwdef->prom_addr + 0x20ULL; |
| 455 | env->npc = env->pc + 4; | 511 | env->npc = env->pc + 4; |
| 456 | 512 | ||
| 457 | - /* allocate RAM */ | ||
| 458 | - ram_offset = qemu_ram_alloc(RAM_size); | ||
| 459 | - cpu_register_physical_memory(0, RAM_size, ram_offset); | 513 | + /* set up devices */ |
| 514 | + ram_init(0, RAM_size); | ||
| 460 | 515 | ||
| 461 | prom_init(hwdef->prom_addr, bios_name); | 516 | prom_init(hwdef->prom_addr, bios_name); |
| 462 | 517 |