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

嵌入式Linux

开发平台:

Unix_Linux

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