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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.misc.S 1.7 05/18/01 06:20:29 patch
  3.  */
  4. /*
  5.  * Copyright (C) Paul Mackerras 1997.
  6.  *
  7.  * This program is free software; you can redistribute it and/or
  8.  * modify it under the terms of the GNU General Public License
  9.  * as published by the Free Software Foundation; either version
  10.  * 2 of the License, or (at your option) any later version.
  11.  */
  12. #include "../../kernel/ppc_asm.tmpl"
  13. .text
  14. /*
  15.  * Flush the dcache and invalidate the icache for a range of addresses.
  16.  *
  17.  * flush_cache(addr, len)
  18.  */
  19. .global flush_cache
  20. flush_cache:
  21. mfpvr r5 # Get processor version register
  22. extrwi r5,r5,16,0 # Get the version bits
  23. cmpwi cr0,r5,0x0020 # Is this a 403-based processor?
  24. beq 1f # Yes, it is
  25. li r5,32 # It is not a 403, set to 32 bytes
  26. addi r4,r4,32-1 # len += line_size - 1
  27. srwi. r4,r4,5 # Convert from bytes to lines
  28. b 2f
  29. 1: li r5,16 # It is a 403, set to 16 bytes
  30. addi r4,r4,16-1 # len += line_size - 1
  31. srwi. r4,r4,4 # Convert from bytes to lines
  32. 2: mtctr r4 # Set-up the counter register
  33. beqlr # If it is 0, we are done
  34. 3: dcbf r0,r3 # Flush and invalidate the data line
  35. icbi r0,r3 # Invalidate the instruction line
  36. add r3,r3,r5 # Move to the next line
  37. bdnz 3b # Are we done yet?
  38. sync
  39. isync
  40. blr # Return to the caller