Revision bda42033
b/hw/sun4u.c | ||
---|---|---|
401 | 401 |
|
402 | 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 | 461 |
static void sun4uv_init(ram_addr_t RAM_size, |
405 | 462 |
const char *boot_devices, |
406 | 463 |
const char *kernel_filename, const char *kernel_cmdline, |
... | ... | |
411 | 468 |
m48t59_t *nvram; |
412 | 469 |
int linux_boot; |
413 | 470 |
unsigned int i; |
414 |
ram_addr_t ram_offset; |
|
415 | 471 |
long initrd_size, kernel_size; |
416 | 472 |
PCIBus *pci_bus, *pci_bus2, *pci_bus3; |
417 | 473 |
QEMUBH *bh; |
... | ... | |
454 | 510 |
env->pc = hwdef->prom_addr + 0x20ULL; |
455 | 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 | 516 |
prom_init(hwdef->prom_addr, bios_name); |
462 | 517 |
|
Also available in: Unified diff