Rev 852 | Rev 958 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 852 | Rev 853 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | #include <interrupt.h> |
36 | #include <interrupt.h> |
37 | #include <align.h> |
37 | #include <align.h> |
38 | #include <console/console.h> |
38 | #include <console/console.h> |
39 | #include <console/kconsole.h> |
39 | #include <console/kconsole.h> |
40 | #include <console/cmd.h> |
40 | #include <console/cmd.h> |
- | 41 | #include <mm/slab.h> |
|
41 | 42 | ||
42 | /* This is a good joke, SGI HAS different types than NT bioses... */ |
43 | /* This is a good joke, SGI HAS different types than NT bioses... */ |
43 | /* Here is the SGI type */ |
44 | /* Here is the SGI type */ |
44 | static char *basetypes[] = { |
45 | static char *basetypes[] = { |
45 | "ExceptionBlock", |
46 | "ExceptionBlock", |
Line 109... | Line 110... | ||
109 | int arc_enabled(void) |
110 | int arc_enabled(void) |
110 | { |
111 | { |
111 | return sbp != NULL; |
112 | return sbp != NULL; |
112 | } |
113 | } |
113 | 114 | ||
- | 115 | ||
- | 116 | /** Print configuration data that ARC reports about component */ |
|
- | 117 | static void arc_print_confdata(arc_component *c) |
|
- | 118 | { |
|
- | 119 | cm_resource_list *configdata; |
|
- | 120 | int i; |
|
- | 121 | ||
- | 122 | if (!c->configdatasize) |
|
- | 123 | return; /* No configuration data */ |
|
- | 124 | ||
- | 125 | configdata = malloc(c->configdatasize, 0); |
|
- | 126 | ||
- | 127 | if (arc_entry->getconfigurationdata(configdata, c)) { |
|
- | 128 | free(configdata); |
|
- | 129 | return; |
|
- | 130 | } |
|
- | 131 | /* Does not seem to return meaningful data, don't use now */ |
|
- | 132 | free(configdata); |
|
- | 133 | return; |
|
- | 134 | ||
- | 135 | for (i=0; i < configdata->count; i++) { |
|
- | 136 | switch (configdata->descr[i].type) { |
|
- | 137 | case CmResourceTypePort: |
|
- | 138 | printf("Port: %P-size:%d ", |
|
- | 139 | (__address)configdata->descr[i].u.port.start, |
|
- | 140 | configdata->descr[i].u.port.length); |
|
- | 141 | break; |
|
- | 142 | case CmResourceTypeInterrupt: |
|
- | 143 | printf("Irq: level(%d) vector(%d) ", |
|
- | 144 | configdata->descr[i].u.interrupt.level, |
|
- | 145 | configdata->descr[i].u.interrupt.vector); |
|
- | 146 | break; |
|
- | 147 | case CmResourceTypeMemory: |
|
- | 148 | printf("Memory: %P-size:%d ", |
|
- | 149 | (__address)configdata->descr[i].u.port.start, |
|
- | 150 | configdata->descr[i].u.port.length); |
|
- | 151 | break; |
|
- | 152 | default: |
|
- | 153 | break; |
|
- | 154 | } |
|
- | 155 | } |
|
- | 156 | ||
- | 157 | free(configdata); |
|
- | 158 | } |
|
- | 159 | ||
- | 160 | /** Print information about component */ |
|
114 | static void arc_print_component(arc_component *c) |
161 | static void arc_print_component(arc_component *c) |
115 | { |
162 | { |
116 | int i; |
163 | int i; |
117 | 164 | ||
118 | printf("%s: ",ctypes[c->type]); |
165 | printf("%s: ",ctypes[c->type]); |
119 | for (i=0;i < c->identifier_len;i++) |
166 | for (i=0;i < c->identifier_len;i++) |
120 | arc_putchar(c->identifier[i]); |
167 | printf("%c",c->identifier[i]); |
- | 168 | ||
- | 169 | printf(" "); |
|
121 | arc_putchar('\n'); |
170 | arc_print_confdata(c); |
- | 171 | printf("\n"); |
|
122 | } |
172 | } |
123 | 173 | ||
- | 174 | /** |
|
- | 175 | * Read from ARC bios configuration data and print it |
|
- | 176 | */ |
|
124 | void arc_print_devices(void) |
177 | static int cmd_arc_print_devices(cmd_arg_t *argv) |
125 | { |
178 | { |
126 | arc_component *c,*next; |
179 | arc_component *c,*next; |
127 | 180 | ||
128 | if (!arc_enabled()) |
- | |
129 | return; |
- | |
130 | - | ||
131 | c = arc_entry->getchild(NULL); |
181 | c = arc_entry->getchild(NULL); |
132 | while (c) { |
182 | while (c) { |
133 | arc_print_component(c); |
183 | arc_print_component(c); |
134 | next = arc_entry->getchild(c); |
184 | next = arc_entry->getchild(c); |
135 | while (!next) { |
185 | while (!next) { |
136 | next = arc_entry->getpeer(c); |
186 | next = arc_entry->getpeer(c); |
137 | if (!next) |
187 | if (!next) |
138 | c = arc_entry->getparent(c); |
188 | c = arc_entry->getparent(c); |
139 | if (!c) |
189 | if (!c) |
140 | return; |
190 | return 0; |
141 | } |
191 | } |
142 | c = next; |
192 | c = next; |
143 | } |
193 | } |
- | 194 | return 1; |
|
144 | } |
195 | } |
- | 196 | static cmd_info_t devlist_info = { |
|
- | 197 | .name = "arcdevlist", |
|
- | 198 | .description = "Print arc device list", |
|
- | 199 | .func = cmd_arc_print_devices, |
|
- | 200 | .argc = 0 |
|
- | 201 | }; |
|
145 | 202 | ||
- | 203 | ||
- | 204 | /** Read from arc bios memory map and print it |
|
- | 205 | * |
|
- | 206 | */ |
|
146 | void arc_print_memory_map(void) |
207 | static int cmd_arc_print_memmap(cmd_arg_t *argv) |
147 | { |
208 | { |
148 | arc_memdescriptor_t *desc; |
209 | arc_memdescriptor_t *desc; |
149 | 210 | ||
150 | if (!arc_enabled()) |
- | |
151 | return; |
- | |
152 | - | ||
153 | printf("Memory map:\n"); |
211 | printf("Memory map:\n"); |
154 | 212 | ||
155 | desc = arc_entry->getmemorydescriptor(NULL); |
213 | desc = arc_entry->getmemorydescriptor(NULL); |
156 | while (desc) { |
214 | while (desc) { |
157 | printf("%s: %d(%P) (size: %dKB)\n",basetypes[desc->type], |
215 | printf("%s: %d(%P) (size: %dKB)\n",basetypes[desc->type], |
158 | desc->basepage * ARC_FRAME, |
216 | desc->basepage * ARC_FRAME, |
159 | desc->basepage * ARC_FRAME, |
217 | desc->basepage * ARC_FRAME, |
160 | desc->basecount*ARC_FRAME/1024); |
218 | desc->basecount*ARC_FRAME/1024); |
161 | desc = arc_entry->getmemorydescriptor(desc); |
219 | desc = arc_entry->getmemorydescriptor(desc); |
162 | } |
220 | } |
- | 221 | return 1; |
|
163 | } |
222 | } |
- | 223 | static cmd_info_t memmap_info = { |
|
- | 224 | .name = "arcmemmap", |
|
- | 225 | .description = "Print arc memory map", |
|
- | 226 | .func = cmd_arc_print_memmap, |
|
- | 227 | .argc = 0 |
|
- | 228 | }; |
|
164 | 229 | ||
165 | /** Print charactor to console */ |
230 | /** Print charactor to console */ |
166 | static void arc_putchar(char ch) |
231 | static void arc_putchar(char ch) |
167 | { |
232 | { |
168 | __u32 cnt; |
233 | __u32 cnt; |
Line 205... | Line 270... | ||
205 | arc_putchar('\n'); |
270 | arc_putchar('\n'); |
206 | 271 | ||
207 | /* Add command for resetting the computer */ |
272 | /* Add command for resetting the computer */ |
208 | cmd_initialize(&reboot_info); |
273 | cmd_initialize(&reboot_info); |
209 | cmd_register(&reboot_info); |
274 | cmd_register(&reboot_info); |
- | 275 | cmd_initialize(&memmap_info); |
|
- | 276 | cmd_register(&memmap_info); |
|
- | 277 | cmd_initialize(&devlist_info); |
|
- | 278 | cmd_register(&devlist_info); |
|
210 | 279 | ||
211 | return 0; |
280 | return 0; |
212 | } |
281 | } |
213 | 282 | ||
214 | static bool kbd_polling_enabled; |
283 | static bool kbd_polling_enabled; |