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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #include <linux/linkage.h>
  2. #include <asm/page.h>
  3. #include <asm/contregs.h>
  4. #include <asm/sun3-head.h>
  5. PSL_HIGHIPL     = 0x2700
  6. NBSG            = 0x20000
  7. ICACHE_ONLY = 0x00000009
  8. CACHES_OFF = 0x00000008 | actually a clear and disable --m
  9. #define MAS_STACK INT_STACK 
  10. ROOT_TABLE_SIZE = 128
  11. PAGESIZE = 8192
  12. SUN3_INVALID_PMEG = 255
  13. .globl SYMBOL_NAME(bootup_user_stack)
  14. .globl SYMBOL_NAME(bootup_kernel_stack)
  15. .globl SYMBOL_NAME(pg0)
  16. .globl SYMBOL_NAME(swapper_pg_dir)
  17. .globl SYMBOL_NAME(kernel_pmd_table)
  18. .globl SYMBOL_NAME(availmem)
  19. .global SYMBOL_NAME(m68k_pgtable_cachemode)
  20. .global SYMBOL_NAME(kpt)
  21. | todo: all these should be in bss!
  22. SYMBOL_NAME(swapper_pg_dir):                .skip 0x2000
  23. SYMBOL_NAME(pg0):                           .skip 0x2000
  24. SYMBOL_NAME(kernel_pmd_table):              .skip 0x2000
  25. .globl SYMBOL_NAME(kernel_pg_dir)
  26. .equ    SYMBOL_NAME(kernel_pg_dir),SYMBOL_NAME(kernel_pmd_table)
  27. .section .head
  28. ENTRY(_stext)
  29. ENTRY(_start)
  30. /* Firstly, disable interrupts and set up function codes. */
  31. movew #PSL_HIGHIPL, %sr
  32. moveq #FC_CONTROL, %d0
  33. movec %d0, %sfc
  34. movec %d0, %dfc
  35. /* Make sure we're in context zero. */
  36. moveq #0, %d0
  37. movsb %d0, AC_CONTEXT
  38. /* map everything the bootloader left us into high memory, clean up the
  39.    excess later */
  40. lea (AC_SEGMAP+0),%a0 
  41. lea (AC_SEGMAP+KERNBASE),%a1
  42. 1:
  43. movsb %a0@, %d1
  44. movsb %d1, %a1@
  45. cmpib #SUN3_INVALID_PMEG, %d1
  46. beq 2f
  47. addl #NBSG,%a0
  48. addl #NBSG,%a1
  49. jmp 1b
  50. 2:
  51. /* Disable caches and jump to high code. */
  52. moveq #ICACHE_ONLY,%d0 | Cache disabled until we're ready to enable it
  53. movc %d0, %cacr |   is this the right value? (yes --m)
  54. jmp 1f:l
  55. /* Following code executes at high addresses (0xE000xxx). */
  56. 1: lea SYMBOL_NAME(init_task_union),%a2 | get initial thread...
  57. lea %a2@(KTHREAD_SIZE),%sp | ...and its stack.
  58. /* copy bootinfo records from the loader to _end */
  59. lea SYMBOL_NAME(_end), %a1
  60. lea BI_START, %a0
  61. /* number of longs to copy */
  62. movel %a0@, %d0
  63. 1: addl #4, %a0
  64. movel   %a0@, %a1@
  65. addl #4, %a1
  66. dbf %d0, 1b
  67. /* Point MSP at an invalid page to trap if it's used. --m */
  68. movl #(PAGESIZE),%d0
  69. movc %d0,%msp
  70. moveq #-1,%d0
  71. movsb %d0,(AC_SEGMAP+0x0)
  72. jbsr SYMBOL_NAME(sun3_init)
  73. jbsr SYMBOL_NAME(base_trap_init)
  74.         jbsr    SYMBOL_NAME(start_kernel)
  75. trap #15
  76.         .data
  77.         .even
  78. SYMBOL_NAME_LABEL(kpt)
  79.         .long 0
  80. SYMBOL_NAME_LABEL(availmem)
  81.         .long 0
  82. | todo: remove next two. --m
  83. SYMBOL_NAME_LABEL(is_medusa)
  84.         .long 0
  85. SYMBOL_NAME_LABEL(m68k_pgtable_cachemode)
  86.         .long 0