MFC rev 202552:

Add command-line option -dev to set the default value of the currdev
variable.
This commit is contained in:
marcel 2010-01-23 06:29:34 +00:00
parent 46c98b5897
commit 32e5c9998e
2 changed files with 58 additions and 14 deletions

View File

@ -50,7 +50,6 @@ extern char bootprog_rev[];
extern char bootprog_date[];
extern char bootprog_maker[];
struct devdesc currdev; /* our current device */
struct arch_switch archsw; /* MI/MD interface boundary */
extern u_int64_t ia64_pal_entry;
@ -101,10 +100,49 @@ find_pal_proc(void)
return;
}
static int
usc2cmp(CHAR16 *s1, CHAR16 *s2)
{
while (*s1 == *s2++) {
if (*s1++ == 0)
return (0);
}
return (*s1 - *(s2 - 1));
}
static char *
get_dev_option(int argc, CHAR16 *argv[])
{
static char dev[32];
CHAR16 *arg;
char *devp;
int i, j;
devp = NULL;
for (i = 0; i < argc; i++) {
if (usc2cmp(argv[i], L"-dev") == 0 && i < argc - 1) {
arg = argv[i + 1];
j = 0;
while (j < sizeof(dev) && *arg != 0)
dev[j++] = *arg++;
if (j == sizeof(dev))
j--;
dev[j] = '\0';
devp = dev;
break;
}
}
return (devp);
}
EFI_STATUS
main(int argc, CHAR16 *argv[])
{
struct devdesc currdev;
EFI_LOADED_IMAGE *img;
char *dev;
int i;
/*
@ -115,6 +153,10 @@ main(int argc, CHAR16 *argv[])
*/
cons_probe();
printf("\n");
printf("%s, Revision %s\n", bootprog_name, bootprog_rev);
printf("(%s, %s)\n", bootprog_maker, bootprog_date);
find_pal_proc();
/*
@ -124,16 +166,6 @@ main(int argc, CHAR16 *argv[])
if (devsw[i]->dv_init != NULL)
(devsw[i]->dv_init)();
/* Get our loaded image protocol interface structure. */
BS->HandleProtocol(IH, &imgid, (VOID**)&img);
printf("\n");
printf("%s, Revision %s\n", bootprog_name, bootprog_rev);
printf("(%s, %s)\n", bootprog_maker, bootprog_date);
efi_handle_lookup(img->DeviceHandle, &currdev.d_dev, &currdev.d_unit);
currdev.d_type = currdev.d_dev->dv_type;
/*
* Disable the watchdog timer. By default the boot manager sets
* the timer to 5 minutes before invoking a boot option. If we
@ -145,13 +177,24 @@ main(int argc, CHAR16 *argv[])
*/
BS->SetWatchdogTimer(0, 0, 0, NULL);
env_setenv("currdev", EV_VOLATILE, ia64_fmtdev(&currdev),
ia64_setcurrdev, env_nounset);
/* Get our loaded image protocol interface structure. */
BS->HandleProtocol(IH, &imgid, (VOID**)&img);
bzero(&currdev, sizeof(currdev));
efi_handle_lookup(img->DeviceHandle, &currdev.d_dev, &currdev.d_unit);
currdev.d_type = currdev.d_dev->dv_type;
env_setenv("loaddev", EV_VOLATILE, ia64_fmtdev(&currdev), env_noset,
env_nounset);
dev = get_dev_option(argc, argv);
if (dev == NULL)
dev = ia64_fmtdev(&currdev);
env_setenv("currdev", EV_VOLATILE, dev, ia64_setcurrdev, env_nounset);
setenv("LINES", "24", 1); /* optional */
archsw.arch_autoload = ia64_autoload;
archsw.arch_getdev = ia64_getdev;
archsw.arch_copyin = ia64_copyin;

View File

@ -3,6 +3,7 @@ $FreeBSD$
NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
file is important. Make sure the current version number is on line 6.
2.1: Add support for "-dev <part>" argument parsing.
2.0: Provide devices based on the block I/O protocol, rather than the
simple file services protocol. Use the FreeBSD file system code
on top of those devices to access files.