static void passthrough_hw_detach_address (struct hw *me, int level, int space, address_word addr, address_word nr_bytes, struct hw *client) /*callback/default*/ { if (hw_parent (me) == NULL) hw_abort (client, "hw_attach_address: no parent attach method"); hw_detach_address (hw_parent (me), level, space, addr, nr_bytes, client); }
static void m68hc11eepr_port_event (struct hw *me, int my_port, struct hw *source, int source_port, int level) { SIM_DESC sd; struct m68hc11eepr *controller; sim_cpu *cpu; controller = hw_data (me); sd = hw_system (me); cpu = STATE_CPU (sd, 0); switch (my_port) { case RESET_PORT: { HW_TRACE ((me, "EEPROM reset")); /* Re-read the EEPROM from the file. This gives the chance to users to erase this file before doing a reset and have a fresh EEPROM taken into account. */ m6811eepr_memory_rw (controller, O_RDONLY); /* Reset the state of EEPROM programmer. The CONFIG register is also initialized from the EEPROM/file content. */ cpu->ios[M6811_PPROG] = 0; if (cpu->cpu_use_local_config) cpu->ios[M6811_CONFIG] = cpu->cpu_config; else cpu->ios[M6811_CONFIG] = controller->eeprom[controller->size-1]; controller->eeprom_wmode = 0; controller->eeprom_waddr = 0; controller->eeprom_wbyte = 0; /* Attach or detach to the bus depending on the EEPROM enable bit. The EEPROM CONFIG register is still enabled and can be programmed for a next configuration (taken into account only after a reset, see Motorola spec). */ if (!(cpu->ios[M6811_CONFIG] & M6811_EEON)) { if (controller->mapped) hw_detach_address (hw_parent (me), M6811_EEPROM_LEVEL, controller->attach_space, controller->base_address, controller->size - 1, me); controller->mapped = 0; } else { if (!controller->mapped) hw_attach_address (hw_parent (me), M6811_EEPROM_LEVEL, controller->attach_space, controller->base_address, controller->size - 1, me); controller->mapped = 1; } break; } default: hw_abort (me, "Event on unknown port %d", my_port); break; } }