Try to detect if we are doing a floppy boot from the device name and if

we are, load the minimal set to avoid backwards seeks.
This commit is contained in:
christos 2010-08-25 16:24:45 +00:00
parent f2af08161f
commit 26c8040050
1 changed files with 7 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: boot.c,v 1.22 2010/04/02 18:39:44 martin Exp $ */
/* $NetBSD: boot.c,v 1.23 2010/08/25 16:24:45 christos Exp $ */
/*
* Copyright (c) 1997, 1999 Eduardo E. Horvath. All rights reserved.
@ -350,10 +350,11 @@ jump_to_kernel(u_long *marks, char *kernel, char *args, void *ofw)
}
static void
start_kernel(char *kernel, char *bootline, void *ofw)
start_kernel(char *kernel, char *bootline, void *ofw, int isfloppy)
{
int fd;
u_long marks[MARK_MAX];
int flags = isfloppy ? LOAD_MINIMAL : LOAD_ALL;
/*
* First, load headers using default allocator and check whether kernel
@ -371,7 +372,7 @@ start_kernel(char *kernel, char *bootline, void *ofw)
}
(void)printf("Loading %s: ", kernel);
if (fdloadfile(fd, marks, LOAD_ALL) != -1) {
if (fdloadfile(fd, marks, flags) != -1) {
close(fd);
jump_to_kernel(marks, kernel, bootline, ofw);
}
@ -488,7 +489,7 @@ check_boot_config(void)
void
main(void *ofw)
{
int boothowto, i = 0;
int boothowto, i = 0, isfloppy;
char kernel[PROM_MAX_PATH];
char bootline[PROM_MAX_PATH];
@ -503,6 +504,7 @@ main(void *ofw)
/* Figure boot arguments */
strncpy(bootdev, prom_getbootpath(), sizeof(bootdev) - 1);
boothowto = bootoptions(prom_getbootargs(), bootdev, kernel, bootline);
isfloppy = strstr(bootdev, "fd") || strstr(bootdev, "floppy");
for (;; *kernel = '\0') {
if (boothowto & RB_ASKNAME) {
@ -541,7 +543,7 @@ main(void *ofw)
}
check_boot_config();
start_kernel(kernel, bootline, ofw);
start_kernel(kernel, bootline, ofw, isfloppy);
/*
* Try next name from kernel name list if not in askname mode,