|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22:
23: #ifndef _IONEXTPARTITIONSCHEME_H
24: #define _IONEXTPARTITIONSCHEME_H
25:
26: #include <IOKit/IOTypes.h>
27:
28: /*
29: * NeXT Partition Map Definitions
30: */
31:
32: #pragma pack(2) /* (enable 16-bit struct packing for dl_un, disk[tab,_label]) */
33:
34: #include <sys/disktab.h>
35:
36: /*
37: * General constants.
38: */
39:
40: #define NLABELS 4 /* (number of labels on the disk) */
41: #define NBAD 1670 /* (number of bad sector entries) */
42: #define MAXLBLLEN 24
43:
44: /*
45: * Disk label definition. If dl_version >= DL_V3, then the bad block table has
46: * been relocated to a structure separate from the disk label.
47: */
48:
49: typedef union
50: {
51: UInt16 DL_v3_checksum; /* (ones complement checksum; version 3) */
52: SInt32 DL_bad[NBAD]; /* (bad sector table; versions 1 and 2) */
53: } dl_un_t;
54:
55: typedef struct disk_label
56: {
57: SInt32 dl_version; /* (unique value for NeXT label) */
58: SInt32 dl_label_blkno; /* (block number where this label is) */
59: SInt32 dl_size; /* (block count for this device) */
60: char dl_label[MAXLBLLEN]; /* (name of this device) */
61: UInt32 dl_flags; /* (label flags, see defines below) */
62: UInt32 dl_tag; /* (volume tag) */
63: struct disktab dl_dt; /* (common info in disktab) */
64: dl_un_t dl_un;
65: UInt16 dl_checksum; /* (ones complement checksum) */
66:
67: /* (add things here so dl_checksum stays in a fixed place) */
68: } disk_label_t;
69:
70: /*
71: * Disk label versions (dl_version).
72: */
73:
74: #define DL_V1 0x4e655854 /* (version 1: "NeXT") */
75: #define DL_V2 0x646c5632 /* (version 2: "dlV2") */
76: #define DL_V3 0x646c5633 /* (version 3: "dlV3") */
77: #define DL_VERSION DL_V3 /* (default version) */
78:
79: /*
80: * Disk label flags (dl_flags).
81: */
82:
83: #define DL_UNINIT 0x80000000 /* (is label uninitialized?) */
84:
85: /*
86: * Aliases for disktab and dl_un fields.
87: */
88:
89: #define dl_name dl_dt.d_name
90: #define dl_type dl_dt.d_type
91: #define dl_part dl_dt.d_partitions
92: #define dl_front dl_dt.d_front
93: #define dl_back dl_dt.d_back
94: #define dl_ngroups dl_dt.d_ngroups
95: #define dl_ag_size dl_dt.d_ag_size
96: #define dl_ag_alts dl_dt.d_ag_alts
97: #define dl_ag_off dl_dt.d_ag_off
98: #define dl_secsize dl_dt.d_secsize
99: #define dl_ncyl dl_dt.d_ncylinders
100: #define dl_nsect dl_dt.d_nsectors
101: #define dl_ntrack dl_dt.d_ntracks
102: #define dl_rpm dl_dt.d_rpm
103: #define dl_bootfile dl_dt.d_bootfile
104: #define dl_boot0_blkno dl_dt.d_boot0_blkno
105: #define dl_hostname dl_dt.d_hostname
106: #define dl_rootpartition dl_dt.d_rootpartition
107: #define dl_rwpartition dl_dt.d_rwpartition
108: #define dl_v3_checksum dl_un.DL_v3_checksum
109: #define dl_bad dl_un.DL_bad
110:
111: #pragma options align=reset /* (reset to default struct packing) */
112:
113: /*
114: * Kernel
115: */
116:
117: #if defined(KERNEL) && defined(__cplusplus)
118:
119: #include <IOKit/IOBufferMemoryDescriptor.h>
120: #include <IOKit/storage/IOPartitionScheme.h>
121:
122: /*
123: * Class
124: */
125:
126: class IONeXTPartitionScheme : public IOPartitionScheme
127: {
128: OSDeclareDefaultStructors(IONeXTPartitionScheme);
129:
130: private:
131: UInt16 checksum(UInt16 * buffer, UInt32 numberOfShorts) const;
132:
133: protected:
134: IOBufferMemoryDescriptor * _buffer; /* (necessarily one media block) */
135: UInt32 _bufferSize; /* (necessarily one media block) */
136:
137: UInt64 _absoluteBase;
138:
139: /*
140: * Free all of this object's outstanding resources.
141: */
142:
143: virtual void free(void);
144:
145: /*
146: * Searches for the existence of a NeXT partition map on the given media.
147: */
148:
149: virtual bool identify(IOMedia * media);
150:
151: public:
152:
153: /*
154: * Initialize this object's minimal state.
155: */
156:
157: virtual bool init(OSDictionary * properties = 0);
158:
159: /*
160: * Determine whether the provider media contains an NeXT partition map. If
161: * it does, we return "this" to indicate success, otherwise we return zero.
162: */
163:
164: virtual IOService * probe(IOService * provider, SInt32 * score);
165:
166: /*
167: * This method is called once we have been attached to the media object. We
168: * generate the new media objects that will represent our partitions here.
169: */
170:
171: virtual bool start(IOService * provider);
172: };
173:
174: #endif /* defined(KERNEL) && defined(__cplusplus) */
175:
176: #endif /* !_IONEXTPARTITIONSCHEME_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.