]> git.saurik.com Git - apple/xnu.git/blob - iokit/include/DeviceTree.h
xnu-344.12.2.tar.gz
[apple/xnu.git] / iokit / include / DeviceTree.h
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 #ifndef __DEVICE_TREE__
23 #define __DEVICE_TREE__
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 /*
30 ------------------------------------------------------------------------------------
31 Foundation Types
32 ------------------------------------------------------------------------------------
33 */
34 enum {
35 kDTPathNameSeparator = '/' /* 0x2F */
36 };
37
38
39 /* Property Name Definitions (Property Names are C-Strings)*/
40 enum {
41 kDTMaxPropertyNameLength = 31 /* Max length of Property Name (terminator not included) */
42 };
43
44 typedef char DTPropertyNameBuf[32];
45
46
47 /* Entry Name Definitions (Entry Names are C-Strings)*/
48 enum {
49 kDTMaxEntryNameLength = 31 /* Max length of a C-String Entry Name (terminator not included) */
50 };
51
52 /* length of DTEntryNameBuf = kDTMaxEntryNameLength +1*/
53 typedef char DTEntryNameBuf[32];
54
55
56 /* Entry*/
57 typedef struct OpaqueDTEntry* DTEntry;
58
59 /* Entry Iterator*/
60 typedef struct OpaqueDTEntryIterator* DTEntryIterator;
61
62 /* Property Iterator*/
63 typedef struct OpaqueDTPropertyIterator* DTPropertyIterator;
64
65
66 /* status values*/
67 enum {
68 kError = -1,
69 kIterationDone = 0,
70 kSuccess = 1
71 };
72
73 /*
74 ------------------------------------------------------------------------------------
75 Device Tree Calls
76 ------------------------------------------------------------------------------------
77 */
78
79 /*
80 ------------------------------------------------------------------------------------
81 Entry Handling
82 ------------------------------------------------------------------------------------
83 */
84 /* Compare two Entry's for equality. */
85 extern int DTEntryIsEqual(const DTEntry ref1, const DTEntry ref2);
86
87 /*
88 ------------------------------------------------------------------------------------
89 LookUp Entry by Name
90 ------------------------------------------------------------------------------------
91 */
92 /*
93 Lookup Entry
94 Locates an entry given a specified subroot (searchPoint) and path name. If the
95 searchPoint pointer is NULL, the path name is assumed to be an absolute path
96 name rooted to the root of the device tree.
97 */
98 extern int DTLookupEntry(const DTEntry searchPoint, const char *pathName, DTEntry *foundEntry);
99
100 /*
101 ------------------------------------------------------------------------------------
102 Entry Iteration
103 ------------------------------------------------------------------------------------
104 */
105 /*
106 An Entry Iterator maintains three variables that are of interest to clients.
107 First is an "OutermostScope" which defines the outer boundry of the iteration.
108 This is defined by the starting entry and includes that entry plus all of it's
109 embedded entries. Second is a "currentScope" which is the entry the iterator is
110 currently in. And third is a "currentPosition" which is the last entry returned
111 during an iteration.
112
113 Create Entry Iterator
114 Create the iterator structure. The outermostScope and currentScope of the iterator
115 are set to "startEntry". If "startEntry" = NULL, the outermostScope and
116 currentScope are set to the root entry. The currentPosition for the iterator is
117 set to "nil".
118 */
119 extern int DTCreateEntryIterator(const DTEntry startEntry, DTEntryIterator *iterator);
120
121 /* Dispose Entry Iterator*/
122 extern int DTDisposeEntryIterator(DTEntryIterator iterator);
123
124 /*
125 Enter Child Entry
126 Move an Entry Iterator into the scope of a specified child entry. The
127 currentScope of the iterator is set to the entry specified in "childEntry". If
128 "childEntry" is nil, the currentScope is set to the entry specified by the
129 currentPosition of the iterator.
130 */
131 extern int DTEnterEntry(DTEntryIterator iterator, DTEntry childEntry);
132
133 /*
134 Exit to Parent Entry
135 Move an Entry Iterator out of the current entry back into the scope of it's parent
136 entry. The currentPosition of the iterator is reset to the current entry (the
137 previous currentScope), so the next iteration call will continue where it left off.
138 This position is returned in parameter "currentPosition".
139 */
140 extern int DTExitEntry(DTEntryIterator iterator, DTEntry *currentPosition);
141
142 /*
143 Iterate Entries
144 Iterate and return entries contained within the entry defined by the current
145 scope of the iterator. Entries are returned one at a time. When
146 int == kIterationDone, all entries have been exhausted, and the
147 value of nextEntry will be Nil.
148 */
149 extern int DTIterateEntries(DTEntryIterator iterator, DTEntry *nextEntry);
150
151 /*
152 Restart Entry Iteration
153 Restart an iteration within the current scope. The iterator is reset such that
154 iteration of the contents of the currentScope entry can be restarted. The
155 outermostScope and currentScope of the iterator are unchanged. The currentPosition
156 for the iterator is set to "nil".
157 */
158 extern int DTRestartEntryIteration(DTEntryIterator iterator);
159
160 /*
161 ------------------------------------------------------------------------------------
162 Get Property Values
163 ------------------------------------------------------------------------------------
164 */
165 /*
166 Get the value of the specified property for the specified entry.
167
168 Get Property
169 */
170 extern int DTGetProperty(const DTEntry entry, const char *propertyName, void **propertyValue, int *propertySize);
171
172 /*
173 ------------------------------------------------------------------------------------
174 Iterating Properties
175 ------------------------------------------------------------------------------------
176 */
177 /*
178 Create Property Iterator
179 Create the property iterator structure. The target entry is defined by entry.
180 */
181 extern int DTCreatePropertyIterator(const DTEntry entry, DTPropertyIterator *iterator);
182
183 /* Dispose Property Iterator*/
184 extern int DTDisposePropertyIterator(DTPropertyIterator iterator);
185
186 /*
187 Iterate Properites
188 Iterate and return properties for given entry.
189 When int == kIterationDone, all properties have been exhausted.
190 */
191 extern int DTIterateProperties(DTPropertyIterator iterator, char **foundProperty);
192
193 /*
194 Restart Property Iteration
195 Used to re-iterate over a list of properties. The Property Iterator is reset to
196 the beginning of the list of properties for an entry.
197 */
198 extern int DTRestartPropertyIteration(DTPropertyIterator iterator);
199
200 #ifdef __cplusplus
201 }
202 #endif
203
204 #endif /* __DEVICE_TREE__ */
205