cacheops.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Cache operations for the cache instruction.
  3. *
  4. * This file is subject to the terms and conditions of the GNU General Public
  5. * License. See the file "COPYING" in the main directory of this archive
  6. * for more details.
  7. *
  8. * (C) Copyright 1996, 97, 99, 2002, 03 Ralf Baechle
  9. * (C) Copyright 1999 Silicon Graphics, Inc.
  10. */
  11. #ifndef __ASM_CACHEOPS_H
  12. #define __ASM_CACHEOPS_H
  13. #ifndef __ASSEMBLY__
  14. static inline void mips_cache(int op, const volatile void *addr)
  15. {
  16. #ifdef __GCC_HAVE_BUILTIN_MIPS_CACHE
  17. __builtin_mips_cache(op, addr);
  18. #else
  19. __asm__ __volatile__("cache %0, %1" : : "i"(op), "R"(addr))
  20. #endif
  21. }
  22. #endif /* !__ASSEMBLY__ */
  23. /*
  24. * Cache Operations available on all MIPS processors with R4000-style caches
  25. */
  26. #define INDEX_INVALIDATE_I 0x00
  27. #define INDEX_WRITEBACK_INV_D 0x01
  28. #define INDEX_LOAD_TAG_I 0x04
  29. #define INDEX_LOAD_TAG_D 0x05
  30. #define INDEX_STORE_TAG_I 0x08
  31. #define INDEX_STORE_TAG_D 0x09
  32. #if defined(CONFIG_CPU_LOONGSON2)
  33. #define HIT_INVALIDATE_I 0x00
  34. #else
  35. #define HIT_INVALIDATE_I 0x10
  36. #endif
  37. #define HIT_INVALIDATE_D 0x11
  38. #define HIT_WRITEBACK_INV_D 0x15
  39. /*
  40. * R4000-specific cacheops
  41. */
  42. #define CREATE_DIRTY_EXCL_D 0x0d
  43. #define FILL 0x14
  44. #define HIT_WRITEBACK_I 0x18
  45. #define HIT_WRITEBACK_D 0x19
  46. /*
  47. * R4000SC and R4400SC-specific cacheops
  48. */
  49. #define INDEX_INVALIDATE_SI 0x02
  50. #define INDEX_WRITEBACK_INV_SD 0x03
  51. #define INDEX_LOAD_TAG_SI 0x06
  52. #define INDEX_LOAD_TAG_SD 0x07
  53. #define INDEX_STORE_TAG_SI 0x0A
  54. #define INDEX_STORE_TAG_SD 0x0B
  55. #define CREATE_DIRTY_EXCL_SD 0x0f
  56. #define HIT_INVALIDATE_SI 0x12
  57. #define HIT_INVALIDATE_SD 0x13
  58. #define HIT_WRITEBACK_INV_SD 0x17
  59. #define HIT_WRITEBACK_SD 0x1b
  60. #define HIT_SET_VIRTUAL_SI 0x1e
  61. #define HIT_SET_VIRTUAL_SD 0x1f
  62. /*
  63. * R5000-specific cacheops
  64. */
  65. #define R5K_PAGE_INVALIDATE_S 0x17
  66. /*
  67. * RM7000-specific cacheops
  68. */
  69. #define PAGE_INVALIDATE_T 0x16
  70. /*
  71. * R10000-specific cacheops
  72. *
  73. * Cacheops 0x02, 0x06, 0x0a, 0x0c-0x0e, 0x16, 0x1a and 0x1e are unused.
  74. * Most of the _S cacheops are identical to the R4000SC _SD cacheops.
  75. */
  76. #define INDEX_WRITEBACK_INV_S 0x03
  77. #define INDEX_LOAD_TAG_S 0x07
  78. #define INDEX_STORE_TAG_S 0x0B
  79. #define HIT_INVALIDATE_S 0x13
  80. #define CACHE_BARRIER 0x14
  81. #define HIT_WRITEBACK_INV_S 0x17
  82. #define INDEX_LOAD_DATA_I 0x18
  83. #define INDEX_LOAD_DATA_D 0x19
  84. #define INDEX_LOAD_DATA_S 0x1b
  85. #define INDEX_STORE_DATA_I 0x1c
  86. #define INDEX_STORE_DATA_D 0x1d
  87. #define INDEX_STORE_DATA_S 0x1f
  88. #endif /* __ASM_CACHEOPS_H */