Root/
Source at commit 2381 created 10 years 21 days ago. By ifabio, Apply patch: (Credits to Thomas Jansen aka tja) - Reading options from all devices during boot. The options for the boot menu are only read from the devices rd(0,0) or bt(0,0). Consequently, boot menu options (e.g. "Quiet Boot", "Timeout", etc.) in plists on other devices (like most users have) are ignored. This patch extends the list of paths to search for the options plist on all devices that can be found. | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 1999-2003 Apple Computer, Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights␊ |
7 | * Reserved. This file contains Original Code and/or Modifications of␊ |
8 | * Original Code as defined in and that are subject to the Apple Public␊ |
9 | * Source License Version 2.0 (the "License").␉You may not use this file␊ |
10 | * except in compliance with the License. Please obtain a copy of the␊ |
11 | * License at http://www.apple.com/publicsource and read it before using␊ |
12 | * this file.␊ |
13 | * ␊ |
14 | * The Original Code and all software distributed under the License are␊ |
15 | * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
16 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
17 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
18 | * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the␊ |
19 | * License for the specific language governing rights and limitations␊ |
20 | * under the License.␊ |
21 | * ␊ |
22 | * @APPLE_LICENSE_HEADER_END@␊ |
23 | */␊ |
24 | /* Useful types. */␊ |
25 | ␊ |
26 | #ifndef __LIBSAIO_SAIO_TYPES_H␊ |
27 | #define __LIBSAIO_SAIO_TYPES_H␊ |
28 | ␊ |
29 | #include <sys/reboot.h>␊ |
30 | #include <sys/types.h>␊ |
31 | #include <sys/param.h>␊ |
32 | #include "bios.h"␊ |
33 | #include "nbp_cmd.h"␊ |
34 | #include "bootargs.h"␊ |
35 | ␊ |
36 | #if DEBUG␊ |
37 | #define DEBUG_DISK(x) printf x␊ |
38 | #else␊ |
39 | #define DEBUG_DISK(x)␊ |
40 | #endif␊ |
41 | ␊ |
42 | typedef unsigned long entry_t;␊ |
43 | ␊ |
44 | typedef struct {␊ |
45 | ␉unsigned int sectors:8;␊ |
46 | ␉unsigned int heads:8;␊ |
47 | ␉unsigned int cylinders:16;␊ |
48 | } compact_diskinfo_t;␊ |
49 | ␊ |
50 | struct driveParameters {␊ |
51 | ␉int cylinders;␊ |
52 | ␉int sectors;␊ |
53 | ␉int heads;␊ |
54 | ␉int totalDrives;␊ |
55 | };␊ |
56 | ␊ |
57 | struct Tag {␊ |
58 | ␉long␉␉type;␊ |
59 | ␉char␉ *string;␊ |
60 | ␉long␉␉offset;␊ |
61 | ␉struct Tag *tag;␊ |
62 | ␉struct Tag *tagNext;␊ |
63 | };␊ |
64 | typedef struct Tag Tag, *TagPtr;␊ |
65 | ␊ |
66 | /*␊ |
67 | * Max size fo config data array, in bytes.␊ |
68 | */␊ |
69 | #define IO_CONFIG_DATA_SIZE␉␉40960 // was 4096 // was 163840␊ |
70 | ␊ |
71 | typedef struct {␊ |
72 | ␉char␉plist[IO_CONFIG_DATA_SIZE];␉// buffer for plist␊ |
73 | ␉TagPtr␉dictionary;␉␉// buffer for xml dictionary␊ |
74 | ␉bool␉canOverride;␉// flag to mark a dictionary can be overriden␊ |
75 | } config_file_t;␊ |
76 | ␊ |
77 | /*␊ |
78 | * BIOS drive information.␊ |
79 | */␊ |
80 | struct boot_drive_info {␊ |
81 | ␉struct drive_params {␊ |
82 | ␉unsigned short buf_size;␊ |
83 | ␉unsigned short info_flags;␊ |
84 | ␉unsigned long phys_cyls;␊ |
85 | ␉unsigned long phys_heads;␊ |
86 | ␉unsigned long phys_spt;␊ |
87 | ␉unsigned long long phys_sectors;␊ |
88 | ␉unsigned short phys_nbps;␊ |
89 | ␉unsigned short dpte_offset;␊ |
90 | ␉unsigned short dpte_segment;␊ |
91 | ␉unsigned short key;␊ |
92 | ␉unsigned char path_len;␊ |
93 | ␉unsigned char reserved1;␊ |
94 | ␉unsigned short reserved2;␊ |
95 | ␉unsigned char bus_type[4];␊ |
96 | ␉unsigned char interface_type[8];␊ |
97 | ␉unsigned char interface_path[8];␊ |
98 | ␉unsigned char dev_path[8];␊ |
99 | ␉unsigned char reserved3;␊ |
100 | ␉unsigned char checksum;␊ |
101 | ␉} params;␊ |
102 | ␉struct drive_dpte {␊ |
103 | ␉unsigned short io_port_base;␊ |
104 | ␉unsigned short control_port_base;␊ |
105 | ␉unsigned char head_flags;␊ |
106 | ␉unsigned char vendor_info;␊ |
107 | ␉unsigned char irq␉␉ : 4;␊ |
108 | ␉unsigned char irq_unused : 4;␊ |
109 | ␉unsigned char block_count;␊ |
110 | ␉unsigned char dma_channel : 4;␊ |
111 | ␉unsigned char dma_type␉ : 4;␊ |
112 | ␉unsigned char pio_type␉ : 4;␊ |
113 | ␉unsigned char pio_unused : 4;␊ |
114 | ␉unsigned short option_flags;␊ |
115 | ␉unsigned short reserved;␊ |
116 | ␉unsigned char revision;␊ |
117 | ␉unsigned char checksum;␊ |
118 | ␉} dpte;␊ |
119 | } __attribute__((packed));␊ |
120 | typedef struct boot_drive_info boot_drive_info_t;␊ |
121 | ␊ |
122 | struct driveInfo {␊ |
123 | ␉boot_drive_info_t di;␊ |
124 | ␉int uses_ebios;␊ |
125 | ␉int no_emulation;␊ |
126 | ␉int biosdev;␊ |
127 | ␉int valid;␊ |
128 | };␊ |
129 | ␊ |
130 | typedef struct FinderInfo {␊ |
131 | ␉unsigned char data[16];␊ |
132 | } FinderInfo;␊ |
133 | ␊ |
134 | struct␉␉ BootVolume;␊ |
135 | typedef struct BootVolume * BVRef;␊ |
136 | typedef struct BootVolume * CICell;␊ |
137 | ␊ |
138 | typedef long (*FSInit)(CICell ih);␊ |
139 | typedef long (*FSLoadFile)(CICell ih, char * filePath);␊ |
140 | typedef long (*FSReadFile)(CICell ih, char *filePath, void *base, uint64_t offset, uint64_t length);␊ |
141 | typedef long (*FSGetFileBlock)(CICell ih, char *filePath, unsigned long long *firstBlock);␊ |
142 | typedef long (*FSGetDirEntry)(CICell ih, char * dirPath, long long * dirIndex,␊ |
143 | ␉␉␉␉␉␉␉ char ** name, long * flags, long * time,␊ |
144 | ␉␉␉␉␉␉␉ FinderInfo * finderInfo, long * infoValid);␊ |
145 | typedef long (*FSGetUUID)(CICell ih, char *uuidStr);␊ |
146 | typedef void (*BVGetDescription)(CICell ih, char * str, long strMaxLen);␊ |
147 | // Can be just pointed to free or a special free function␊ |
148 | typedef void (*BVFree)(CICell ih);␊ |
149 | ␊ |
150 | struct iob {␊ |
151 | ␉unsigned int i_flgs;␉␉␉/* see F_* below */␊ |
152 | ␉unsigned int i_offset;␉␉/* seek byte offset in file */␊ |
153 | ␉int␉␉␉ i_filesize;␉␉/* size of file */␊ |
154 | ␉char *␉␉ i_buf;␉␉␉/* file load address */␊ |
155 | };␊ |
156 | ␊ |
157 | #define BPS␉␉ 512␉␉␉␉/* sector size of the device */␊ |
158 | #define F_READ␉ 0x1␉␉␉␉/* file opened for reading */␊ |
159 | #define F_WRITE␉ 0x2␉␉␉␉/* file opened for writing */␊ |
160 | #define F_ALLOC␉ 0x4␉␉␉␉/* buffer allocated */␊ |
161 | #define F_FILE␉ 0x8␉␉␉␉/* file instead of device */␊ |
162 | #define F_NBSF␉ 0x10␉␉␉␉/* no bad sector forwarding */␊ |
163 | #define F_SSI␉ 0x40␉␉␉␉/* set skip sector inhibit */␊ |
164 | #define F_MEM␉ 0x80␉␉␉␉/* memory instead of file or device */␊ |
165 | ␊ |
166 | struct dirstuff {␊ |
167 | ␉char *␉␉ dir_path;␉␉/* directory path */␊ |
168 | ␉long long␉ dir_index;␉␉/* directory entry index */␊ |
169 | ␉BVRef␉␉ dir_bvr;␉␉␉/* volume reference */␊ |
170 | };␊ |
171 | ␊ |
172 | #define BVSTRLEN 32␊ |
173 | ␊ |
174 | struct BootVolume {␊ |
175 | ␉BVRef␉␉␉ next;␉␉␉ /* list linkage pointer */␊ |
176 | ␉int␉␉␉␉ biosdev;␉␉ /* BIOS device number */␊ |
177 | ␉int␉␉␉␉ type;␉␉␉ /* device type (floppy, hd, network) */␊ |
178 | ␉unsigned int␉ flags;␉␉␉ /* attribute flags */␊ |
179 | ␉BVGetDescription description;␉ /* BVGetDescription function */␊ |
180 | ␉int␉␉␉␉ part_no;␉␉ /* partition number (1 based) */␊ |
181 | ␉unsigned int␉ part_boff;␉␉ /* partition block offset */␊ |
182 | ␉unsigned int␉ part_type;␉␉ /* partition type */␊ |
183 | ␉unsigned int␉ fs_boff;␉␉ /* 1st block # of next read */␊ |
184 | ␉unsigned int␉ fs_byteoff;␉ /* Byte offset for read within block */␊ |
185 | ␉FSLoadFile␉␉ fs_loadfile;␉ /* FSLoadFile function */␊ |
186 | ␉FSReadFile␉␉ fs_readfile;␉ /* FSReadFile function */␊ |
187 | ␉FSGetDirEntry␉ fs_getdirentry; /* FSGetDirEntry function */␊ |
188 | ␉FSGetFileBlock␉ fs_getfileblock; /* FSGetFileBlock function */␊ |
189 | ␉FSGetUUID␉␉ fs_getuuid;␉ /* FSGetUUID function */␊ |
190 | ␉unsigned int␉ bps;␉␉␉ /* bytes per sector for this device */␊ |
191 | ␉char␉␉␉ name[BVSTRLEN]; /* (name of partition) */␊ |
192 | ␉char␉␉␉ type_name[BVSTRLEN]; /* (type of partition, eg. Apple_HFS) */␊ |
193 | ␉BVFree␉␉␉ bv_free;␉␉ /* BVFree function */␊ |
194 | ␉uint32_t␉␉ modTime;␊ |
195 | ␉char␉␉␉ label[BVSTRLEN]; /* partition volume label */␊ |
196 | ␉char␉␉␉ altlabel[BVSTRLEN]; /* partition volume label */␊ |
197 | ␉bool␉␉␉ filtered;␉␉ /* newFilteredBVChain() will set to TRUE */␊ |
198 | ␉bool␉␉␉ visible;␉␉ /* will shown in the device list */␊ |
199 | char␉␉␉ OSVersion[8];␊ |
200 | bool OSisServer; /* 1 = OS X server , 0 = OS X client */␊ |
201 | ␉bool OSisInstaller; /* 1 = OS X Install partition / recover partition , 0 = OS X Install */␊ |
202 | ␊ |
203 | };␊ |
204 | ␊ |
205 | enum {␊ |
206 | ␉kBVFlagPrimary␉␉␉= 0x01,␊ |
207 | ␉kBVFlagNativeBoot␉␉= 0x02,␊ |
208 | ␉kBVFlagForeignBoot␉␉= 0x04,␊ |
209 | ␉kBVFlagBootable␉␉␉= 0x08,␊ |
210 | ␉kBVFlagEFISystem␉␉= 0x10,␊ |
211 | ␉kBVFlagBooter␉␉␉= 0x20,␊ |
212 | ␉kBVFlagSystemVolume␉␉= 0x40␊ |
213 | };␊ |
214 | ␊ |
215 | enum {␊ |
216 | ␉kBIOSDevTypeFloppy␉␉= 0x00,␊ |
217 | ␉kBIOSDevTypeHardDrive␉= 0x80,␊ |
218 | ␉kBIOSDevTypeNetwork␉␉= 0xE0,␊ |
219 | ␉kBIOSDevUnitMask␉␉= 0x0F,␊ |
220 | ␉kBIOSDevTypeMask␉␉= 0xF0,␊ |
221 | ␉kBIOSDevMask␉␉␉= 0xFF␊ |
222 | };␊ |
223 | ␊ |
224 | enum {␊ |
225 | ␉kPartitionTypeHFS␉␉= 0xAF,␊ |
226 | ␉kPartitionTypeHPFS␉␉= 0x07,␊ |
227 | ␉kPartitionTypeFAT16␉␉= 0x06,␊ |
228 | ␉kPartitionTypeFAT32␉␉= 0x0c,␊ |
229 | ␉kPartitionTypeEXT3␉␉= 0x83,␊ |
230 | ␉kPartitionTypeBEFS␉␉= 0xEB,␊ |
231 | ␉kPartitionTypeFreeBSD␉␉= 0xa5,␊ |
232 | ␉kPartitionTypeOpenBSD␉␉= 0xa6␊ |
233 | };␊ |
234 | ␊ |
235 | //#define BIOS_DEV_TYPE(d)␉((d) & kBIOSDevTypeMask)␊ |
236 | #define BIOS_DEV_UNIT(bvr)␉((bvr)->biosdev - (bvr)->type)␊ |
237 | ␊ |
238 | /*␊ |
239 | * KernBootStruct device types.␊ |
240 | */␊ |
241 | enum {␊ |
242 | ␉DEV_SD = 0,␊ |
243 | ␉DEV_HD = 1,␊ |
244 | ␉DEV_FD = 2,␊ |
245 | ␉DEV_EN = 3␊ |
246 | };␊ |
247 | ␊ |
248 | /*␊ |
249 | * min/max Macros.␊ |
250 | * counting and rounding Macros.␊ |
251 | *␊ |
252 | * Azi: defined on <sys/param.h>,␊ |
253 | *␉␉i386/include/IOKit/IOLib.h (min/max), and others...␊ |
254 | *␊ |
255 | #ifndef MIN␊ |
256 | #define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )␊ |
257 | #endif␊ |
258 | #ifndef MAX␊ |
259 | #define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )␊ |
260 | #endif␊ |
261 | ␊ |
262 | #define round2(x, m)␉(((x) + (m / 2)) & ~(m - 1))␊ |
263 | #define roundup2(x, m)␉(((x) + m - 1) & ~(m - 1))*/␊ |
264 | ␊ |
265 | enum {␊ |
266 | ␉kNetworkDeviceType = kBIOSDevTypeNetwork,␊ |
267 | ␉kBlockDeviceType = kBIOSDevTypeHardDrive␊ |
268 | }; //gBootFileType_t;␊ |
269 | ␊ |
270 | enum {␊ |
271 | ␉kCursorTypeHidden␉ = 0x0100,␊ |
272 | ␉kCursorTypeUnderline = 0x0607␊ |
273 | };␊ |
274 | ␊ |
275 | #endif /* !__LIBSAIO_SAIO_TYPES_H */␊ |
276 |