1/*
2 * Copyright (c) 2003-2005 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#include <libc.h>
24#include <IOKit/IOKitLib.h>
25#include <CoreFoundation/CoreFoundation.h>
26
27int main(int argc, char *argv[]) {
28
29  char *path;
30  kern_return_t ret;
31  io_registry_entry_t entry = 0;
32  CFMutableDictionaryRef props = NULL;
33  io_string_t iopath;
34
35  if(argc != 2) {
36    fprintf(stderr, "Usage: %s ofpath\n", getprogname());
37    fprintf(stderr, "\nFor example: %s IODeviceTree:/openprom\n", getprogname());
38    exit(1);
39  }
40
41  path = argv[1];
42
43  //  entry = IORegistryEntryFromPath(kIOMasterPortDefault, path);
44  entry = IOServiceGetMatchingService(kIOMasterPortDefault,
45				      IOBSDNameMatching(kIOMasterPortDefault, 0, path));
46
47  CFShow(IOBSDNameMatching(kIOMasterPortDefault, 0, path));
48  printf("entry is %p\n", entry);
49
50  if(entry == 0) exit(1);
51
52
53  ret = IORegistryEntryCreateCFProperties(entry, &props,
54					  kCFAllocatorDefault, 0);
55
56
57  if(ret) {
58    fprintf(stderr, "Could not get entry properties\n");
59    exit(1);
60  }
61
62  TAOCFPrettyPrint(props);
63
64  ret = IORegistryEntryGetPath(entry, kIOServicePlane, iopath);
65  if(ret) {
66    fprintf(stderr, "Could not get entry path\n");
67    exit(1);
68  }
69  printf("%s path: %s\n", kIOServicePlane, iopath);
70
71  ret = IORegistryEntryGetPath(entry, kIODeviceTreePlane, iopath);
72  if(ret) {
73    fprintf(stderr, "Could not get entry path\n");
74    exit(1);
75  }
76  printf("%s path: %s\n", kIODeviceTreePlane, iopath);
77
78
79  CFRelease(props);
80 IOObjectRelease(entry);
81
82  return 0;
83}
84