static void arch_init( void ) { openbios_init(); modules_init(); #ifdef CONFIG_DRIVER_PCI arch = &default_pci_host; ob_pci_init(); #endif #ifdef CONFIG_DRIVER_IDE setup_timers(); ob_ide_init("/pci/isa", 0x1f0, 0x3f4, 0x170, 0x374); #endif #ifdef CONFIG_DRIVER_FLOPPY ob_floppy_init("/isa", "floppy0", 0x3f0, 0); #endif #ifdef CONFIG_XBOX setup_video(0x3C00000, phys_to_virt(0x3C00000)); /* Force video to 32-bit depth */ VIDEO_DICT_VALUE(video.depth) = 32; init_video(); node_methods_init(); #endif device_end(); bind_func("platform-boot", boot ); bind_func("(go)", go ); }
static void arch_init( void ) { void setup_timers(void); openbios_init(); modules_init(); #ifdef CONFIG_DRIVER_IDE setup_timers(); ob_ide_init("/pci/pci-ata", 0x1f0, 0x3f4, 0x170, 0x374); #endif device_end(); bind_func("platform-boot", boot ); }
void backend_close() { // BUG: If event is set when its not being waited on, WaitForSingleObject() // will get stuck/timeout as if the event was never set. SetEvent(hThreadExitEvent); // Signal thread to end WaitForSingleObject(hMainThread, 3000); // Wait at most 3000ms for thread to end CloseHandle(hMainThread); CloseHandle(hThreadExitEvent); DeleteCriticalSection(&cs); device_end(); device_close(); }
void install_openprom_nodes(fcode_env_t *env) { MYSELF = open_instance_chain(env, env->root_node, 0); if (MYSELF != NULL) { make_a_node(env, "openprom", 0); make_a_node(env, "client-services", 0); FORTH(0, "claim", claim); FORTH(0, "release", release); finish_device(env); finish_device(env); close_instance_chain(env, MYSELF, 0); device_end(env); MYSELF = 0; } }
void arch_of_init( void ) { #if USE_RTAS phandle_t ph; #endif int autoboot; devtree_init(); node_methods_init(); modules_init(); setup_timers(); #ifdef CONFIG_DRIVER_PCI ob_pci_init(); #endif #if USE_RTAS if( !(ph=find_dev("/rtas")) ) printk("Warning: No /rtas node\n"); else { ulong size = 0x1000; while( size < (ulong)of_rtas_end - (ulong)of_rtas_start ) size *= 2; set_property( ph, "rtas-size", (char*)&size, sizeof(size) ); } #endif #if 0 /* tweak boot settings */ autoboot = !!get_bool_res("autoboot"); #endif autoboot = 0; if( !autoboot ) printk("Autobooting disabled - dropping into OpenFirmware\n"); setenv("auto-boot?", autoboot ? "true" : "false" ); setenv("boot-command", "briqboot"); #if 0 if( get_bool_res("tty-interface") == 1 ) #endif fword("activate-tty-interface"); /* hack */ device_end(); bind_func("briqboot", boot ); }
cuda_t *cuda_init (const char *path, phys_addr_t base) { cuda_t *cuda; char buf[64]; phandle_t aliases; base += IO_CUDA_OFFSET; CUDA_DPRINTF(" base=" FMT_plx "\n", base); cuda = malloc(sizeof(cuda_t)); if (cuda == NULL) return NULL; snprintf(buf, sizeof(buf), "%s/via-cuda", path); REGISTER_NAMED_NODE(ob_cuda, buf); aliases = find_dev("/aliases"); set_property(aliases, "via-cuda", buf, strlen(buf) + 1); cuda->base = base; cuda_writeb(cuda, B, cuda_readb(cuda, B) | TREQ | TIP); #ifdef CONFIG_DRIVER_ADB cuda->adb_bus = adb_bus_new(cuda, &cuda_adb_req); if (cuda->adb_bus == NULL) { free(cuda); return NULL; } adb_bus_init(buf, cuda->adb_bus); #endif rtc_init(buf); powermgt_init(buf); main_cuda = cuda; device_end(); bind_func("poweroff", ppc32_poweroff); return cuda; }
void arch_of_init( void ) { mol_phandle_t ph; int autoboot; devtree_init(); node_methods_init(); nvram_init("/pci/mac-io/nvram"); openbios_init(); modules_init(); pseudodisk_init(); osiblk_init(); osiscsi_init(); init_video(); if( (ph=prom_find_device("/rtas")) == -1 ) printk("Warning: No /rtas node\n"); else { unsigned long size = 0x1000; while( size < (unsigned long)of_rtas_end - (unsigned long)of_rtas_start ) size *= 2; prom_set_prop( ph, "rtas-size", (char*)&size, sizeof(size) ); } /* tweak boot settings */ autoboot = !!get_bool_res("autoboot"); if( !autoboot ) printk("Autobooting disabled - dropping into OpenFirmware\n"); setenv("auto-boot?", autoboot ? "true" : "false" ); setenv("boot-command", "molboot"); if( get_bool_res("tty-interface") == 1 ) fword("activate-tty-interface"); /* hack */ device_end(); bind_func("molboot", boot ); }
int ob_esp_init(unsigned int slot, uint64_t base, unsigned long espoffset, unsigned long dmaoffset) { int id, diskcount = 0, cdcount = 0, *counter_ptr; char nodebuff[256], aliasbuff[256]; esp_private_t *esp; unsigned int i; DPRINTF("Initializing SCSI..."); esp = malloc(sizeof(esp_private_t)); if (!esp) { DPRINTF("Can't allocate ESP private structure\n"); return -1; } global_esp = esp; if (espdma_init(slot, base, dmaoffset, &esp->espdma) != 0) { return -1; } /* Get the IO region */ esp->ll = (void *)ofmem_map_io(base + (uint64_t)espoffset, sizeof(struct esp_regs)); if (esp->ll == NULL) { DPRINTF("Can't map ESP registers\n"); return -1; } esp->buffer = (void *)dvma_alloc(BUFSIZE, &esp->buffer_dvma); if (!esp->buffer || !esp->buffer_dvma) { DPRINTF("Can't get a DVMA buffer\n"); return -1; } // Chip reset esp->ll->regs[ESP_CMD] = ESP_CMD_RC; DPRINTF("ESP at 0x%lx, buffer va 0x%lx dva 0x%lx\n", (unsigned long)esp, (unsigned long)esp->buffer, (unsigned long)esp->buffer_dvma); DPRINTF("done\n"); DPRINTF("Initializing SCSI devices..."); for (id = 0; id < 8; id++) { esp->sd[id].id = id; if (!inquiry(esp, &esp->sd[id])) { DPRINTF("Unit %d not present\n", id); continue; } /* Clear Unit Attention condition from reset */ for (i = 0; i < 5; i++) { if (test_unit_ready(esp, &esp->sd[id])) { break; } } if (i == 5) { DPRINTF("Unit %d present but won't become ready\n", id); continue; } DPRINTF("Unit %d present\n", id); read_capacity(esp, &esp->sd[id]); #ifdef CONFIG_DEBUG_ESP dump_drive(&esp->sd[id]); #endif } REGISTER_NAMED_NODE(ob_esp, "/iommu/sbus/espdma/esp"); device_end(); /* set reg */ push_str("/iommu/sbus/espdma/esp"); fword("find-device"); PUSH(slot); fword("encode-int"); PUSH(espoffset); fword("encode-int"); fword("encode+"); PUSH(0x00000010); fword("encode-int"); fword("encode+"); push_str("reg"); fword("property"); PUSH(0x02625a00); fword("encode-int"); push_str("clock-frequency"); fword("property"); for (id = 0; id < 8; id++) { if (!esp->sd[id].present) continue; push_str("/iommu/sbus/espdma/esp"); fword("find-device"); fword("new-device"); push_str("sd"); fword("device-name"); push_str("block"); fword("device-type"); fword("is-deblocker"); PUSH(id); fword("encode-int"); PUSH(0); fword("encode-int"); fword("encode+"); push_str("reg"); fword("property"); fword("finish-device"); snprintf(nodebuff, sizeof(nodebuff), "/iommu/sbus/espdma/esp/sd@%d,0", id); REGISTER_NODE_METHODS(ob_sd, nodebuff); if (esp->sd[id].media == TYPE_ROM) { counter_ptr = &cdcount; } else { counter_ptr = &diskcount; } if (*counter_ptr == 0) { add_alias(nodebuff, esp->sd[id].media_str[0]); add_alias(nodebuff, esp->sd[id].media_str[1]); } snprintf(aliasbuff, sizeof(aliasbuff), "%s%d", esp->sd[id].media_str[0], *counter_ptr); add_alias(nodebuff, aliasbuff); snprintf(aliasbuff, sizeof(aliasbuff), "%s%d", esp->sd[id].media_str[1], *counter_ptr); add_alias(nodebuff, aliasbuff); snprintf(aliasbuff, sizeof(aliasbuff), "sd(0,%d,0)", id); add_alias(nodebuff, aliasbuff); snprintf(aliasbuff, sizeof(aliasbuff), "sd(0,%d,0)@0,0", id); add_alias(nodebuff, aliasbuff); (*counter_ptr)++; } DPRINTF("done\n"); return 0; }