0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/kernel.h>
0011 #include <linux/init.h>
0012 #include <linux/module.h>
0013
0014 #include <asm/openprom.h>
0015 #include <asm/oplib.h>
0016
0017 struct linux_romvec *romvec;
0018 EXPORT_SYMBOL(romvec);
0019
0020 enum prom_major_version prom_vers;
0021 unsigned int prom_rev, prom_prev;
0022
0023
0024 phandle prom_root_node;
0025 EXPORT_SYMBOL(prom_root_node);
0026
0027
0028 struct linux_nodeops *prom_nodeops;
0029
0030
0031
0032
0033
0034
0035 void __init prom_init(struct linux_romvec *rp)
0036 {
0037 romvec = rp;
0038
0039 switch(romvec->pv_romvers) {
0040 case 0:
0041 prom_vers = PROM_V0;
0042 break;
0043 case 2:
0044 prom_vers = PROM_V2;
0045 break;
0046 case 3:
0047 prom_vers = PROM_V3;
0048 break;
0049 default:
0050 prom_printf("PROMLIB: Bad PROM version %d\n",
0051 romvec->pv_romvers);
0052 prom_halt();
0053 break;
0054 }
0055
0056 prom_rev = romvec->pv_plugin_revision;
0057 prom_prev = romvec->pv_printrev;
0058 prom_nodeops = romvec->pv_nodeops;
0059
0060 prom_root_node = prom_getsibling(0);
0061 if ((prom_root_node == 0) || ((s32)prom_root_node == -1))
0062 prom_halt();
0063
0064 if((((unsigned long) prom_nodeops) == 0) ||
0065 (((unsigned long) prom_nodeops) == -1))
0066 prom_halt();
0067
0068 prom_meminit();
0069
0070 prom_ranges_init();
0071
0072 printk("PROMLIB: Sun Boot Prom Version %d Revision %d\n",
0073 romvec->pv_romvers, prom_rev);
0074
0075
0076 }