Revision 6b63ef4d

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 = {
b/hw/sparc64/sun4u.c
811 811
}
812 812

  
813 813
static void sun4uv_init(MemoryRegion *address_space_mem,
814
                        ram_addr_t RAM_size,
815
                        const char *boot_devices,
816
                        const char *kernel_filename, const char *kernel_cmdline,
817
                        const char *initrd_filename, const char *cpu_model,
814
                        QEMUMachineInitArgs *args,
818 815
                        const struct hwdef *hwdef)
819 816
{
820 817
    SPARCCPU *cpu;
......
829 826
    FWCfgState *fw_cfg;
830 827

  
831 828
    /* init CPUs */
832
    cpu = cpu_devinit(cpu_model, hwdef);
829
    cpu = cpu_devinit(args->cpu_model, hwdef);
833 830

  
834 831
    /* set up devices */
835
    ram_init(0, RAM_size);
832
    ram_init(0, args->ram_size);
836 833

  
837 834
    prom_init(hwdef->prom_addr, bios_name);
838 835

  
......
878 875

  
879 876
    initrd_size = 0;
880 877
    initrd_addr = 0;
881
    kernel_size = sun4u_load_kernel(kernel_filename, initrd_filename,
878
    kernel_size = sun4u_load_kernel(args->kernel_filename,
879
                                    args->initrd_filename,
882 880
                                    ram_size, &initrd_size, &initrd_addr,
883 881
                                    &kernel_addr, &kernel_entry);
884 882

  
885
    sun4u_NVRAM_set_params(nvram, NVRAM_SIZE, "Sun4u", RAM_size, boot_devices,
883
    sun4u_NVRAM_set_params(nvram, NVRAM_SIZE, "Sun4u", args->ram_size,
884
                           args->boot_device,
886 885
                           kernel_addr, kernel_size,
887
                           kernel_cmdline,
886
                           args->kernel_cmdline,
888 887
                           initrd_addr, initrd_size,
889 888
                           /* XXX: need an option to load a NVRAM image */
890 889
                           0,
......
898 897
    fw_cfg_add_i16(fw_cfg, FW_CFG_MACHINE_ID, hwdef->machine_id);
899 898
    fw_cfg_add_i64(fw_cfg, FW_CFG_KERNEL_ADDR, kernel_entry);
900 899
    fw_cfg_add_i64(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size);
901
    if (kernel_cmdline) {
900
    if (args->kernel_cmdline) {
902 901
        fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_SIZE,
903
                       strlen(kernel_cmdline) + 1);
904
        fw_cfg_add_string(fw_cfg, FW_CFG_CMDLINE_DATA, kernel_cmdline);
902
                       strlen(args->kernel_cmdline) + 1);
903
        fw_cfg_add_string(fw_cfg, FW_CFG_CMDLINE_DATA, args->kernel_cmdline);
905 904
    } else {
906 905
        fw_cfg_add_i32(fw_cfg, FW_CFG_CMDLINE_SIZE, 0);
907 906
    }
908 907
    fw_cfg_add_i64(fw_cfg, FW_CFG_INITRD_ADDR, initrd_addr);
909 908
    fw_cfg_add_i64(fw_cfg, FW_CFG_INITRD_SIZE, initrd_size);
910
    fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, boot_devices[0]);
909
    fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, args->boot_device[0]);
911 910

  
912 911
    fw_cfg_add_i16(fw_cfg, FW_CFG_SPARC64_WIDTH, graphic_width);
913 912
    fw_cfg_add_i16(fw_cfg, FW_CFG_SPARC64_HEIGHT, graphic_height);
......
949 948
/* Sun4u hardware initialisation */
950 949
static void sun4u_init(QEMUMachineInitArgs *args)
951 950
{
952
    ram_addr_t RAM_size = args->ram_size;
953
    const char *cpu_model = args->cpu_model;
954
    const char *kernel_filename = args->kernel_filename;
955
    const char *kernel_cmdline = args->kernel_cmdline;
956
    const char *initrd_filename = args->initrd_filename;
957
    const char *boot_devices = args->boot_device;
958
    sun4uv_init(get_system_memory(), RAM_size, boot_devices, kernel_filename,
959
                kernel_cmdline, initrd_filename, cpu_model, &hwdefs[0]);
951
    sun4uv_init(get_system_memory(), args, &hwdefs[0]);
960 952
}
961 953

  
962 954
/* Sun4v hardware initialisation */
963 955
static void sun4v_init(QEMUMachineInitArgs *args)
964 956
{
965
    ram_addr_t RAM_size = args->ram_size;
966
    const char *cpu_model = args->cpu_model;
967
    const char *kernel_filename = args->kernel_filename;
968
    const char *kernel_cmdline = args->kernel_cmdline;
969
    const char *initrd_filename = args->initrd_filename;
970
    const char *boot_devices = args->boot_device;
971
    sun4uv_init(get_system_memory(), RAM_size, boot_devices, kernel_filename,
972
                kernel_cmdline, initrd_filename, cpu_model, &hwdefs[1]);
957
    sun4uv_init(get_system_memory(), args, &hwdefs[1]);
973 958
}
974 959

  
975 960
/* Niagara hardware initialisation */
976 961
static void niagara_init(QEMUMachineInitArgs *args)
977 962
{
978
    ram_addr_t RAM_size = args->ram_size;
979
    const char *cpu_model = args->cpu_model;
980
    const char *kernel_filename = args->kernel_filename;
981
    const char *kernel_cmdline = args->kernel_cmdline;
982
    const char *initrd_filename = args->initrd_filename;
983
    const char *boot_devices = args->boot_device;
984
    sun4uv_init(get_system_memory(), RAM_size, boot_devices, kernel_filename,
985
                kernel_cmdline, initrd_filename, cpu_model, &hwdefs[2]);
963
    sun4uv_init(get_system_memory(), args, &hwdefs[2]);
986 964
}
987 965

  
988 966
static QEMUMachine sun4u_machine = {

Also available in: Unified diff