Revision 6b63ef4d hw/sparc/sun4m.c
b/hw/sparc/sun4m.c | ||
---|---|---|
836 | 836 |
{ |
837 | 837 |
} |
838 | 838 |
|
839 |
static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size, |
|
840 |
const char *boot_device, |
|
841 |
const char *kernel_filename, |
|
842 |
const char *kernel_cmdline, |
|
843 |
const char *initrd_filename, const char *cpu_model) |
|
839 |
static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, |
|
840 |
QEMUMachineInitArgs *args) |
|
844 | 841 |
{ |
842 |
const char *cpu_model = args->cpu_model; |
|
845 | 843 |
unsigned int i; |
846 | 844 |
void *iommu, *espdma, *ledma, *nvram; |
847 | 845 |
qemu_irq *cpu_irqs[MAX_CPUS], slavio_irq[32], slavio_cpu_irq[MAX_CPUS], |
... | ... | |
867 | 865 |
|
868 | 866 |
|
869 | 867 |
/* set up devices */ |
870 |
ram_init(0, RAM_size, hwdef->max_mem);
|
|
868 |
ram_init(0, args->ram_size, hwdef->max_mem);
|
|
871 | 869 |
/* models without ECC don't trap when missing ram is accessed */ |
872 | 870 |
if (!hwdef->ecc_base) { |
873 |
empty_slot_init(RAM_size, hwdef->max_mem - RAM_size);
|
|
871 |
empty_slot_init(args->ram_size, hwdef->max_mem - args->ram_size);
|
|
874 | 872 |
} |
875 | 873 |
|
876 | 874 |
prom_init(hwdef->slavio_base, bios_name); |
... | ... | |
993 | 991 |
empty_slot_init(hwdef->bpp_base, 0x20); |
994 | 992 |
} |
995 | 993 |
|
996 |
kernel_size = sun4m_load_kernel(kernel_filename, initrd_filename, |
|
997 |
RAM_size); |
|
994 |
kernel_size = sun4m_load_kernel(args->kernel_filename, |
|
995 |
args->initrd_filename, |
|
996 |
args->ram_size); |
|
998 | 997 |
|
999 |
nvram_init(nvram, (uint8_t *)&nd_table[0].macaddr, kernel_cmdline, |
|
1000 |
boot_device, RAM_size, kernel_size, graphic_width,
|
|
998 |
nvram_init(nvram, (uint8_t *)&nd_table[0].macaddr, args->kernel_cmdline,
|
|
999 |
args->boot_device, args->ram_size, kernel_size, graphic_width,
|
|
1001 | 1000 |
graphic_height, graphic_depth, hwdef->nvram_machine_id, |
1002 | 1001 |
"Sun4m"); |
1003 | 1002 |
|
... | ... | |
1015 | 1014 |
fw_cfg_add_i16(fw_cfg, FW_CFG_SUN4M_HEIGHT, graphic_height); |
1016 | 1015 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, KERNEL_LOAD_ADDR); |
1017 | 1016 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size); |
1018 |
if (kernel_cmdline) { |
|
1017 |
if (args->kernel_cmdline) {
|
|
1019 | 1018 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, CMDLINE_ADDR); |
1020 |
pstrcpy_targphys("cmdline", CMDLINE_ADDR, TARGET_PAGE_SIZE, kernel_cmdline); |
|
1021 |
fw_cfg_add_string(fw_cfg, FW_CFG_CMDLINE_DATA, kernel_cmdline); |
|
1019 |
pstrcpy_targphys("cmdline", CMDLINE_ADDR, TARGET_PAGE_SIZE, |
|
1020 |
args->kernel_cmdline); |
|
1021 |
fw_cfg_add_string(fw_cfg, FW_CFG_CMDLINE_DATA, args->kernel_cmdline); |
|
1022 | 1022 |
fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_SIZE, |
1023 |
strlen(kernel_cmdline) + 1); |
|
1023 |
strlen(args->kernel_cmdline) + 1);
|
|
1024 | 1024 |
} else { |
1025 | 1025 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, 0); |
1026 | 1026 |
fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_SIZE, 0); |
1027 | 1027 |
} |
1028 | 1028 |
fw_cfg_add_i32(fw_cfg, FW_CFG_INITRD_ADDR, INITRD_LOAD_ADDR); |
1029 | 1029 |
fw_cfg_add_i32(fw_cfg, FW_CFG_INITRD_SIZE, 0); // not used |
1030 |
fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, boot_device[0]); |
|
1030 |
fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, args->boot_device[0]);
|
|
1031 | 1031 |
qemu_register_boot_set(fw_cfg_boot_set, fw_cfg); |
1032 | 1032 |
} |
1033 | 1033 |
|
... | ... | |
1291 | 1291 |
/* SPARCstation 5 hardware initialisation */ |
1292 | 1292 |
static void ss5_init(QEMUMachineInitArgs *args) |
1293 | 1293 |
{ |
1294 |
ram_addr_t RAM_size = args->ram_size; |
|
1295 |
const char *cpu_model = args->cpu_model; |
|
1296 |
const char *kernel_filename = args->kernel_filename; |
|
1297 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1298 |
const char *initrd_filename = args->initrd_filename; |
|
1299 |
const char *boot_device = args->boot_device; |
|
1300 |
sun4m_hw_init(&sun4m_hwdefs[0], RAM_size, boot_device, kernel_filename, |
|
1301 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1294 |
sun4m_hw_init(&sun4m_hwdefs[0], args); |
|
1302 | 1295 |
} |
1303 | 1296 |
|
1304 | 1297 |
/* SPARCstation 10 hardware initialisation */ |
1305 | 1298 |
static void ss10_init(QEMUMachineInitArgs *args) |
1306 | 1299 |
{ |
1307 |
ram_addr_t RAM_size = args->ram_size; |
|
1308 |
const char *cpu_model = args->cpu_model; |
|
1309 |
const char *kernel_filename = args->kernel_filename; |
|
1310 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1311 |
const char *initrd_filename = args->initrd_filename; |
|
1312 |
const char *boot_device = args->boot_device; |
|
1313 |
sun4m_hw_init(&sun4m_hwdefs[1], RAM_size, boot_device, kernel_filename, |
|
1314 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1300 |
sun4m_hw_init(&sun4m_hwdefs[1], args); |
|
1315 | 1301 |
} |
1316 | 1302 |
|
1317 | 1303 |
/* SPARCserver 600MP hardware initialisation */ |
1318 | 1304 |
static void ss600mp_init(QEMUMachineInitArgs *args) |
1319 | 1305 |
{ |
1320 |
ram_addr_t RAM_size = args->ram_size; |
|
1321 |
const char *cpu_model = args->cpu_model; |
|
1322 |
const char *kernel_filename = args->kernel_filename; |
|
1323 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1324 |
const char *initrd_filename = args->initrd_filename; |
|
1325 |
const char *boot_device = args->boot_device; |
|
1326 |
sun4m_hw_init(&sun4m_hwdefs[2], RAM_size, boot_device, kernel_filename, |
|
1327 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1306 |
sun4m_hw_init(&sun4m_hwdefs[2], args); |
|
1328 | 1307 |
} |
1329 | 1308 |
|
1330 | 1309 |
/* SPARCstation 20 hardware initialisation */ |
1331 | 1310 |
static void ss20_init(QEMUMachineInitArgs *args) |
1332 | 1311 |
{ |
1333 |
ram_addr_t RAM_size = args->ram_size; |
|
1334 |
const char *cpu_model = args->cpu_model; |
|
1335 |
const char *kernel_filename = args->kernel_filename; |
|
1336 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1337 |
const char *initrd_filename = args->initrd_filename; |
|
1338 |
const char *boot_device = args->boot_device; |
|
1339 |
sun4m_hw_init(&sun4m_hwdefs[3], RAM_size, boot_device, kernel_filename, |
|
1340 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1312 |
sun4m_hw_init(&sun4m_hwdefs[3], args); |
|
1341 | 1313 |
} |
1342 | 1314 |
|
1343 | 1315 |
/* SPARCstation Voyager hardware initialisation */ |
1344 | 1316 |
static void vger_init(QEMUMachineInitArgs *args) |
1345 | 1317 |
{ |
1346 |
ram_addr_t RAM_size = args->ram_size; |
|
1347 |
const char *cpu_model = args->cpu_model; |
|
1348 |
const char *kernel_filename = args->kernel_filename; |
|
1349 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1350 |
const char *initrd_filename = args->initrd_filename; |
|
1351 |
const char *boot_device = args->boot_device; |
|
1352 |
sun4m_hw_init(&sun4m_hwdefs[4], RAM_size, boot_device, kernel_filename, |
|
1353 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1318 |
sun4m_hw_init(&sun4m_hwdefs[4], args); |
|
1354 | 1319 |
} |
1355 | 1320 |
|
1356 | 1321 |
/* SPARCstation LX hardware initialisation */ |
1357 | 1322 |
static void ss_lx_init(QEMUMachineInitArgs *args) |
1358 | 1323 |
{ |
1359 |
ram_addr_t RAM_size = args->ram_size; |
|
1360 |
const char *cpu_model = args->cpu_model; |
|
1361 |
const char *kernel_filename = args->kernel_filename; |
|
1362 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1363 |
const char *initrd_filename = args->initrd_filename; |
|
1364 |
const char *boot_device = args->boot_device; |
|
1365 |
sun4m_hw_init(&sun4m_hwdefs[5], RAM_size, boot_device, kernel_filename, |
|
1366 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1324 |
sun4m_hw_init(&sun4m_hwdefs[5], args); |
|
1367 | 1325 |
} |
1368 | 1326 |
|
1369 | 1327 |
/* SPARCstation 4 hardware initialisation */ |
1370 | 1328 |
static void ss4_init(QEMUMachineInitArgs *args) |
1371 | 1329 |
{ |
1372 |
ram_addr_t RAM_size = args->ram_size; |
|
1373 |
const char *cpu_model = args->cpu_model; |
|
1374 |
const char *kernel_filename = args->kernel_filename; |
|
1375 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1376 |
const char *initrd_filename = args->initrd_filename; |
|
1377 |
const char *boot_device = args->boot_device; |
|
1378 |
sun4m_hw_init(&sun4m_hwdefs[6], RAM_size, boot_device, kernel_filename, |
|
1379 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1330 |
sun4m_hw_init(&sun4m_hwdefs[6], args); |
|
1380 | 1331 |
} |
1381 | 1332 |
|
1382 | 1333 |
/* SPARCClassic hardware initialisation */ |
1383 | 1334 |
static void scls_init(QEMUMachineInitArgs *args) |
1384 | 1335 |
{ |
1385 |
ram_addr_t RAM_size = args->ram_size; |
|
1386 |
const char *cpu_model = args->cpu_model; |
|
1387 |
const char *kernel_filename = args->kernel_filename; |
|
1388 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1389 |
const char *initrd_filename = args->initrd_filename; |
|
1390 |
const char *boot_device = args->boot_device; |
|
1391 |
sun4m_hw_init(&sun4m_hwdefs[7], RAM_size, boot_device, kernel_filename, |
|
1392 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1336 |
sun4m_hw_init(&sun4m_hwdefs[7], args); |
|
1393 | 1337 |
} |
1394 | 1338 |
|
1395 | 1339 |
/* SPARCbook hardware initialisation */ |
1396 | 1340 |
static void sbook_init(QEMUMachineInitArgs *args) |
1397 | 1341 |
{ |
1398 |
ram_addr_t RAM_size = args->ram_size; |
|
1399 |
const char *cpu_model = args->cpu_model; |
|
1400 |
const char *kernel_filename = args->kernel_filename; |
|
1401 |
const char *kernel_cmdline = args->kernel_cmdline; |
|
1402 |
const char *initrd_filename = args->initrd_filename; |
|
1403 |
const char *boot_device = args->boot_device; |
|
1404 |
sun4m_hw_init(&sun4m_hwdefs[8], RAM_size, boot_device, kernel_filename, |
|
1405 |
kernel_cmdline, initrd_filename, cpu_model); |
|
1342 |
sun4m_hw_init(&sun4m_hwdefs[8], args); |
|
1406 | 1343 |
} |
1407 | 1344 |
|
1408 | 1345 |
static QEMUMachine ss5_machine = { |
Also available in: Unified diff