Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/stand/i386/loader/conf.c
34869 views
1
/*-
2
* Copyright (c) 1998 Michael Smith <[email protected]>
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
159