/* Find BIOS portion on given BIOS disk * XXX - Use dklookup() instead. */ bios_diskinfo_t * bios_dklookup(int dev) { struct diskinfo *dip; dip = dklookup(dev); if(dip) return(&dip->bios_info); return(NULL); }
/* Find BIOS portion on given BIOS disk * XXX - Use dklookup() instead. */ bios_diskinfo_t * bios_dklookup(int dev) { struct diskinfo *dip; dip = dklookup(dev); if (dip) return &dip->bios_info; return NULL; }
int Xboot(void) { #ifdef EFIBOOT printf("Not supported yet\n"); #else int dev, part, st; struct diskinfo *dip; char buf[DEV_BSIZE], *dest = (void *)BOOTBIOS_ADDR; if (cmd.argc != 2) { printf("machine boot {fd,hd}<0123>[abcd]\n"); printf("Where [0123] is the disk number," " and [abcd] is the partition.\n"); return 0; } /* Check arg */ if (cmd.argv[1][0] != 'f' && cmd.argv[1][0] != 'h') goto bad; if (cmd.argv[1][1] != 'd') goto bad; if (cmd.argv[1][2] < '0' || cmd.argv[1][2] > '3') goto bad; if ((cmd.argv[1][3] < 'a' || cmd.argv[1][3] > 'd') && cmd.argv[1][3] != '\0') goto bad; printf("Booting from %s ", cmd.argv[1]); dev = (cmd.argv[1][0] == 'h')?0x80:0; dev += (cmd.argv[1][2] - '0'); part = (cmd.argv[1][3] - 'a'); if (part > 0) printf("[%x,%d]\n", dev, part); else printf("[%x]\n", dev); /* Read boot sector from device */ dip = dklookup(dev); st = dip->diskio(F_READ, dip, 0, 1, buf); if (st) goto bad; /* Frob boot flag in buffer from HD */ if ((dev & 0x80) && (part > 0)){ int i, j; for (i = 0, j = DOSPARTOFF; i < 4; i++, j += 16) if (part == i) buf[j] |= 0x80; else buf[j] &= ~0x80; } /* Load %dl, ljmp */ bcopy(buf, dest, DEV_BSIZE); bootbuf(dest, dev); bad: printf("Invalid device!\n"); #endif return 0; }