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