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

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id: balo_supp.S,v 1.1 1999/01/17 03:49:38 ralf Exp $
  2.  * balo_supp.S: BAget Loader supplement
  3.  *
  4.  * Copyright (C) 1998 Gleb Raiko & Vladimir Roganov
  5.  */
  6. #include <asm/asm.h>
  7. #include <asm/regdef.h>
  8. #include <asm/stackframe.h>
  9. #include <asm/mipsregs.h>
  10. #include <asm/addrspace.h>
  11. .text
  12. .set    mips1
  13. /* General exception vector. */
  14. NESTED(except_vec3_generic, 0, sp)
  15. .set    noat
  16. la k0, except_vec3_generic_code
  17. jr k0
  18. END(except_vec3_generic)
  19. NESTED(except_vec3_generic_code, 0, sp)
  20. SAVE_ALL 
  21. mfc0 k1, CP0_CAUSE
  22. la k0, int_cause
  23. sw      k1, (k0)
  24.         mfc0    k1, CP0_EPC
  25.         la      k0, epc
  26.         sw      k1, (k0)
  27.         mfc0    k1, CP0_BADVADDR
  28.         la      k0, badvaddr
  29.         sw      k1, (k0)
  30. la k0, int_handler 
  31.         .set    noreorder
  32. jal k0
  33.         .set    reorder
  34. move a0, sp
  35.         RESTORE_ALL_AND_RET
  36. END(except_vec3_generic_code)
  37.         .align  5
  38. NESTED(flush_cache_low, PT_SIZE, sp)
  39.         .set    at
  40.         .set    macro
  41.         .set    noreorder
  42.         
  43.         move    t1, a0  # ISIZE
  44.         move    t2, a1  # DSIZE
  45.         mfc0    t3, CP0_STATUS       # Save the status register.
  46.         mtc0    zero, CP0_STATUS     # Disable interrupts.
  47.         la      v0, 1f
  48.         or      v0, KSEG1            # Run uncached.
  49.         j       v0
  50.         nop
  51. /*
  52.  * Flush the instruction cache.
  53.  */
  54. 1:
  55.         li      v0, ST0_DE | ST0_CE
  56.         mtc0    v0, CP0_STATUS       # Isolate and swap caches.
  57.         li      t0, KSEG1
  58.         subu    t0, t0, t1
  59.         li      t1, KSEG1
  60.         la      v0, 1f                          # Run cached
  61.         j       v0
  62.         nop
  63. 1:
  64.         addu    t0, t0, 64
  65.         sb      zero, -64(t0)
  66.         sb      zero, -60(t0)
  67.         sb      zero, -56(t0)
  68.         sb      zero, -52(t0)
  69.         sb      zero, -48(t0)
  70.         sb      zero, -44(t0)
  71.         sb      zero, -40(t0)
  72.         sb      zero, -36(t0)
  73.         sb      zero, -32(t0)
  74.         sb      zero, -28(t0)
  75.         sb      zero, -24(t0)
  76.         sb      zero, -20(t0)
  77.         sb      zero, -16(t0)
  78.         sb      zero, -12(t0)
  79.         sb      zero, -8(t0)
  80.         bne     t0, t1, 1b
  81.         sb      zero, -4(t0)
  82.         
  83.         la      v0, 1f
  84.         or      v0, KSEG1
  85.         j       v0                              # Run uncached
  86.         nop
  87. /*
  88.  * Flush the data cache.
  89.  */
  90. 1:
  91.         li      v0, ST0_DE
  92.         mtc0    v0, CP0_STATUS       # Isolate and swap back caches
  93.         li      t0, KSEG1
  94.         subu    t0, t0, t2
  95.         la      v0, 1f
  96.         j       v0                              # Back to cached mode
  97.         nop
  98. 1:
  99.         addu    t0, t0, 64
  100.         sb      zero, -64(t0)
  101.         sb      zero, -60(t0)
  102.         sb      zero, -56(t0)
  103.         sb      zero, -52(t0)
  104.         sb      zero, -48(t0)
  105.         sb      zero, -44(t0)
  106.         sb      zero, -40(t0)
  107.         sb      zero, -36(t0)
  108.         sb      zero, -32(t0)
  109.         sb      zero, -28(t0)
  110.         sb      zero, -24(t0)
  111.         sb      zero, -20(t0)
  112.         sb      zero, -16(t0)
  113.         sb      zero, -12(t0)
  114.         sb      zero, -8(t0)
  115.         bne     t0, t1, 1b
  116.         sb      zero, -4(t0)
  117.         nop                                     # Insure isolated stores
  118.         nop                                     #   out of pipe.
  119.         nop
  120.         nop
  121.         mtc0    t3, CP0_STATUS                 # Restore status reg.
  122.         nop                                    # Insure cache unisolated.
  123.         nop
  124.         nop
  125.         nop
  126.         j       ra
  127.         nop
  128. END(flush_cache_low)
  129. /* To satisfy macros only */
  130. EXPORT(kernelsp)
  131. PTR 0x80001000