Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * init.c:  Initialize internal variables used by the PROM
0004  *          library functions.
0005  *
0006  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
0007  * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
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 /* The root node of the prom device tree. */
0024 phandle prom_root_node;
0025 EXPORT_SYMBOL(prom_root_node);
0026 
0027 /* Pointer to the device tree operations structure. */
0028 struct linux_nodeops *prom_nodeops;
0029 
0030 /* You must call prom_init() before you attempt to use any of the
0031  * routines in the prom library.
0032  * It gets passed the pointer to the PROM vector.
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     /* Initialization successful. */
0076 }