void start(int a1, int a2, void *promptr) { ofinit(promptr); if (ofstdio(&stdin, &stdout, &stderr)) exit(); boot(a1, a2, promptr); for (;;) exit(); }
unsigned long load_kernel(unsigned long load_addr, int num_words, unsigned long cksum, RESIDUAL *residual, void *OFW) { int start_multi = 0; unsigned int pci_viddid, pci_did, tulip_pci_base, tulip_base; /* If we have Open Firmware, initialise it immediately */ if (OFW) { OFW_interface = OFW; ofinit(OFW_interface); } board_isa_init(); #if defined(CONFIG_VGA_CONSOLE) vga_init((unsigned char *)0xC0000000); #endif /* CONFIG_VGA_CONSOLE */ if (residual) { /* Is this Motorola PPCBug? */ if ((1 & residual->VitalProductData.FirmwareSupports) && (1 == residual->VitalProductData.FirmwareSupplier)) { unsigned char base_mod; unsigned char board_type = inb(0x801) & 0xF0; /* * Reset the onboard 21x4x Ethernet * Motorola Ethernet is at IDSEL 14 (devfn 0x70) */ pci_read_config_32(0x70, 0x00, &pci_viddid); pci_did = (pci_viddid & 0xffff0000) >> 16; /* Be sure we've really found a 21x4x chip */ if (((pci_viddid & 0xffff) == PCI_VENDOR_ID_DEC) && ((pci_did == PCI_DEVICE_ID_DEC_TULIP_FAST) || (pci_did == PCI_DEVICE_ID_DEC_TULIP) || (pci_did == PCI_DEVICE_ID_DEC_TULIP_PLUS) || (pci_did == PCI_DEVICE_ID_DEC_21142))) { pci_read_config_32(0x70, 0x10, &tulip_pci_base); /* Get the physical base address */ tulip_base = (tulip_pci_base & ~0x03UL) + 0x80000000; /* Strobe the 21x4x reset bit in CSR0 */ writel(0x1, tulip_base); } /* If this is genesis 2 board then check for no * keyboard controller and more than one processor. */ if (board_type == 0xe0) { base_mod = inb(0x803); /* if a MVME2300/2400 or a Sitka then no keyboard */ if((base_mod == 0xFA) || (base_mod == 0xF9) || (base_mod == 0xE1)) { keyb_present = 0; /* no keyboard */ } } /* If this is a multiprocessor system then * park the other processor so that the * kernel knows where to find them. */ if (residual->MaxNumCpus > 1) start_multi = 1; } memcpy(hold_residual,residual,sizeof(RESIDUAL)); }