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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id: map.S,v 1.2 1999/11/19 05:53:02 davem Exp $
  2.  * map.S: Tricky coding required to fixup the kernel OBP maps
  3.  *   properly.
  4.  *
  5.  * Copyright (C) 1999 David S. Miller (davem@redhat.com)
  6.  */
  7. .text
  8. .align 8192
  9. .globl prom_boot_page
  10. prom_boot_page:
  11. call_method:
  12. .asciz "call-method"
  13. .align 8
  14. map:
  15. .asciz "map"
  16. .align 8
  17. /* When we are invoked, our caller has remapped us to
  18.  * page zero, therefore we must use PC relative addressing
  19.  * for everything after we begin performing the unmap/map
  20.  * calls.
  21.  */
  22. .globl prom_remap
  23. prom_remap: /* %o0 = physpage, %o1 = virtpage, %o2 = mmu_ihandle */
  24. rd %pc, %g1
  25. srl %o2, 0, %o2 ! kill sign extension
  26. sethi %hi(p1275buf), %g2
  27. or %g2, %lo(p1275buf), %g2
  28. ldx [%g2 + 0x10], %g3 ! prom_cif_stack
  29. save %g3, -(192 + 128), %sp
  30. ldx [%g2 + 0x08], %l0 ! prom_cif_handler
  31. mov %g6, %i3
  32. mov %g4, %i4
  33. flushw
  34. sethi %hi(prom_remap - call_method), %g7
  35. or %g7, %lo(prom_remap - call_method), %g7
  36. sub %g1, %g7, %l2 ! call-method string
  37. sethi %hi(prom_remap - map), %g7
  38. or %g7, %lo(prom_remap - map), %g7
  39. sub %g1, %g7, %l4 ! map string
  40. /* OK, map the 4MB region we really live at. */
  41. stx %l2, [%sp + 2047 + 128 + 0x00] ! call-method
  42. mov 7, %l5
  43. stx %l5, [%sp + 2047 + 128 + 0x08] ! num_args
  44. mov 1, %l5
  45. stx %l5, [%sp + 2047 + 128 + 0x10] ! num_rets
  46. stx %l4, [%sp + 2047 + 128 + 0x18] ! map
  47. stx %i2, [%sp + 2047 + 128 + 0x20] ! mmu_ihandle
  48. mov -1, %l5
  49. stx %l5, [%sp + 2047 + 128 + 0x28] ! mode == default
  50. sethi %hi(4 * 1024 * 1024), %l5
  51. stx %l5, [%sp + 2047 + 128 + 0x30] ! size
  52. stx %i1, [%sp + 2047 + 128 + 0x38] ! vaddr
  53. stx %g0, [%sp + 2047 + 128 + 0x40] ! filler
  54. stx %i0, [%sp + 2047 + 128 + 0x48] ! paddr
  55. call %l0
  56.  add %sp, (2047 + 128), %o0 ! argument array
  57. /* Restore hard-coded globals. */
  58. mov %i3, %g6
  59. mov %i4, %g4
  60. /* Wheee.... we are done. */
  61. ret
  62. restore
  63. .align 8192