|
|
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: #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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.