Lines Matching +full:rom +full:- +full:addr

26 #include "qemu/guest-random.h"
30 #include "hw/or-irq.h"
37 #include "standard-headers/asm-m68k/bootinfo.h"
38 #include "standard-headers/asm-m68k/bootinfo-mac.h"
41 #include "hw/m68k/q800-glue.h"
47 #include "hw/nubus/mac-nubus-bridge.h"
53 #include "qemu/error-report.h"
66 #define IO_SLICE_MASK (IO_SLICE - 1)
95 * Slot 0x9 is reserved for use by the in-built framebuffer whilst only
111 cpu->env.aregs[7] = ldl_phys(cs->as, 0); in main_cpu_reset()
112 cpu->env.pc = ldl_phys(cs->as, 4); in main_cpu_reset()
118 qemu_guest_getrandom_nofail((void *)rng_seed->data + 2, in rerandomize_rng_seed()
119 be16_to_cpu(*(uint16_t *)rng_seed->data)); in rerandomize_rng_seed()
125 /* offset: 0xa - mac_reset */
136 0x02, 0x00, 0xFF, 0xFB, /* andib #-5,%d0 */
143 static MemTxResult macio_alias_read(void *opaque, hwaddr addr, uint64_t *data, in macio_alias_read() argument
149 addr &= IO_SLICE_MASK; in macio_alias_read()
150 addr |= IO_BASE; in macio_alias_read()
154 val = address_space_ldl_be(&address_space_memory, addr, attrs, &r); in macio_alias_read()
157 val = address_space_lduw_be(&address_space_memory, addr, attrs, &r); in macio_alias_read()
160 val = address_space_ldub(&address_space_memory, addr, attrs, &r); in macio_alias_read()
170 static MemTxResult macio_alias_write(void *opaque, hwaddr addr, uint64_t value, in macio_alias_write() argument
175 addr &= IO_SLICE_MASK; in macio_alias_write()
176 addr |= IO_BASE; in macio_alias_write()
180 address_space_stl_be(&address_space_memory, addr, value, attrs, &r); in macio_alias_write()
183 address_space_stw_be(&address_space_memory, addr, value, attrs, &r); in macio_alias_write()
186 address_space_stb(&address_space_memory, addr, value, attrs, &r); in macio_alias_write()
205 static uint64_t machine_id_read(void *opaque, hwaddr addr, unsigned size) in machine_id_read() argument
210 static void machine_id_write(void *opaque, hwaddr addr, uint64_t val, in machine_id_write() argument
226 static uint64_t ramio_read(void *opaque, hwaddr addr, unsigned size) in ramio_read() argument
231 static void ramio_write(void *opaque, hwaddr addr, uint64_t val, in ramio_write() argument
260 ram_addr_t ram_size = machine->ram_size; in q800_machine_init()
261 const char *kernel_filename = machine->kernel_filename; in q800_machine_init()
262 const char *initrd_filename = machine->initrd_filename; in q800_machine_init()
263 const char *kernel_cmdline = machine->kernel_cmdline; in q800_machine_init()
264 const char *bios_name = machine->firmware ?: MACROM_FILENAME; in q800_machine_init()
287 object_initialize_child(OBJECT(machine), "cpu", &m->cpu, machine->cpu_type); in q800_machine_init()
288 qdev_realize(DEVICE(&m->cpu), NULL, &error_fatal); in q800_machine_init()
289 qemu_register_reset(main_cpu_reset, &m->cpu); in q800_machine_init()
292 memory_region_init_io(&m->ramio, OBJECT(machine), &ramio_ops, &m->ramio, in q800_machine_init()
294 memory_region_add_subregion(get_system_memory(), 0x0, &m->ramio); in q800_machine_init()
296 memory_region_add_subregion(&m->ramio, 0, machine->ram); in q800_machine_init()
301 memory_region_init(&m->macio, OBJECT(machine), "mac-io", IO_SLICE); in q800_machine_init()
302 memory_region_add_subregion(get_system_memory(), IO_BASE, &m->macio); in q800_machine_init()
308 memory_region_init_io(&m->macio_alias, OBJECT(machine), &macio_alias_ops, in q800_machine_init()
309 &m->macio, "mac-io.alias", IO_SIZE - IO_SLICE); in q800_machine_init()
311 &m->macio_alias); in q800_machine_init()
313 memory_region_init_io(&m->machine_id, NULL, &machine_id_ops, NULL, in q800_machine_init()
316 &m->machine_id); in q800_machine_init()
319 object_initialize_child(OBJECT(machine), "glue", &m->glue, TYPE_GLUE); in q800_machine_init()
320 object_property_set_link(OBJECT(&m->glue), "cpu", OBJECT(&m->cpu), in q800_machine_init()
322 sysbus_realize(SYS_BUS_DEVICE(&m->glue), &error_fatal); in q800_machine_init()
325 object_initialize_child(OBJECT(machine), "djmemc", &m->djmemc, in q800_machine_init()
327 sysbus = SYS_BUS_DEVICE(&m->djmemc); in q800_machine_init()
329 memory_region_add_subregion(&m->macio, DJMEMC_BASE - IO_BASE, in q800_machine_init()
333 object_initialize_child(OBJECT(machine), "iosb", &m->iosb, TYPE_IOSB); in q800_machine_init()
334 sysbus = SYS_BUS_DEVICE(&m->iosb); in q800_machine_init()
336 memory_region_add_subregion(&m->macio, IOSB_BASE - IO_BASE, in q800_machine_init()
340 object_initialize_child(OBJECT(machine), "via1", &m->via1, in q800_machine_init()
344 qdev_prop_set_drive(DEVICE(&m->via1), "drive", in q800_machine_init()
347 sysbus = SYS_BUS_DEVICE(&m->via1); in q800_machine_init()
349 memory_region_add_subregion(&m->macio, VIA_BASE - IO_BASE, in q800_machine_init()
352 qdev_get_gpio_in(DEVICE(&m->glue), GLUE_IRQ_IN_VIA1)); in q800_machine_init()
354 qdev_connect_gpio_out(DEVICE(&m->via1), 0, in q800_machine_init()
355 qdev_get_gpio_in_named(DEVICE(&m->glue), in q800_machine_init()
358 adb_bus = qdev_get_child_bus(DEVICE(&m->via1), "adb.0"); in q800_machine_init()
365 object_initialize_child(OBJECT(machine), "via2", &m->via2, in q800_machine_init()
367 sysbus = SYS_BUS_DEVICE(&m->via2); in q800_machine_init()
369 memory_region_add_subregion(&m->macio, VIA_BASE - IO_BASE + VIA_SIZE, in q800_machine_init()
372 qdev_get_gpio_in(DEVICE(&m->glue), GLUE_IRQ_IN_VIA2)); in q800_machine_init()
385 object_initialize_child(OBJECT(machine), "dp8393x", &m->dp8393x, in q800_machine_init()
387 dev = DEVICE(&m->dp8393x); in q800_machine_init()
391 memcpy(mac.a, nd->macaddr.a, sizeof(mac.a)); in q800_machine_init()
406 memory_region_add_subregion(&m->macio, SONIC_BASE - IO_BASE, in q800_machine_init()
409 qdev_get_gpio_in(DEVICE(&m->glue), GLUE_IRQ_IN_SONIC)); in q800_machine_init()
411 memory_region_init_rom(&m->dp8393x_prom, NULL, "dp8393x-q800.prom", in q800_machine_init()
414 &m->dp8393x_prom); in q800_machine_init()
417 prom = memory_region_get_ram_ptr(&m->dp8393x_prom); in q800_machine_init()
423 prom[7] = 0xff - checksum; in q800_machine_init()
427 object_initialize_child(OBJECT(machine), "escc", &m->escc, in q800_machine_init()
429 dev = DEVICE(&m->escc); in q800_machine_init()
442 object_initialize_child(OBJECT(machine), "escc_orgate", &m->escc_orgate, in q800_machine_init()
444 object_property_set_int(OBJECT(&m->escc_orgate), "num-lines", 2, in q800_machine_init()
446 dev = DEVICE(&m->escc_orgate); in q800_machine_init()
451 qdev_get_gpio_in(DEVICE(&m->glue), in q800_machine_init()
453 memory_region_add_subregion(&m->macio, SCC_BASE - IO_BASE, in q800_machine_init()
457 memory_region_init_alias(&m->escc_alias, OBJECT(machine), "escc-alias", in q800_machine_init()
459 memory_region_add_subregion(&m->macio, SCC_BASE - IO_BASE - 0x20, in q800_machine_init()
460 &m->escc_alias); in q800_machine_init()
464 object_initialize_child(OBJECT(machine), "esp", &m->esp, in q800_machine_init()
466 sysbus_esp = SYSBUS_ESP(&m->esp); in q800_machine_init()
467 esp = &sysbus_esp->esp; in q800_machine_init()
468 esp->dma_memory_read = NULL; in q800_machine_init()
469 esp->dma_memory_write = NULL; in q800_machine_init()
470 esp->dma_opaque = NULL; in q800_machine_init()
471 sysbus_esp->it_shift = 4; in q800_machine_init()
472 esp->dma_enabled = 1; in q800_machine_init()
474 sysbus = SYS_BUS_DEVICE(&m->esp); in q800_machine_init()
479 qdev_get_gpio_in(DEVICE(&m->via2), in q800_machine_init()
483 qdev_get_gpio_in(DEVICE(&m->via2), in q800_machine_init()
485 memory_region_add_subregion(&m->macio, ESP_BASE - IO_BASE, in q800_machine_init()
487 memory_region_add_subregion(&m->macio, ESP_PDMA - IO_BASE, in q800_machine_init()
490 scsi_bus_legacy_handle_cmdline(&esp->bus); in q800_machine_init()
494 object_initialize_child(OBJECT(machine), "asc", &m->asc, TYPE_ASC); in q800_machine_init()
495 qdev_prop_set_uint8(DEVICE(&m->asc), "asctype", m->easc ? ASC_TYPE_EASC in q800_machine_init()
497 if (machine->audiodev) { in q800_machine_init()
498 qdev_prop_set_string(DEVICE(&m->asc), "audiodev", machine->audiodev); in q800_machine_init()
500 sysbus = SYS_BUS_DEVICE(&m->asc); in q800_machine_init()
502 memory_region_add_subregion(&m->macio, ASC_BASE - IO_BASE, in q800_machine_init()
504 sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(DEVICE(&m->glue), in q800_machine_init()
508 qdev_connect_gpio_out(DEVICE(&m->glue), GLUE_IRQ_ASC, in q800_machine_init()
509 qdev_get_gpio_in(DEVICE(&m->via2), in q800_machine_init()
514 object_initialize_child(OBJECT(machine), "swim", &m->swim, in q800_machine_init()
516 sysbus = SYS_BUS_DEVICE(&m->swim); in q800_machine_init()
518 memory_region_add_subregion(&m->macio, SWIM_BASE - IO_BASE, in q800_machine_init()
523 object_initialize_child(OBJECT(machine), "mac-nubus-bridge", in q800_machine_init()
524 &m->mac_nubus_bridge, in q800_machine_init()
526 sysbus = SYS_BUS_DEVICE(&m->mac_nubus_bridge); in q800_machine_init()
527 dev = DEVICE(&m->mac_nubus_bridge); in q800_machine_init()
528 qdev_prop_set_uint32(DEVICE(&m->mac_nubus_bridge), "slot-available-mask", in q800_machine_init()
539 qdev_get_gpio_in_named(DEVICE(&m->via2), "nubus-irq", in q800_machine_init()
543 qdev_get_gpio_in_named(DEVICE(&m->via2), in q800_machine_init()
544 "nubus-irq", in q800_machine_init()
552 qdev_connect_gpio_out(DEVICE(&m->glue), GLUE_IRQ_NUBUS_9, in q800_machine_init()
553 qdev_get_gpio_in_named(DEVICE(&m->via2), "nubus-irq", in q800_machine_init()
556 nubus = NUBUS_BUS(qdev_get_child_bus(dev, "nubus-bus.0")); in q800_machine_init()
560 object_initialize_child(OBJECT(machine), "macfb", &m->macfb, in q800_machine_init()
562 dev = DEVICE(&m->macfb); in q800_machine_init()
574 macfb_mode = (NUBUS_MACFB(dev)->macfb).mode; in q800_machine_init()
576 cs = CPU(&m->cpu); in q800_machine_init()
594 stl_phys(cs->as, 4, elf_entry); /* reset initial PC */ in q800_machine_init()
608 VIDEO_BASE + macfb_mode->offset); in q800_machine_init()
612 BOOTINFO1(param_ptr, BI_MAC_VROW, macfb_mode->stride); in q800_machine_init()
615 memory_region_init_ram_ptr(&m->rom, NULL, "m68k_fake_mac.rom", in q800_machine_init()
617 memory_region_set_readonly(&m->rom, true); in q800_machine_init()
618 memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->rom); in q800_machine_init()
640 initrd_base = (ram_size - initrd_size) & TARGET_PAGE_MASK; in q800_machine_init()
642 ram_size - initrd_base); in q800_machine_init()
650 rom_add_blob_fixed_as("bootinfo", param_blob, param_ptr - param_blob, in q800_machine_init()
651 parameters_base, cs->as); in q800_machine_init()
653 rom_ptr_for_as(cs->as, parameters_base, in q800_machine_init()
654 param_ptr - param_blob) + in q800_machine_init()
655 (param_rng_seed - param_blob)); in q800_machine_init()
660 memory_region_init_rom(&m->rom, NULL, "m68k_mac.rom", MACROM_SIZE, in q800_machine_init()
663 memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->rom); in q800_machine_init()
665 memory_region_init_alias(&m->rom_alias, NULL, "m68k_mac.rom-alias", in q800_machine_init()
666 &m->rom, 0, MACROM_SIZE); in q800_machine_init()
668 &m->rom_alias); in q800_machine_init()
675 bios_size = -1; in q800_machine_init()
687 stl_phys(cs->as, 0, ldl_be_p(ptr)); /* reset initial SP */ in q800_machine_init()
688 stl_phys(cs->as, 4, in q800_machine_init()
698 return ms->easc; in q800_get_easc()
705 ms->easc = value; in q800_set_easc()
713 ms->easc = true; in q800_init()
717 { "scsi-hd", "quirk_mode_page_vendor_specific_apple", "on" },
718 { "scsi-hd", "vendor", " SEAGATE" },
719 { "scsi-hd", "product", " ST225N" },
720 { "scsi-hd", "ver", "1.0 " },
721 { "scsi-cd", "quirk_mode_page_apple_vendor", "on" },
722 { "scsi-cd", "quirk_mode_sense_rom_use_dbd", "on" },
723 { "scsi-cd", "quirk_mode_page_vendor_specific_apple", "on" },
724 { "scsi-cd", "quirk_mode_page_truncated", "on" },
725 { "scsi-cd", "vendor", "MATSHITA" },
726 { "scsi-cd", "product", "CD-ROM CR-8005" },
727 { "scsi-cd", "ver", "1.0k" },
739 mc->desc = "Macintosh Quadra 800"; in q800_machine_class_init()
740 mc->init = q800_machine_init; in q800_machine_class_init()
741 mc->default_cpu_type = M68K_CPU_TYPE_NAME("m68040"); in q800_machine_class_init()
742 mc->valid_cpu_types = valid_cpu_types; in q800_machine_class_init()
743 mc->max_cpus = 1; in q800_machine_class_init()
744 mc->block_default_type = IF_SCSI; in q800_machine_class_init()
745 mc->default_ram_id = "m68k_mac.ram"; in q800_machine_class_init()
747 compat_props_add(mc->compat_props, hw_compat_q800, hw_compat_q800_len); in q800_machine_class_init()