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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1999 by Helge Deller
  8.  * Copyright 1999 SuSE GmbH (Philipp Rumpf)
  9.  * Copyright 1999 Philipp Rumpf (prumpf@tux.org)
  10.  *
  11.  * Initial Version 04-23-1999 by Helge Deller (helge.deller@ruhr-uni-bochum.de)
  12.  */
  13. #include <asm/offset.h>
  14. #include <asm/psw.h>
  15. #define __ASSEMBLY__
  16. /*********
  17. #include <asm/pdc.h>
  18. *********/
  19. #include <asm/assembly.h>
  20. #include <asm/pgtable.h>
  21. .level 1.1
  22. .section .initcall.init
  23. .align 4
  24. .export __initcall_start
  25. __initcall_start:
  26. .export __initcall_end
  27. __initcall_end:
  28. .export __setup_start
  29. __setup_start:
  30. .export __setup_end
  31. __setup_end:
  32. .text
  33. .align 4
  34. .import init_task_union,data
  35. .import $global$ /* forward declaration */
  36. .import fault_vector_11,code /* IVA parisc 1.1 32 bit */
  37. .import fault_vector_20,code /* IVA parisc 2.0 32 bit */
  38. .import start_parisc,code /* then enable VM and go here */
  39. .export stext
  40. .export _stext,data /* Kernel want it this way! */
  41. _stext:
  42. stext:
  43. .proc
  44. .callinfo
  45. /* Make sure sr4-sr7 are set to zero for the kernel address space */
  46. mtsp %r0,%sr4
  47. mtsp %r0,%sr5
  48. mtsp %r0,%sr6
  49. mtsp %r0,%sr7
  50. /* Initialize startup VM. Just map first 8 MB of memory */
  51. ldil L%PA(pg0),%r1
  52. ldo R%PA(pg0)(%r1),%r1
  53. ldo _PAGE_TABLE(%r1),%r3
  54. ldil L%PA(swapper_pg_dir),%r4
  55. ldo R%PA(swapper_pg_dir)(%r4),%r4
  56. mtctl %r4,%cr24 /* Initialize kernel root pointer */
  57. mtctl %r4,%cr25 /* Initialize user root pointer */
  58. stw %r3,0xc00(%r4) /* Hardwired 0xc0000000 kernel vaddr start */
  59. ldo 0x1000(%r3),%r3
  60. stw %r3,0xc04(%r4)
  61. ldo _PAGE_KERNEL(%r0),%r3 /* Hardwired 0x0 phys addr start */
  62. $pgt_fill_loop:
  63. stwm %r3,4(%r1)
  64. ldo 0x1000(%r3),%r3
  65. bb,>= %r3,8,$pgt_fill_loop
  66. nop
  67. /* Initialize the global data pointer */
  68. ldil L%$global$,%dp
  69. ldo R%$global$(%dp),%dp
  70. /* And the stack pointer, physical too */
  71. ldil L%init_task_union+TASK_SZ_ALGN,%sp
  72. ldo R%init_task_union+TASK_SZ_ALGN(%sp),%sp
  73. /* we need this to take interruptions directly after the rfi below */
  74. /* (which we need for PA2.0 boxes) */
  75. mtctl %r0, %cr30
  76. /*
  77.  * Set up our interrupt table.  HPMCs might not work after this! 
  78.  *
  79.  * We need to install the correct iva for PA1.1 or PA2.0. The
  80.  * following short sequence of instructions can determine this
  81.  * (without being illegal on a PA1.1 machine).
  82.  */
  83. ldi 32,%r10
  84. mtctl %r10,%cr11
  85. .level 2.0
  86. mfctl,w %cr11,%r10
  87. .level 1.1
  88. comib,<>,n 0,%r10,$is_pa20
  89. ldil L%PA(fault_vector_11),%r10
  90. b $install_iva
  91. ldo R%PA(fault_vector_11)(%r10),%r10
  92. $is_pa20:
  93. ldil L%PA(fault_vector_20),%r10
  94. ldo R%PA(fault_vector_20)(%r10),%r10
  95. $install_iva:
  96. mtctl %r10,%cr14
  97. /* Disable (most) interruptions */
  98. mtsm %r0
  99. /* kernel PSW:
  100.  *  - no interruptions except for HPMC and TOC (which are handled by PDC)
  101.  *  - Q bit set (IODC / PDC interruptions)
  102.  *  - big-endian
  103.  *  - virtually mapped
  104.  */
  105. ldil L%KERNEL_PSW,%r10
  106. ldo R%KERNEL_PSW(%r10),%r10
  107. mtctl %r10,%ipsw
  108. /* Set the space pointers for the post-RFI world */
  109. mtctl %r0,%cr17 /* Clear two-level IIA Space Queue */
  110. mtctl %r0,%cr17 /*    effectively setting kernel space. */
  111. /* And the return address(es) too */
  112. ldil L%start_parisc,%r10
  113. ldo R%start_parisc(%r10),%r10
  114. mtctl %r10,%cr18
  115. ldo 4(%r10),%r10
  116. mtctl %r10,%cr18
  117. /* Jump to hyperspace */
  118. rfi
  119. nop
  120. .procend
  121. .data
  122. .align 4
  123. .export $global$,data
  124. .type $global$,@object
  125. .size $global$,4
  126. $global$:
  127. .word 0