summaryrefslogtreecommitdiff
path: root/stand
diff options
context:
space:
mode:
authorToomas Soome <tsoome@FreeBSD.org>2020-07-19 06:59:09 +0000
committerToomas Soome <tsoome@FreeBSD.org>2020-07-19 06:59:09 +0000
commit97dd57e66c32a9a74549822a599ca77e50c7ff82 (patch)
tree11de6db2aab7c93626db43247d0252195376f8ec /stand
parent3ec7e1695c7db1a892a57b29dff9d2b12c7baa13 (diff)
downloadsrc-test-97dd57e66c32a9a74549822a599ca77e50c7ff82.tar.gz
src-test-97dd57e66c32a9a74549822a599ca77e50c7ff82.zip
loader: cstyle cleanup
No functional changes intended. Sponsored by: Netflix, Klara Inc.
Notes
Notes: svn path=/head/; revision=363318
Diffstat (limited to 'stand')
-rw-r--r--stand/i386/loader/main.c479
1 files changed, 250 insertions, 229 deletions
diff --git a/stand/i386/loader/main.c b/stand/i386/loader/main.c
index 0087ec7573537..377075f100ee3 100644
--- a/stand/i386/loader/main.c
+++ b/stand/i386/loader/main.c
@@ -95,163 +95,171 @@ ptov(uintptr_t x)
int
main(void)
{
- int i;
-
- /* Pick up arguments */
- kargs = (void *)__args;
- initial_howto = kargs->howto;
- initial_bootdev = kargs->bootdev;
- initial_bootinfo = kargs->bootinfo ? (struct bootinfo *)PTOV(kargs->bootinfo) : NULL;
-
- /* Initialize the v86 register set to a known-good state. */
- bzero(&v86, sizeof(v86));
- v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
-
- /*
- * Initialise the heap as early as possible. Once this is done, malloc() is usable.
- */
- bios_getmem();
+ int i;
+
+ /* Pick up arguments */
+ kargs = (void *)__args;
+ initial_howto = kargs->howto;
+ initial_bootdev = kargs->bootdev;
+ initial_bootinfo = kargs->bootinfo ?
+ (struct bootinfo *)PTOV(kargs->bootinfo) : NULL;
+
+ /* Initialize the v86 register set to a known-good state. */
+ bzero(&v86, sizeof(v86));
+ v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
+
+ /*
+ * Initialise the heap as early as possible.
+ * Once this is done, malloc() is usable.
+ */
+ bios_getmem();
#if defined(LOADER_BZIP2_SUPPORT) || defined(LOADER_FIREWIRE_SUPPORT) || \
defined(LOADER_GPT_SUPPORT) || defined(LOADER_ZFS_SUPPORT)
- if (high_heap_size > 0) {
- heap_top = PTOV(high_heap_base + high_heap_size);
- heap_bottom = PTOV(high_heap_base);
- if (high_heap_base < memtop_copyin)
- memtop_copyin = high_heap_base;
- } else
+ if (high_heap_size > 0) {
+ heap_top = PTOV(high_heap_base + high_heap_size);
+ heap_bottom = PTOV(high_heap_base);
+ if (high_heap_base < memtop_copyin)
+ memtop_copyin = high_heap_base;
+ } else
#endif
- {
- heap_top = (void *)PTOV(bios_basemem);
- heap_bottom = (void *)end;
- }
- setheap(heap_bottom, heap_top);
-
- /*
- * XXX Chicken-and-egg problem; we want to have console output early, but some
- * console attributes may depend on reading from eg. the boot device, which we
- * can't do yet.
- *
- * We can use printf() etc. once this is done.
- * If the previous boot stage has requested a serial console, prefer that.
- */
- bi_setboothowto(initial_howto);
- if (initial_howto & RB_MULTIPLE) {
- if (initial_howto & RB_SERIAL)
- setenv("console", "comconsole vidconsole", 1);
- else
- setenv("console", "vidconsole comconsole", 1);
- } else if (initial_howto & RB_SERIAL)
- setenv("console", "comconsole", 1);
- else if (initial_howto & RB_MUTE)
- setenv("console", "nullconsole", 1);
- cons_probe();
-
- /*
- * Initialise the block cache. Set the upper limit.
- */
- bcache_init(32768, 512);
-
- /*
- * Special handling for PXE and CD booting.
- */
- if (kargs->bootinfo == 0) {
+ {
+ heap_top = (void *)PTOV(bios_basemem);
+ heap_bottom = (void *)end;
+ }
+ setheap(heap_bottom, heap_top);
+
/*
- * We only want the PXE disk to try to init itself in the below
- * walk through devsw if we actually booted off of PXE.
+ * XXX Chicken-and-egg problem; we want to have console output early,
+ * but some console attributes may depend on reading from eg. the boot
+ * device, which we can't do yet.
+ *
+ * We can use printf() etc. once this is done.
+ * If the previous boot stage has requested a serial console,
+ * prefer that.
*/
- if (kargs->bootflags & KARGS_FLAGS_PXE)
- pxe_enable(kargs->pxeinfo ? PTOV(kargs->pxeinfo) : NULL);
- else if (kargs->bootflags & KARGS_FLAGS_CD)
- bc_add(initial_bootdev);
- }
-
- archsw.arch_autoload = i386_autoload;
- archsw.arch_getdev = i386_getdev;
- archsw.arch_copyin = i386_copyin;
- archsw.arch_copyout = i386_copyout;
- archsw.arch_readin = i386_readin;
- archsw.arch_isainb = isa_inb;
- archsw.arch_isaoutb = isa_outb;
- archsw.arch_hypervisor = x86_hypervisor;
+ bi_setboothowto(initial_howto);
+ if (initial_howto & RB_MULTIPLE) {
+ if (initial_howto & RB_SERIAL)
+ setenv("console", "comconsole vidconsole", 1);
+ else
+ setenv("console", "vidconsole comconsole", 1);
+ } else if (initial_howto & RB_SERIAL) {
+ setenv("console", "comconsole", 1);
+ } else if (initial_howto & RB_MUTE) {
+ setenv("console", "nullconsole", 1);
+ }
+ cons_probe();
+
+ /*
+ * Initialise the block cache. Set the upper limit.
+ */
+ bcache_init(32768, 512);
+
+ /*
+ * Special handling for PXE and CD booting.
+ */
+ if (kargs->bootinfo == 0) {
+ /*
+ * We only want the PXE disk to try to init itself in the below
+ * walk through devsw if we actually booted off of PXE.
+ */
+ if (kargs->bootflags & KARGS_FLAGS_PXE)
+ pxe_enable(kargs->pxeinfo ?
+ PTOV(kargs->pxeinfo) : NULL);
+ else if (kargs->bootflags & KARGS_FLAGS_CD)
+ bc_add(initial_bootdev);
+ }
+
+ archsw.arch_autoload = i386_autoload;
+ archsw.arch_getdev = i386_getdev;
+ archsw.arch_copyin = i386_copyin;
+ archsw.arch_copyout = i386_copyout;
+ archsw.arch_readin = i386_readin;
+ archsw.arch_isainb = isa_inb;
+ archsw.arch_isaoutb = isa_outb;
+ archsw.arch_hypervisor = x86_hypervisor;
#ifdef LOADER_ZFS_SUPPORT
- archsw.arch_zfs_probe = i386_zfs_probe;
+ archsw.arch_zfs_probe = i386_zfs_probe;
- /*
- * zfsboot and gptzfsboot have always passed KARGS_FLAGS_ZFS, so if that is
- * set along with KARGS_FLAGS_EXTARG we know we can interpret the extarg
- * data as a struct zfs_boot_args.
- */
+ /*
+ * zfsboot and gptzfsboot have always passed KARGS_FLAGS_ZFS,
+ * so if that is set along with KARGS_FLAGS_EXTARG we know we
+ * can interpret the extarg data as a struct zfs_boot_args.
+ */
#define KARGS_EXTARGS_ZFS (KARGS_FLAGS_EXTARG | KARGS_FLAGS_ZFS)
- if ((kargs->bootflags & KARGS_EXTARGS_ZFS) == KARGS_EXTARGS_ZFS) {
- zargs = (struct zfs_boot_args *)(kargs + 1);
- }
+ if ((kargs->bootflags & KARGS_EXTARGS_ZFS) == KARGS_EXTARGS_ZFS) {
+ zargs = (struct zfs_boot_args *)(kargs + 1);
+ }
#endif /* LOADER_ZFS_SUPPORT */
#ifdef LOADER_GELI_SUPPORT
- /*
- * If we decided earlier that we have zfs_boot_args extarg data, and it is
- * big enough to contain the embedded geli data (the early zfs_boot_args
- * structs weren't), then init the gbdata pointer accordingly. If there is
- * extarg data which isn't zfs_boot_args data, determine whether it is
- * geli_boot_args data. Recent versions of gptboot set KARGS_FLAGS_GELI to
- * indicate that. Earlier versions didn't, but we presume that's what we
- * have if the extarg size exactly matches the size of the geli_boot_args
- * struct during that pre-flag era.
- */
+ /*
+ * If we decided earlier that we have zfs_boot_args extarg data,
+ * and it is big enough to contain the embedded geli data
+ * (the early zfs_boot_args structs weren't), then init the gbdata
+ * pointer accordingly. If there is extarg data which isn't
+ * zfs_boot_args data, determine whether it is geli_boot_args data.
+ * Recent versions of gptboot set KARGS_FLAGS_GELI to indicate that.
+ * Earlier versions didn't, but we presume that's what we
+ * have if the extarg size exactly matches the size of the
+ * geli_boot_args struct during that pre-flag era.
+ */
#define LEGACY_GELI_ARGS_SIZE 260 /* This can never change */
#ifdef LOADER_ZFS_SUPPORT
- if (zargs != NULL) {
- if (zargs->size > offsetof(struct zfs_boot_args, gelidata)) {
- gbdata = &zargs->gelidata;
- }
- } else
+ if (zargs != NULL) {
+ if (zargs->size > offsetof(struct zfs_boot_args, gelidata)) {
+ gbdata = &zargs->gelidata;
+ }
+ } else
#endif /* LOADER_ZFS_SUPPORT */
- if ((kargs->bootflags & KARGS_FLAGS_EXTARG) != 0) {
- gargs = (struct geli_boot_args *)(kargs + 1);
- if ((kargs->bootflags & KARGS_FLAGS_GELI) ||
- gargs->size == LEGACY_GELI_ARGS_SIZE) {
- gbdata = &gargs->gelidata;
+ if ((kargs->bootflags & KARGS_FLAGS_EXTARG) != 0) {
+ gargs = (struct geli_boot_args *)(kargs + 1);
+ if ((kargs->bootflags & KARGS_FLAGS_GELI) ||
+ gargs->size == LEGACY_GELI_ARGS_SIZE) {
+ gbdata = &gargs->gelidata;
+ }
}
- }
- if (gbdata != NULL)
- import_geli_boot_data(gbdata);
+ if (gbdata != NULL)
+ import_geli_boot_data(gbdata);
#endif /* LOADER_GELI_SUPPORT */
- /*
- * March through the device switch probing for things.
- */
- for (i = 0; devsw[i] != NULL; i++)
- if (devsw[i]->dv_init != NULL)
- (devsw[i]->dv_init)();
- printf("BIOS %dkB/%dkB available memory\n", bios_basemem / 1024, bios_extmem / 1024);
- if (initial_bootinfo != NULL) {
- initial_bootinfo->bi_basemem = bios_basemem / 1024;
- initial_bootinfo->bi_extmem = bios_extmem / 1024;
- }
+ /*
+ * March through the device switch probing for things.
+ */
+ for (i = 0; devsw[i] != NULL; i++)
+ if (devsw[i]->dv_init != NULL)
+ (devsw[i]->dv_init)();
+
+ printf("BIOS %dkB/%dkB available memory\n", bios_basemem / 1024,
+ bios_extmem / 1024);
+ if (initial_bootinfo != NULL) {
+ initial_bootinfo->bi_basemem = bios_basemem / 1024;
+ initial_bootinfo->bi_extmem = bios_extmem / 1024;
+ }
- /* detect ACPI for future reference */
- biosacpi_detect();
+ /* detect ACPI for future reference */
+ biosacpi_detect();
- /* detect SMBIOS for future reference */
- smbios_detect(NULL);
+ /* detect SMBIOS for future reference */
+ smbios_detect(NULL);
- /* detect PCI BIOS for future reference */
- biospci_detect();
+ /* detect PCI BIOS for future reference */
+ biospci_detect();
- printf("\n%s", bootprog_info);
+ printf("\n%s", bootprog_info);
- extract_currdev(); /* set $currdev and $loaddev */
+ extract_currdev(); /* set $currdev and $loaddev */
- bios_getsmap();
+ bios_getsmap();
- interact();
+ interact();
- /* if we ever get here, it is an error */
- return (1);
+ /* if we ever get here, it is an error */
+ return (1);
}
/*
@@ -263,92 +271,105 @@ main(void)
static void
extract_currdev(void)
{
- struct i386_devdesc new_currdev;
+ struct i386_devdesc new_currdev;
#ifdef LOADER_ZFS_SUPPORT
- char buf[20];
+ char buf[20];
#endif
- int biosdev = -1;
-
- /* Assume we are booting from a BIOS disk by default */
- new_currdev.dd.d_dev = &bioshd;
-
- /* new-style boot loaders such as pxeldr and cdldr */
- if (kargs->bootinfo == 0) {
- if ((kargs->bootflags & KARGS_FLAGS_CD) != 0) {
- /* we are booting from a CD with cdboot */
- new_currdev.dd.d_dev = &bioscd;
- new_currdev.dd.d_unit = bd_bios2unit(initial_bootdev);
- } else if ((kargs->bootflags & KARGS_FLAGS_PXE) != 0) {
- /* we are booting from pxeldr */
- new_currdev.dd.d_dev = &pxedisk;
- new_currdev.dd.d_unit = 0;
- } else {
- /* we don't know what our boot device is */
- new_currdev.d_kind.biosdisk.slice = -1;
- new_currdev.d_kind.biosdisk.partition = 0;
- biosdev = -1;
- }
+ int biosdev = -1;
+
+ /* Assume we are booting from a BIOS disk by default */
+ new_currdev.dd.d_dev = &bioshd;
+
+ /* new-style boot loaders such as pxeldr and cdldr */
+ if (kargs->bootinfo == 0) {
+ if ((kargs->bootflags & KARGS_FLAGS_CD) != 0) {
+ /* we are booting from a CD with cdboot */
+ new_currdev.dd.d_dev = &bioscd;
+ new_currdev.dd.d_unit = bd_bios2unit(initial_bootdev);
+ } else if ((kargs->bootflags & KARGS_FLAGS_PXE) != 0) {
+ /* we are booting from pxeldr */
+ new_currdev.dd.d_dev = &pxedisk;
+ new_currdev.dd.d_unit = 0;
+ } else {
+ /* we don't know what our boot device is */
+ new_currdev.d_kind.biosdisk.slice = -1;
+ new_currdev.d_kind.biosdisk.partition = 0;
+ biosdev = -1;
+ }
#ifdef LOADER_ZFS_SUPPORT
- } else if ((kargs->bootflags & KARGS_FLAGS_ZFS) != 0) {
- /* zargs was set in main() if we have new style extended argument */
- if (zargs != NULL &&
- zargs->size >= offsetof(struct zfs_boot_args, primary_pool)) {
- /* sufficient data is provided */
- new_currdev.d_kind.zfs.pool_guid = zargs->pool;
- new_currdev.d_kind.zfs.root_guid = zargs->root;
- if (zargs->size >= sizeof(*zargs) && zargs->primary_vdev != 0) {
- sprintf(buf, "%llu", zargs->primary_pool);
- setenv("vfs.zfs.boot.primary_pool", buf, 1);
- sprintf(buf, "%llu", zargs->primary_vdev);
- setenv("vfs.zfs.boot.primary_vdev", buf, 1);
- }
+ } else if ((kargs->bootflags & KARGS_FLAGS_ZFS) != 0) {
+ /*
+ * zargs was set in main() if we have new style extended
+ * argument
+ */
+ if (zargs != NULL &&
+ zargs->size >=
+ offsetof(struct zfs_boot_args, primary_pool)) {
+ /* sufficient data is provided */
+ new_currdev.d_kind.zfs.pool_guid = zargs->pool;
+ new_currdev.d_kind.zfs.root_guid = zargs->root;
+ if (zargs->size >= sizeof(*zargs) &&
+ zargs->primary_vdev != 0) {
+ sprintf(buf, "%llu", zargs->primary_pool);
+ setenv("vfs.zfs.boot.primary_pool", buf, 1);
+ sprintf(buf, "%llu", zargs->primary_vdev);
+ setenv("vfs.zfs.boot.primary_vdev", buf, 1);
+ }
+ } else {
+ /* old style zfsboot block */
+ new_currdev.d_kind.zfs.pool_guid = kargs->zfspool;
+ new_currdev.d_kind.zfs.root_guid = 0;
+ }
+ new_currdev.dd.d_dev = &zfs_dev;
+#endif
+ } else if ((initial_bootdev & B_MAGICMASK) != B_DEVMAGIC) {
+ /* The passed-in boot device is bad */
+ new_currdev.d_kind.biosdisk.slice = -1;
+ new_currdev.d_kind.biosdisk.partition = 0;
+ biosdev = -1;
} else {
- /* old style zfsboot block */
- new_currdev.d_kind.zfs.pool_guid = kargs->zfspool;
- new_currdev.d_kind.zfs.root_guid = 0;
+ new_currdev.d_kind.biosdisk.slice =
+ B_SLICE(initial_bootdev) - 1;
+ new_currdev.d_kind.biosdisk.partition =
+ B_PARTITION(initial_bootdev);
+ biosdev = initial_bootinfo->bi_bios_dev;
+
+ /*
+ * If we are booted by an old bootstrap, we have to guess at
+ * the BIOS unit number. We will lose if there is more than
+ * one disk type and we are not booting from the
+ * lowest-numbered disk type (ie. SCSI when IDE also exists).
+ */
+ if ((biosdev == 0) && (B_TYPE(initial_bootdev) != 2)) {
+ /*
+ * biosdev doesn't match major, assume harddisk
+ */
+ biosdev = 0x80 + B_UNIT(initial_bootdev);
+ }
}
- new_currdev.dd.d_dev = &zfs_dev;
-#endif
- } else if ((initial_bootdev & B_MAGICMASK) != B_DEVMAGIC) {
- /* The passed-in boot device is bad */
- new_currdev.d_kind.biosdisk.slice = -1;
- new_currdev.d_kind.biosdisk.partition = 0;
- biosdev = -1;
- } else {
- new_currdev.d_kind.biosdisk.slice = B_SLICE(initial_bootdev) - 1;
- new_currdev.d_kind.biosdisk.partition = B_PARTITION(initial_bootdev);
- biosdev = initial_bootinfo->bi_bios_dev;
/*
- * If we are booted by an old bootstrap, we have to guess at the BIOS
- * unit number. We will lose if there is more than one disk type
- * and we are not booting from the lowest-numbered disk type
- * (ie. SCSI when IDE also exists).
+ * If we are booting off of a BIOS disk and we didn't succeed
+ * in determining which one we booted off of, just use disk0:
+ * as a reasonable default.
*/
- if ((biosdev == 0) && (B_TYPE(initial_bootdev) != 2)) /* biosdev doesn't match major */
- biosdev = 0x80 + B_UNIT(initial_bootdev); /* assume harddisk */
- }
-
- /*
- * If we are booting off of a BIOS disk and we didn't succeed in determining
- * which one we booted off of, just use disk0: as a reasonable default.
- */
- if ((new_currdev.dd.d_dev->dv_type == bioshd.dv_type) &&
- ((new_currdev.dd.d_unit = bd_bios2unit(biosdev)) == -1)) {
- printf("Can't work out which disk we are booting from.\n"
- "Guessed BIOS device 0x%x not found by probes, defaulting to disk0:\n", biosdev);
- new_currdev.dd.d_unit = 0;
- }
+ if ((new_currdev.dd.d_dev->dv_type == bioshd.dv_type) &&
+ ((new_currdev.dd.d_unit = bd_bios2unit(biosdev)) == -1)) {
+ printf("Can't work out which disk we are booting "
+ "from.\nGuessed BIOS device 0x%x not found by "
+ "probes, defaulting to disk0:\n", biosdev);
+ new_currdev.dd.d_unit = 0;
+ }
#ifdef LOADER_ZFS_SUPPORT
- if (new_currdev.dd.d_dev->dv_type == DEVT_ZFS)
- init_zfs_bootenv(zfs_fmtdev(&new_currdev));
+ if (new_currdev.dd.d_dev->dv_type == DEVT_ZFS)
+ init_zfs_bootenv(zfs_fmtdev(&new_currdev));
#endif
- env_setenv("currdev", EV_VOLATILE, i386_fmtdev(&new_currdev),
- i386_setcurrdev, env_nounset);
- env_setenv("loaddev", EV_VOLATILE, i386_fmtdev(&new_currdev), env_noset,
- env_nounset);
+ env_setenv("currdev", EV_VOLATILE, i386_fmtdev(&new_currdev),
+ i386_setcurrdev, env_nounset);
+ env_setenv("loaddev", EV_VOLATILE, i386_fmtdev(&new_currdev),
+ env_noset, env_nounset);
}
COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot);
@@ -356,22 +377,22 @@ COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot);
static int
command_reboot(int argc, char *argv[])
{
- int i;
+ int i;
- for (i = 0; devsw[i] != NULL; ++i)
- if (devsw[i]->dv_cleanup != NULL)
- (devsw[i]->dv_cleanup)();
+ for (i = 0; devsw[i] != NULL; ++i)
+ if (devsw[i]->dv_cleanup != NULL)
+ (devsw[i]->dv_cleanup)();
- printf("Rebooting...\n");
- delay(1000000);
- __exit(0);
+ printf("Rebooting...\n");
+ delay(1000000);
+ __exit(0);
}
/* provide this for panic, as it's not in the startup code */
void
exit(int code)
{
- __exit(code);
+ __exit(code);
}
COMMAND_SET(heap, "heap", "show heap usage", command_heap);
@@ -379,10 +400,10 @@ COMMAND_SET(heap, "heap", "show heap usage", command_heap);
static int
command_heap(int argc, char *argv[])
{
- mallocstats();
- printf("heap base at %p, top at %p, upper limit at %p\n", heap_bottom,
- sbrk(0), heap_top);
- return(CMD_OK);
+ mallocstats();
+ printf("heap base at %p, top at %p, upper limit at %p\n", heap_bottom,
+ sbrk(0), heap_top);
+ return (CMD_OK);
}
/* ISA bus access functions for PnP. */
@@ -390,32 +411,32 @@ static int
isa_inb(int port)
{
- return (inb(port));
+ return (inb(port));
}
static void
isa_outb(int port, int value)
{
- outb(port, value);
+ outb(port, value);
}
#ifdef LOADER_ZFS_SUPPORT
static void
i386_zfs_probe(void)
{
- char devname[32];
- struct i386_devdesc dev;
-
- /*
- * Open all the disks we can find and see if we can reconstruct
- * ZFS pools from them.
- */
- dev.dd.d_dev = &bioshd;
- for (dev.dd.d_unit = 0; bd_unit2bios(&dev) >= 0; dev.dd.d_unit++) {
- snprintf(devname, sizeof(devname), "%s%d:", bioshd.dv_name,
- dev.dd.d_unit);
- zfs_probe_dev(devname, NULL);
- }
+ char devname[32];
+ struct i386_devdesc dev;
+
+ /*
+ * Open all the disks we can find and see if we can reconstruct
+ * ZFS pools from them.
+ */
+ dev.dd.d_dev = &bioshd;
+ for (dev.dd.d_unit = 0; bd_unit2bios(&dev) >= 0; dev.dd.d_unit++) {
+ snprintf(devname, sizeof(devname), "%s%d:", bioshd.dv_name,
+ dev.dd.d_unit);
+ zfs_probe_dev(devname, NULL);
+ }
}
#endif