|
|
1.1 root 1: /*
2: * Copyright (c) 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: #include <pexpert/protos.h>
24:
25: #include "fakePPCStructs.h"
26:
27: void PE_pause(int);
28:
29: boot_args fakePPCBootArgs = {
30: 0, // Revision
31: kBootArgsVersion, // Version
32: "", // CommandLine
33: 0, // PhysicalDRAM
34: 0, // machine_type
35: 0, // deviceTreeP
36: 0, // deviceTreeLength
37: 0, // topOfKernelData
38: };
39:
40: void * createdt(dt_init *template, long *retSize)
41: {
42: dt_init * next;
43: int size, allocSize;
44: vm_address_t out, saveout;
45: void * source;
46:
47: // calc size of expanded data
48: for( next = template, allocSize = 0;
49: next;
50: next++) {
51:
52: if( next->nodeInit.zero == 0) {
53: if( next->nodeInit.nProps == 0)
54: break;
55: allocSize += 2 * sizeof( long);
56: } else
57: allocSize += (32 + 4 + 3 + next->propInit.length) & (-4);
58: }
59: saveout = out = kalloc( allocSize);
60:
61: // copy out
62: for( next = template;
63: next;
64: next++) {
65:
66: if( next->nodeInit.zero == 0) {
67:
68: if( next->nodeInit.nProps == 0)
69: break;
70: source = &next->nodeInit.nProps;
71: size = 2 * sizeof( long);
72:
73: } else {
74:
75: bcopy( next->propInit.name, out, 32);
76: out += 32;
77: size = next->propInit.length;
78: *(long *)out = size;
79: out += sizeof( long);
80: if( size == 4)
81: source = &next->propInit.value;
82: else {
83: source = next->propInit.value;
84: size = (size + 3) & (-4);
85: }
86: }
87: bcopy( source, out, size);
88: out += size;
89: }
90:
91: if( allocSize != (out - saveout))
92: printf("WARNING: DT corrupt (%x)\n", (out - saveout) - allocSize);
93:
94: *retSize = allocSize;
95: return( (void *)saveout);
96: }
97:
98: unsigned char *nptr;
99:
100: #define kPropNameLength 32
101:
102: typedef struct property_t {
103: char name[kPropNameLength]; // NUL terminated property name
104: unsigned long length; // Length (bytes) of folloing prop value
105: unsigned long *value; // Variable length value of property
106: } property_t;
107:
108: typedef struct node_t {
109: unsigned long nProperties; // Number of props[] elements (0 => end)
110: unsigned long nChildren; // Number of children[] elements
111: property_t *props; // array size == nProperties
112: struct node_t *children; // array size == nChildren
113: } node_t;
114:
115:
116: int indent = 0;
117:
118: void printdt()
119: {
120: node_t *nodeptr = (node_t *)nptr;
121: long num_props = nodeptr->nProperties;
122: long len;
123: int i, j;
124: unsigned char *sptr;
125:
126: nptr = (unsigned char *)&nodeptr->props;
127: for (i=0; i < num_props; i++)
128: {
129: for (j = 0; j < indent; j++)
130: printf(" ");
131: printf("'");
132: printf("%s", nptr);
133: nptr+=32;
134: len = *((long*)nptr);
135: nptr += 4;
136: printf("'\t\t(%ld) '", len);
137: sptr = nptr;
138: for (j = 0; j < len; j++)
139: printf("%2.2x", *nptr++);
140: printf("'\t('%s')\n", sptr);
141: if (len % 4)
142: nptr += (4 - (len % 4));
143: PE_pause(20);
144: }
145: for (i=0; i<nodeptr->nChildren; i++)
146: {
147: indent++;
148: printdt();
149: indent--;
150: }
151: }
152:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.