init_32.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * init.c: Initialize internal variables used by the PROM
  4. * library functions.
  5. *
  6. * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
  7. * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  8. */
  9. #include <linux/kernel.h>
  10. #include <linux/init.h>
  11. #include <linux/module.h>
  12. #include <asm/openprom.h>
  13. #include <asm/oplib.h>
  14. struct linux_romvec *romvec;
  15. EXPORT_SYMBOL(romvec);
  16. enum prom_major_version prom_vers;
  17. unsigned int prom_rev, prom_prev;
  18. /* The root node of the prom device tree. */
  19. phandle prom_root_node;
  20. EXPORT_SYMBOL(prom_root_node);
  21. /* Pointer to the device tree operations structure. */
  22. struct linux_nodeops *prom_nodeops;
  23. /* You must call prom_init() before you attempt to use any of the
  24. * routines in the prom library.
  25. * It gets passed the pointer to the PROM vector.
  26. */
  27. void __init prom_init(struct linux_romvec *rp)
  28. {
  29. romvec = rp;
  30. switch(romvec->pv_romvers) {
  31. case 0:
  32. prom_vers = PROM_V0;
  33. break;
  34. case 2:
  35. prom_vers = PROM_V2;
  36. break;
  37. case 3:
  38. prom_vers = PROM_V3;
  39. break;
  40. default:
  41. prom_printf("PROMLIB: Bad PROM version %d\n",
  42. romvec->pv_romvers);
  43. prom_halt();
  44. break;
  45. }
  46. prom_rev = romvec->pv_plugin_revision;
  47. prom_prev = romvec->pv_printrev;
  48. prom_nodeops = romvec->pv_nodeops;
  49. prom_root_node = prom_getsibling(0);
  50. if ((prom_root_node == 0) || ((s32)prom_root_node == -1))
  51. prom_halt();
  52. if((((unsigned long) prom_nodeops) == 0) ||
  53. (((unsigned long) prom_nodeops) == -1))
  54. prom_halt();
  55. prom_meminit();
  56. prom_ranges_init();
  57. printk("PROMLIB: Sun Boot Prom Version %d Revision %d\n",
  58. romvec->pv_romvers, prom_rev);
  59. /* Initialization successful. */
  60. }