1/* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * PROM component device tree code. 7 * 8 * Copyright (C) 1996 David S. Miller (davem@davemloft.net) 9 * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) 10 * Copyright (C) 1999 Silicon Graphics, Inc. 11 */ 12#include <linux/init.h> 13#include <asm/fw/arc/types.h> 14#include <asm/sgialib.h> 15 16#undef DEBUG_PROM_TREE 17 18pcomponent * __init 19ArcGetPeer(pcomponent *Current) 20{ 21 if (Current == PROM_NULL_COMPONENT) 22 return PROM_NULL_COMPONENT; 23 24 return (pcomponent *) ARC_CALL1(next_component, Current); 25} 26 27pcomponent * __init 28ArcGetChild(pcomponent *Current) 29{ 30 return (pcomponent *) ARC_CALL1(child_component, Current); 31} 32 33pcomponent * __init 34ArcGetParent(pcomponent *Current) 35{ 36 if (Current == PROM_NULL_COMPONENT) 37 return PROM_NULL_COMPONENT; 38 39 return (pcomponent *) ARC_CALL1(parent_component, Current); 40} 41 42LONG __init 43ArcGetConfigurationData(VOID *Buffer, pcomponent *Current) 44{ 45 return ARC_CALL2(component_data, Buffer, Current); 46} 47 48pcomponent * __init 49ArcAddChild(pcomponent *Current, pcomponent *Template, VOID *ConfigurationData) 50{ 51 return (pcomponent *) 52 ARC_CALL3(child_add, Current, Template, ConfigurationData); 53} 54 55LONG __init 56ArcDeleteComponent(pcomponent *ComponentToDelete) 57{ 58 return ARC_CALL1(comp_del, ComponentToDelete); 59} 60 61pcomponent * __init 62ArcGetComponent(CHAR *Path) 63{ 64 return (pcomponent *)ARC_CALL1(component_by_path, Path); 65} 66 67#ifdef DEBUG_PROM_TREE 68 69static char *classes[] = { 70 "system", "processor", "cache", "adapter", "controller", "peripheral", 71 "memory" 72}; 73 74static char *types[] = { 75 "arc", "cpu", "fpu", "picache", "pdcache", "sicache", "sdcache", 76 "sccache", "memdev", "eisa adapter", "tc adapter", "scsi adapter", 77 "dti adapter", "multi-func adapter", "disk controller", 78 "tp controller", "cdrom controller", "worm controller", 79 "serial controller", "net controller", "display controller", 80 "parallel controller", "pointer controller", "keyboard controller", 81 "audio controller", "misc controller", "disk peripheral", 82 "floppy peripheral", "tp peripheral", "modem peripheral", 83 "monitor peripheral", "printer peripheral", "pointer peripheral", 84 "keyboard peripheral", "terminal peripheral", "line peripheral", 85 "net peripheral", "misc peripheral", "anonymous" 86}; 87 88static char *iflags[] = { 89 "bogus", "read only", "removable", "console in", "console out", 90 "input", "output" 91}; 92 93static void __init 94dump_component(pcomponent *p) 95{ 96 printk("[%p]:class<%s>type<%s>flags<%s>ver<%d>rev<%d>", 97 p, classes[p->class], types[p->type], 98 iflags[p->iflags], p->vers, p->rev); 99 printk("key<%08lx>\n\tamask<%08lx>cdsize<%d>ilen<%d>iname<%s>\n", 100 p->key, p->amask, (int)p->cdsize, (int)p->ilen, p->iname); 101} 102 103static void __init 104traverse(pcomponent *p, int op) 105{ 106 dump_component(p); 107 if(ArcGetChild(p)) 108 traverse(ArcGetChild(p), 1); 109 if(ArcGetPeer(p) && op) 110 traverse(ArcGetPeer(p), 1); 111} 112 113void __init 114prom_testtree(void) 115{ 116 pcomponent *p; 117 118 p = ArcGetChild(PROM_NULL_COMPONENT); 119 dump_component(p); 120 p = ArcGetChild(p); 121 while(p) { 122 dump_component(p); 123 p = ArcGetPeer(p); 124 } 125} 126 127#endif /* DEBUG_PROM_TREE */ 128