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

嵌入式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.  * Copyright (C) 1995 Linus Torvalds
  7.  * Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999 Ralf Baechle
  8.  * Copyright (C) 1996 Stoned Elipot
  9.  * Copyright (C) 1999 Silicon Graphics, Inc.
  10.  */
  11. #include <linux/config.h>
  12. #include <linux/errno.h>
  13. #include <linux/init.h>
  14. #include <linux/sched.h>
  15. #include <linux/kernel.h>
  16. #include <linux/mm.h>
  17. #include <linux/stddef.h>
  18. #include <linux/string.h>
  19. #include <linux/unistd.h>
  20. #include <linux/ptrace.h>
  21. #include <linux/slab.h>
  22. #include <linux/user.h>
  23. #include <linux/utsname.h>
  24. #include <linux/a.out.h>
  25. #include <linux/tty.h>
  26. #ifdef CONFIG_BLK_DEV_RAM
  27. #include <linux/blk.h>
  28. #endif
  29. #include <asm/asm.h>
  30. #include <asm/bootinfo.h>
  31. #include <asm/cachectl.h>
  32. #include <asm/cpu.h>
  33. #include <asm/stackframe.h>
  34. #include <asm/system.h>
  35. #include <asm/pgalloc.h>
  36. #ifndef CONFIG_SMP
  37. struct cpuinfo_mips cpu_data[1];
  38. #endif
  39. #ifdef CONFIG_VT
  40. struct screen_info screen_info;
  41. #endif
  42. /*
  43.  * Not all of the MIPS CPUs have the "wait" instruction available.  This
  44.  * is set to true if it is available.  The wait instruction stops the
  45.  * pipeline and reduces the power consumption of the CPU very much.
  46.  */
  47. char wait_available;
  48. /*
  49.  * Do we have a cyclecounter available?
  50.  */
  51. char cyclecounter_available;
  52. /*
  53.  * Set if box has EISA slots.
  54.  */
  55. int EISA_bus = 0;
  56. #ifdef CONFIG_BLK_DEV_FD
  57. extern struct fd_ops no_fd_ops;
  58. struct fd_ops *fd_ops;
  59. #endif
  60. #ifdef CONFIG_BLK_DEV_IDE
  61. extern struct ide_ops no_ide_ops;
  62. struct ide_ops *ide_ops;
  63. #endif
  64. extern struct rtc_ops no_rtc_ops;
  65. struct rtc_ops *rtc_ops;
  66. extern struct kbd_ops no_kbd_ops;
  67. struct kbd_ops *kbd_ops;
  68. /*
  69.  * Setup information
  70.  *
  71.  * These are initialized so they are in the .data section
  72.  */
  73. unsigned long mips_cputype = CPU_UNKNOWN;
  74. unsigned long mips_machtype = MACH_UNKNOWN;
  75. unsigned long mips_machgroup = MACH_GROUP_UNKNOWN;
  76. struct boot_mem_map boot_mem_map;
  77. unsigned char aux_device_present;
  78. extern void load_mmu(void);
  79. static char command_line[CL_SIZE] = { 0, };
  80.        char saved_command_line[CL_SIZE];
  81. extern char arcs_cmdline[CL_SIZE];
  82. extern void ip22_setup(void);
  83. extern void ip27_setup(void);
  84. static inline void cpu_probe(void)
  85. {
  86. unsigned int prid = read_32bit_cp0_register(CP0_PRID);
  87. switch(prid & 0xff00) {
  88. case PRID_IMP_R4000:
  89. if((prid & 0xff) == PRID_REV_R4400)
  90. mips_cputype = CPU_R4400SC;
  91. else
  92. mips_cputype = CPU_R4000SC;
  93. break;
  94. case PRID_IMP_R4600:
  95. mips_cputype = CPU_R4600;
  96. break;
  97. case PRID_IMP_R4700:
  98. mips_cputype = CPU_R4700;
  99. break;
  100. case PRID_IMP_R5000:
  101. mips_cputype = CPU_R5000;
  102. break;
  103. case PRID_IMP_NEVADA:
  104. mips_cputype = CPU_NEVADA;
  105. break;
  106. case PRID_IMP_R8000:
  107. mips_cputype = CPU_R8000;
  108. break;
  109. case PRID_IMP_R10000:
  110. case PRID_IMP_R12000:
  111. mips_cputype = CPU_R10000;
  112. break;
  113. default:
  114. mips_cputype = CPU_UNKNOWN;
  115. }
  116. }
  117. void __init setup_arch(char **cmdline_p)
  118. {
  119. cpu_probe();
  120. load_mmu();
  121. #ifdef CONFIG_SGI_IP22
  122. ip22_setup();
  123. #endif
  124. #ifdef CONFIG_SGI_IP27
  125. ip27_setup();
  126. #endif
  127. #ifdef CONFIG_ARC_MEMORY
  128. bootmem_init ();
  129. #endif
  130. strncpy(command_line, arcs_cmdline, CL_SIZE);
  131. memcpy(saved_command_line, command_line, CL_SIZE);
  132. saved_command_line[CL_SIZE-1] = '';
  133. *cmdline_p = command_line;
  134. paging_init();
  135. }