Chameleon

Chameleon Svn Source Tree

Root/branches/Bungo/i386/libsaio/saio_types.h

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
42typedef unsigned long entry_t;
43
44typedef struct {
45unsigned int sectors:8;
46unsigned int heads:8;
47unsigned int cylinders:16;
48} compact_diskinfo_t;
49
50struct driveParameters {
51int cylinders;
52int sectors;
53int heads;
54int totalDrives;
55};
56
57struct Tag {
58longtype;
59char *string;
60longoffset;
61struct Tag *tag;
62struct Tag *tagNext;
63};
64typedef struct Tag Tag, *TagPtr;
65
66/*
67 * Max size fo config data array, in bytes.
68 */
69#define IO_CONFIG_DATA_SIZE40960 // was 4096 // was 163840
70
71typedef struct {
72charplist[IO_CONFIG_DATA_SIZE];// buffer for plist
73TagPtrdictionary; // buffer for xml dictionary
74boolcanOverride;// flag to mark a dictionary can be overriden
75} config_file_t;
76
77/*
78 * BIOS drive information.
79 */
80struct boot_drive_info {
81struct drive_params {
82unsigned short buf_size;
83unsigned short info_flags;
84unsigned long phys_cyls;
85unsigned long phys_heads;
86unsigned long phys_spt;
87unsigned long long phys_sectors;
88unsigned short phys_nbps;
89unsigned short dpte_offset;
90unsigned short dpte_segment;
91unsigned short key;
92unsigned char path_len;
93unsigned char reserved1;
94unsigned short reserved2;
95unsigned char bus_type[4];
96unsigned char interface_type[8];
97unsigned char interface_path[8];
98unsigned char dev_path[8];
99unsigned char reserved3;
100unsigned char checksum;
101} params;
102
103struct drive_dpte {
104unsigned short io_port_base;
105unsigned short control_port_base;
106unsigned char head_flags;
107unsigned char vendor_info;
108unsigned char irq : 4;
109unsigned char irq_unused : 4;
110unsigned char block_count;
111unsigned char dma_channel : 4;
112unsigned char dma_type : 4;
113unsigned char pio_type : 4;
114unsigned char pio_unused : 4;
115unsigned short option_flags;
116unsigned short reserved;
117unsigned char revision;
118unsigned char checksum;
119 } dpte;
120} __attribute__((packed));
121typedef struct boot_drive_info boot_drive_info_t;
122
123struct driveInfo {
124boot_drive_info_t di;
125
126int uses_ebios;
127int no_emulation;
128int biosdev;
129int valid;
130};
131
132typedef struct FinderInfo {
133unsigned char data[16];
134} FinderInfo;
135
136
137struct BootVolume;
138typedef struct BootVolume *BVRef;
139typedef struct BootVolume *CICell;
140
141typedef long (*FSInit)(CICell ih);
142typedef long (*FSLoadFile)(CICell ih, char * filePath);
143typedef long (*FSReadFile)(CICell ih, char *filePath, void *base, uint64_t offset, uint64_t length);
144typedef long (*FSGetFileBlock)(CICell ih, char *filePath, unsigned long long *firstBlock);
145typedef long (*FSGetDirEntry)(CICell ih, char * dirPath, long long * dirIndex,
146 char ** name, long * flags, u_int32_t * time,
147 FinderInfo * finderInfo, long * infoValid);
148typedef long (*FSGetUUID)(CICell ih, char *uuidStr);
149typedef void (*BVGetDescription)(CICell ih, char * str, long strMaxLen);
150// Can be just pointed to free or a special free function
151typedef void (*BVFree)(CICell ih);
152
153struct iob {
154char * i_buf; /* file load address */
155unsigned int i_flgs; /* see F_* below */
156unsigned int i_offset; /* seek byte offset in file */
157int i_filesize; /* size of file */
158};
159
160#define BPS 512 /* sector size of the device */
161#define F_READ 0x1/* file opened for reading */
162#define F_WRITE 0x2/* file opened for writing */
163#define F_ALLOC 0x4/* buffer allocated */
164#define F_FILE 0x8/* file instead of device */
165#define F_NBSF 0x10/* no bad sector forwarding */
166#define F_SSI 0x40/* set skip sector inhibit */
167#define F_MEM 0x80/* memory instead of file or device */
168
169struct dirstuff {
170char * dir_path;/* directory path */
171long long dir_index;/* directory entry index */
172BVRef dir_bvr; /* volume reference */
173};
174
175#define BVSTRLEN 36 // changed from 32 to 36 due to gpt partition name length
176#define OSVERSTRLEN 9
177
178struct BootVolume {
179BVRef next; /* list linkage pointer */
180int biosdev; /* BIOS device number */
181int type; /* device type (floppy, hd, network) */
182unsigned intflags; /* attribute flags */
183BVGetDescriptiondescription; /* BVGetDescription function */
184int part_no; /* partition number (1 based) */
185unsigned intpart_boff; /* partition block offset */
186unsigned intpart_type; /* partition type */
187unsigned intfs_boff; /* 1st block # of next read */
188unsigned intfs_byteoff; /* Byte offset for read within block */
189FSLoadFile fs_loadfile; /* FSLoadFile function */
190FSReadFile fs_readfile; /* FSReadFile function */
191FSGetDirEntryfs_getdirentry; /* FSGetDirEntry function */
192FSGetFileBlockfs_getfileblock; /* FSGetFileBlock function */
193FSGetUUID fs_getuuid; /* FSGetUUID function */
194unsigned intbps; /* bytes per sector for this device */
195char name[BVSTRLEN]; /* (name of partition) */
196char type_name[BVSTRLEN]; /* (type of partition, eg. Apple_HFS) */
197BVFree bv_free; /* BVFree function */
198uint32_t modTime;
199char label[BVSTRLEN]; /* partition volume label */
200char altlabel[BVSTRLEN]; /* alternate partition volume label */
201bool filtered; /* newFilteredBVChain() will set to TRUE */
202bool visible; /* will shown in the device list */
203char OSVersion[OSVERSTRLEN]; /* Null terminated string from '/System/Library/CoreServices/SystemVersion.plist/ProductVersion' e.g. "10.10.10" - hope will not reach e.g. 111.222.333 soon:) If so, OSVERSTRLEN 9 change to 12 */
204bool OSisServer; /* 1 = OS X server , 0 = OS X client */
205bool OSisInstaller; /* 1 = OS X Install partition / recovery partition , 0 = OS X Install */
206
207};
208
209enum {
210kBVFlagPrimary= 0x01,
211kBVFlagNativeBoot= 0x02,
212kBVFlagForeignBoot= 0x04,
213kBVFlagBootable= 0x08,
214kBVFlagEFISystem= 0x10,
215kBVFlagBooter= 0x20,
216kBVFlagSystemVolume= 0x40,
217kBVFlagInstallVolume= 0x80
218};
219
220enum {
221kBIOSDevTypeFloppy= 0x00,
222kBIOSDevTypeHardDrive= 0x80,
223kBIOSDevTypeNetwork= 0xE0,
224kBIOSDevUnitMask= 0x0F,
225kBIOSDevTypeMask= 0xF0,
226kBIOSDevMask= 0xFF
227};
228
229enum
230{
231//KPartitionTypeFAT12= 0x01, // FAT12
232kPartitionTypeHPFS = 0x07, // Mac OS X
233kPartitionTypeFAT16 = 0x06, // FAT16
234kPartitionTypeFAT32 = 0x0C, // FAT32
235kPartitionTypeEXT3 = 0x83, // Linux
236kPartitionTypeOSXBoot= 0xAB, // Mac OS X Boot partition
237kPartitionTypeFreeBSD= 0xA5, // FreeBSD
238kPartitionTypeOpenBSD= 0xA6, // OpenBSD
239//kPartitionTypeNeXTSTEP= 0xA7 // NeXTSTEP
240//kPartitionTypeNetBSD= 0xA9 // NetBSD
241kPartitionTypeHFS = 0xAF, // Mac OS X
242//kPartitionTypeSolaris= 0xBE, // Solaris
243kPartitionTypeBEFS = 0xEB, // BeOS BFS
244//kPartitionTypeBeOS= 0xEB, // BeOS BFS
245//kPartitionTypeSkyOS= 0xEC, // SkyOS
246};
247
248//#define BIOS_DEV_TYPE(d)((d) & kBIOSDevTypeMask)
249#define BIOS_DEV_UNIT(bvr)((bvr)->biosdev - (bvr)->type)
250
251// KernBootStruct device types.
252
253enum {
254DEV_SD = 0,
255DEV_HD = 1,
256DEV_FD = 2,
257DEV_EN = 3
258};
259
260/*
261 * min/max Macros.
262 * counting and rounding Macros.
263 *
264 * Azi: defined on <sys/param.h>,
265 *i386/include/IOKit/IOLib.h (min/max), and others...
266 *
267#ifndef MIN
268#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
269#endif
270#ifndef MAX
271#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
272#endif
273
274#define round2(x, m)(((x) + (m / 2)) & ~(m - 1))
275#define roundup2(x, m)(((x) + m - 1) & ~(m - 1))*/
276
277enum {
278kNetworkDeviceType = kBIOSDevTypeNetwork,
279kBlockDeviceType = kBIOSDevTypeHardDrive
280}; //gBootFileType_t;
281
282enum {
283kCursorTypeHidden = 0x0100,
284kCursorTypeUnderline = 0x0607
285};
286
287#endif /* !__LIBSAIO_SAIO_TYPES_H */
288

Archive Download this file

Revision: 2531