/* * Now that we are fully operational, we can checksum the * disks, and using some heuristics, hopefully are able to * always determine the correct root disk. */ void diskconf() { extern struct timeout scoop_checkdisk; dev_t tmpdev; #if 0 /* * Configure root, swap, and dump area. This is * currently done by running the same checksum * algorithm over all known disks, as was done in * /boot. Then we basically fixup the *dev vars * from the info we gleaned from this. */ dkcsumattach(); #endif /* * XXX * zaurus bootblocks currently pass in "bsd" instead of * "device:bsd", or any such thing, making this a real pain. */ if (bootdv == NULL) bootdv = parsedisk("wd0a", strlen("wd0a"), 0, &tmpdev); if (bootdv == NULL) printf("boot device: lookup '%s' failed.\n", boot_file); else printf("boot device: %s\n", bootdv->dv_xname); setroot(bootdv, 0, RB_USERREQ); dumpconf(); timeout_add(&scoop_checkdisk, hz/25); }
/* * Now that we are fully operational, we can checksum the * disks, and using some heuristics, hopefully are able to * always determine the correct root disk. */ void diskconf(void) { int majdev, unit, part = 0; struct device *bootdv = NULL; dev_t tmpdev; char buf[128]; extern bios_bootmac_t *bios_bootmac; dkcsumattach(); if ((bootdev & B_MAGICMASK) == (u_int)B_DEVMAGIC) { majdev = B_TYPE(bootdev); unit = B_UNIT(bootdev); part = B_PARTITION(bootdev); snprintf(buf, sizeof buf, "%s%d%c", findblkname(majdev), unit, part + 'a'); bootdv = parsedisk(buf, strlen(buf), part, &tmpdev); } if (bios_bootmac) { struct ifnet *ifp; for (ifp = TAILQ_FIRST(&ifnet); ifp != NULL; ifp = TAILQ_NEXT(ifp, if_list)) { if (ifp->if_type == IFT_ETHER && bcmp(bios_bootmac->mac, ((struct arpcom *)ifp)->ac_enaddr, ETHER_ADDR_LEN) == 0) break; } if (ifp) { #if defined(NFSCLIENT) printf("PXE boot MAC address %s, interface %s\n", ether_sprintf(bios_bootmac->mac), ifp->if_xname); bootdv = parsedisk(ifp->if_xname, strlen(ifp->if_xname), 0, &tmpdev); part = 0; #endif } else printf("PXE boot MAC address %s, interface %s\n", ether_sprintf(bios_bootmac->mac), "unknown"); } setroot(bootdv, part, RB_USERREQ); dumpconf(); #ifdef HIBERNATE hibernate_resume(); #endif /* HIBERNATE */ }
/* * Now that we are fully operational, we can checksum the * disks, and using some heuristics, hopefully are able to * always determine the correct root disk. */ void diskconf(void) { dev_t tmpdev; #if 0 /* * Configure root, swap, and dump area. This is * currently done by running the same checksum * algorithm over all known disks, as was done in * /boot. Then we basically fixup the *dev vars * from the info we gleaned from this. */ dkcsumattach(); #endif /* Lookup boot device from boot if not set by configuration */ if (bootdv == NULL) { int len; char *p; /* boot_file is of the form wd0a:/bsd, we want 'wd0a' */ if ((p = strchr(boot_file, ':')) != NULL) len = p - boot_file; else len = strlen(boot_file); bootdv = parsedisk(boot_file, len, 0, &tmpdev); } if (bootdv == NULL) printf("boot device: lookup '%s' failed.\n", boot_file); else printf("boot device: %s\n", bootdv->dv_xname); setroot(bootdv, 0, RB_USERREQ); dumpconf(); }