head.S
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * alpha/boot/head.S
  3.  *
  4.  * initial boot stuff.. At this point, the bootloader has already
  5.  * switched into OSF/1 PAL-code, and loaded us at the correct address
  6.  * (START_ADDR).  So there isn't much left for us to do: just set up
  7.  * the kernel global pointer and jump to the kernel entry-point.
  8.  */
  9. #include <linux/config.h>
  10. #include <asm/system.h>
  11. .globl swapper_pg_dir
  12. .globl _stext
  13. swapper_pg_dir=SWAPPER_PGD
  14. .set noreorder
  15. .globl __start
  16. .ent __start
  17. _stext:
  18. __start:
  19. .prologue 0
  20. br $27,1f
  21. 1: ldgp $29,0($27)
  22. /* We need to get current loaded up with our first task...  */
  23. lda $8,init_task_union
  24. /* ... and find our stack ... */
  25. lda $30,0x4000($8)
  26. /* ... and then we can start the kernel.  */
  27. jsr $26,start_kernel
  28. call_pal PAL_halt
  29. .end __start
  30. #ifdef CONFIG_SMP
  31. .align 3
  32. .globl __smp_callin
  33. .ent __smp_callin
  34. /* On entry here from SRM console, the HWPCB of the per-cpu
  35.    slot for this processor has been loaded.  We've arranged
  36.    for the UNIQUE value for this process to contain the PCBB
  37.    of the target idle task.  */
  38. __smp_callin:
  39. .prologue 1
  40. ldgp $29,0($27) # First order of business, load the GP.
  41. call_pal PAL_rduniq # Grab the target PCBB.
  42. mov $0,$16 # Install it.
  43. call_pal PAL_swpctx
  44. lda $8,0x3fff # Find "current".
  45. bic $30,$8,$8
  46. jsr $26,smp_callin
  47. call_pal PAL_halt
  48. .end __smp_callin
  49. #endif /* CONFIG_SMP */
  50. #
  51. # The following two functions are needed for supporting SRM PALcode
  52. # on the PC164 (at least), since that PALcode manages the interrupt
  53. # masking, and we cannot duplicate the effort without causing problems
  54. #
  55. .align 3
  56. .globl cserve_ena
  57. .ent cserve_ena
  58. cserve_ena:
  59. .prologue 0
  60. bis $16,$16,$17
  61. lda $16,52($31)
  62. call_pal PAL_cserve
  63. ret ($26)
  64. .end cserve_ena
  65. .align 3
  66. .globl cserve_dis
  67. .ent cserve_dis
  68. cserve_dis:
  69. .prologue 0
  70. bis $16,$16,$17
  71. lda $16,53($31)
  72. call_pal PAL_cserve
  73. ret ($26)
  74. .end cserve_dis
  75. #
  76. # It is handy, on occasion, to make halt actually just loop. 
  77. # Putting it here means we dont have to recompile the whole
  78. # kernel.
  79. #
  80. .align 3
  81. .globl halt
  82. .ent halt
  83. halt:
  84. .prologue 0
  85. call_pal PAL_halt
  86. .end halt