PageRenderTime 17ms CodeModel.GetById 11ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/sparc/prom/init.c

https://bitbucket.org/evzijst/gittest
C | 95 lines | 62 code | 18 blank | 15 comment | 12 complexity | c5095be47f94f5081da3cc9cfce6564d MD5 | raw file
 1/* $Id: init.c,v 1.14 2000/01/29 01:09:12 anton Exp $
 2 * init.c:  Initialize internal variables used by the PROM
 3 *          library functions.
 4 *
 5 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
 6 * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
 7 */
 8
 9#include <linux/config.h>
10#include <linux/kernel.h>
11#include <linux/init.h>
12
13#include <asm/openprom.h>
14#include <asm/oplib.h>
15#include <asm/sun4prom.h>
16
17struct linux_romvec *romvec;
18enum prom_major_version prom_vers;
19unsigned int prom_rev, prom_prev;
20linux_sun4_romvec *sun4_romvec;
21
22/* The root node of the prom device tree. */
23int prom_root_node;
24
25int prom_stdin, prom_stdout;
26
27/* Pointer to the device tree operations structure. */
28struct linux_nodeops *prom_nodeops;
29
30/* You must call prom_init() before you attempt to use any of the
31 * routines in the prom library.  It returns 0 on success, 1 on
32 * failure.  It gets passed the pointer to the PROM vector.
33 */
34
35extern void prom_meminit(void);
36extern void prom_ranges_init(void);
37
38void __init prom_init(struct linux_romvec *rp)
39{
40#ifdef CONFIG_SUN4
41	extern struct linux_romvec *sun4_prom_init(void);
42	rp = sun4_prom_init();
43#endif
44	romvec = rp;
45
46	switch(romvec->pv_romvers) {
47	case 0:
48		prom_vers = PROM_V0;
49		break;
50	case 2:
51		prom_vers = PROM_V2;
52		break;
53	case 3:
54		prom_vers = PROM_V3;
55		break;
56	case 40:
57		prom_vers = PROM_SUN4;
58		break;
59	default:
60		prom_printf("PROMLIB: Bad PROM version %d\n",
61			    romvec->pv_romvers);
62		prom_halt();
63		break;
64	};
65
66	prom_rev = romvec->pv_plugin_revision;
67	prom_prev = romvec->pv_printrev;
68	prom_nodeops = romvec->pv_nodeops;
69
70	prom_root_node = prom_getsibling(0);
71	if((prom_root_node == 0) || (prom_root_node == -1))
72		prom_halt();
73
74	if((((unsigned long) prom_nodeops) == 0) || 
75	   (((unsigned long) prom_nodeops) == -1))
76		prom_halt();
77
78	if(prom_vers == PROM_V2 || prom_vers == PROM_V3) {
79		prom_stdout = *romvec->pv_v2bootargs.fd_stdout;
80		prom_stdin  = *romvec->pv_v2bootargs.fd_stdin;
81	}
82	
83	prom_meminit();
84
85	prom_ranges_init();
86
87#ifndef CONFIG_SUN4
88	/* SUN4 prints this in sun4_prom_init */
89	printk("PROMLIB: Sun Boot Prom Version %d Revision %d\n",
90	       romvec->pv_romvers, prom_rev);
91#endif
92
93	/* Initialization successful. */
94	return;
95}