system.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * system.c: Probe the system type using ARCS prom interface library.
  3.  *
  4.  * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com)
  5.  *
  6.  * $Id: system.c,v 1.8 1999/10/09 00:00:59 ralf Exp $
  7.  */
  8. #include <linux/init.h>
  9. #include <linux/kernel.h>
  10. #include <linux/types.h>
  11. #include <linux/string.h>
  12. #include <asm/sgi/sgi.h>
  13. #include <asm/sgialib.h>
  14. #include <asm/bootinfo.h>
  15. enum sgi_mach sgimach;
  16. struct smatch {
  17. char *name;
  18. int type;
  19. };
  20. static struct smatch sgi_cputable[] = {
  21. { "MIPS-R2000", CPU_R2000 },
  22. { "MIPS-R3000", CPU_R3000 },
  23. { "MIPS-R3000A", CPU_R3000A },
  24. { "MIPS-R4000", CPU_R4000SC },
  25. { "MIPS-R4400", CPU_R4400SC },
  26. { "MIPS-R4600", CPU_R4600 },
  27. { "MIPS-R8000", CPU_R8000 },
  28. { "MIPS-R5000", CPU_R5000 },
  29. { "MIPS-R5000A", CPU_R5000A }
  30. };
  31. #define NUM_CPUS 9 /* for now */
  32. static int __init string_to_cpu(char *s)
  33. {
  34. int i;
  35. for(i = 0; i < NUM_CPUS; i++) {
  36. if(!strcmp(s, sgi_cputable[i].name))
  37. return sgi_cputable[i].type;
  38. }
  39. prom_printf("nYeee, could not determine MIPS cpu type <%s>n", s);
  40. prom_printf("press a key to rebootn");
  41. prom_getchar();
  42. romvec->imode();
  43. return 0;
  44. }
  45. /*
  46.  * We' call this early before loadmmu().  If we do the other way around
  47.  * the firmware will crash and burn.
  48.  */
  49. void __init sgi_sysinit(void)
  50. {
  51. pcomponent *p, *toplev, *cpup = 0;
  52. int cputype = -1;
  53. /* The root component tells us what machine architecture we
  54.  * have here.
  55.  */
  56. p = prom_getchild(PROM_NULL_COMPONENT);
  57. /* Now scan for cpu(s). */
  58. toplev = p = prom_getchild(p);
  59. while(p) {
  60. int ncpus = 0;
  61. if(p->type == Cpu) {
  62. if(++ncpus > 1) {
  63. prom_printf("nYeee, SGI MP not ready yetn");
  64. prom_printf("press a key to rebootn");
  65. prom_getchar();
  66. romvec->imode();
  67. }
  68. printk("CPU: %s ", p->iname);
  69. cpup = p;
  70. cputype = string_to_cpu(cpup->iname);
  71. }
  72. p = prom_getsibling(p);
  73. }
  74. if(cputype == -1) {
  75. prom_printf("nYeee, could not find cpu ARCS componentn");
  76. prom_printf("press a key to rebootn");
  77. prom_getchar();
  78. romvec->imode();
  79. }
  80. p = prom_getchild(cpup);
  81. while(p) {
  82. switch(p->class) {
  83. case processor:
  84. switch(p->type) {
  85. case Fpu:
  86. printk("FPU<%s> ", p->iname);
  87. break;
  88. default:
  89. break;
  90. };
  91. break;
  92. case cache:
  93. switch(p->type) {
  94. case picache:
  95. printk("ICACHE ");
  96. break;
  97. case pdcache:
  98. printk("DCACHE ");
  99. break;
  100. case sccache:
  101. printk("SCACHE ");
  102. break;
  103. default:
  104. break;
  105. };
  106. break;
  107. default:
  108. break;
  109. };
  110. p = prom_getsibling(p);
  111. }
  112. printk("n");
  113. }