1*479ab7f0SSascha Wildner /*- 2*479ab7f0SSascha Wildner * Copyright (c) 1998 Michael Smith <msmith@freebsd.org> 3*479ab7f0SSascha Wildner * All rights reserved. 4*479ab7f0SSascha Wildner * 5*479ab7f0SSascha Wildner * Redistribution and use in source and binary forms, with or without 6*479ab7f0SSascha Wildner * modification, are permitted provided that the following conditions 7*479ab7f0SSascha Wildner * are met: 8*479ab7f0SSascha Wildner * 1. Redistributions of source code must retain the above copyright 9*479ab7f0SSascha Wildner * notice, this list of conditions and the following disclaimer. 10*479ab7f0SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 11*479ab7f0SSascha Wildner * notice, this list of conditions and the following disclaimer in the 12*479ab7f0SSascha Wildner * documentation and/or other materials provided with the distribution. 13*479ab7f0SSascha Wildner * 14*479ab7f0SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*479ab7f0SSascha Wildner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*479ab7f0SSascha Wildner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*479ab7f0SSascha Wildner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*479ab7f0SSascha Wildner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*479ab7f0SSascha Wildner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*479ab7f0SSascha Wildner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*479ab7f0SSascha Wildner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*479ab7f0SSascha Wildner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*479ab7f0SSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*479ab7f0SSascha Wildner * SUCH DAMAGE. 25*479ab7f0SSascha Wildner * 26*479ab7f0SSascha Wildner * $FreeBSD: src/sys/boot/i386/loader/conf.c,v 1.24 2003/08/25 23:28:32 obrien Exp $ 27*479ab7f0SSascha Wildner * $DragonFly: src/sys/boot/pc32/loader/conf.c,v 1.4 2005/09/03 23:52:49 dillon Exp $ 28*479ab7f0SSascha Wildner */ 29*479ab7f0SSascha Wildner 30*479ab7f0SSascha Wildner #include <stand.h> 31*479ab7f0SSascha Wildner #include <bootstrap.h> 32*479ab7f0SSascha Wildner #include "libi386/libi386.h" 33*479ab7f0SSascha Wildner 34*479ab7f0SSascha Wildner /* 35*479ab7f0SSascha Wildner * We could use linker sets for some or all of these, but 36*479ab7f0SSascha Wildner * then we would have to control what ended up linked into 37*479ab7f0SSascha Wildner * the bootstrap. So it's easier to conditionalise things 38*479ab7f0SSascha Wildner * here. 39*479ab7f0SSascha Wildner * 40*479ab7f0SSascha Wildner * XXX rename these arrays to be consistent and less namespace-hostile 41*479ab7f0SSascha Wildner * 42*479ab7f0SSascha Wildner * XXX as libi386 and biosboot merge, some of these can become linker sets. 43*479ab7f0SSascha Wildner */ 44*479ab7f0SSascha Wildner 45*479ab7f0SSascha Wildner /* Exported for libstand */ 46*479ab7f0SSascha Wildner struct devsw *devsw[] = { 47*479ab7f0SSascha Wildner &bioscd, 48*479ab7f0SSascha Wildner &biosdisk, 49*479ab7f0SSascha Wildner #if defined(LOADER_NFS_SUPPORT) || defined(LOADER_TFTP_SUPPORT) 50*479ab7f0SSascha Wildner &pxedisk, 51*479ab7f0SSascha Wildner #endif 52*479ab7f0SSascha Wildner NULL 53*479ab7f0SSascha Wildner }; 54*479ab7f0SSascha Wildner 55*479ab7f0SSascha Wildner struct fs_ops *file_system[] = { 56*479ab7f0SSascha Wildner &hammer2_fsops, 57*479ab7f0SSascha Wildner &ufs_fsops, 58*479ab7f0SSascha Wildner &dosfs_fsops, 59*479ab7f0SSascha Wildner &ext2fs_fsops, 60*479ab7f0SSascha Wildner #ifdef LOADER_HAMMER1_SUPPORT 61*479ab7f0SSascha Wildner &hammer1_fsops, 62*479ab7f0SSascha Wildner #endif 63*479ab7f0SSascha Wildner &cd9660_fsops, 64*479ab7f0SSascha Wildner #ifdef LOADER_TFTP_SUPPORT 65*479ab7f0SSascha Wildner &tftp_fsops, 66*479ab7f0SSascha Wildner #endif 67*479ab7f0SSascha Wildner #ifdef LOADER_NFS_SUPPORT 68*479ab7f0SSascha Wildner &nfs_fsops, 69*479ab7f0SSascha Wildner #endif 70*479ab7f0SSascha Wildner #ifdef LOADER_GZIP_SUPPORT 71*479ab7f0SSascha Wildner &gzipfs_fsops, 72*479ab7f0SSascha Wildner #endif 73*479ab7f0SSascha Wildner #ifdef LOADER_BZIP2_SUPPORT 74*479ab7f0SSascha Wildner &bzipfs_fsops, 75*479ab7f0SSascha Wildner #endif 76*479ab7f0SSascha Wildner #ifdef LOADER_SPLITFS_SUPPORT 77*479ab7f0SSascha Wildner &splitfs_fsops, 78*479ab7f0SSascha Wildner #endif 79*479ab7f0SSascha Wildner NULL 80*479ab7f0SSascha Wildner }; 81*479ab7f0SSascha Wildner 82*479ab7f0SSascha Wildner /* Exported for i386 only */ 83*479ab7f0SSascha Wildner /* 84*479ab7f0SSascha Wildner * Sort formats so that those that can detect based on arguments 85*479ab7f0SSascha Wildner * rather than reading the file go first. 86*479ab7f0SSascha Wildner */ 87*479ab7f0SSascha Wildner extern struct file_format i386_elf; 88*479ab7f0SSascha Wildner extern struct file_format i386_elf_obj; 89*479ab7f0SSascha Wildner extern struct file_format x86_64_elf; 90*479ab7f0SSascha Wildner extern struct file_format x86_64_elf_obj; 91*479ab7f0SSascha Wildner 92*479ab7f0SSascha Wildner struct file_format *file_formats[] = { 93*479ab7f0SSascha Wildner &i386_elf, 94*479ab7f0SSascha Wildner &i386_elf_obj, 95*479ab7f0SSascha Wildner &x86_64_elf, 96*479ab7f0SSascha Wildner &x86_64_elf_obj, 97*479ab7f0SSascha Wildner NULL 98*479ab7f0SSascha Wildner }; 99*479ab7f0SSascha Wildner 100*479ab7f0SSascha Wildner /* 101*479ab7f0SSascha Wildner * Consoles 102*479ab7f0SSascha Wildner * 103*479ab7f0SSascha Wildner * We don't prototype these in libi386.h because they require 104*479ab7f0SSascha Wildner * data structures from bootstrap.h as well. 105*479ab7f0SSascha Wildner */ 106*479ab7f0SSascha Wildner extern struct console vidconsole; 107*479ab7f0SSascha Wildner extern struct console comconsole; 108*479ab7f0SSascha Wildner extern struct console nullconsole; 109*479ab7f0SSascha Wildner 110*479ab7f0SSascha Wildner struct console *consoles[] = { 111*479ab7f0SSascha Wildner &vidconsole, 112*479ab7f0SSascha Wildner &comconsole, 113*479ab7f0SSascha Wildner &nullconsole, 114*479ab7f0SSascha Wildner NULL 115*479ab7f0SSascha Wildner }; 116*479ab7f0SSascha Wildner 117*479ab7f0SSascha Wildner extern struct pnphandler isapnphandler; 118*479ab7f0SSascha Wildner extern struct pnphandler biospnphandler; 119*479ab7f0SSascha Wildner extern struct pnphandler biospcihandler; 120*479ab7f0SSascha Wildner 121*479ab7f0SSascha Wildner struct pnphandler *pnphandlers[] = { 122*479ab7f0SSascha Wildner &biospnphandler, /* should go first, as it may set isapnp_readport */ 123*479ab7f0SSascha Wildner &isapnphandler, 124*479ab7f0SSascha Wildner &biospcihandler, 125*479ab7f0SSascha Wildner NULL 126*479ab7f0SSascha Wildner }; 127