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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * This header file contains simple Read/Write macros for addressing the SDRAM,
  3.  * devices, GT`s internal registers and PCI (using the PCI`s address space).
  4.  *
  5.  * Copyright Galileo Technology.
  6.  */
  7. #ifndef __INCcoreh
  8. #define __INCcoreh
  9. #include <linux/types.h>
  10. #include <asm/byteorder.h>
  11. #include <asm/gt64120.h>
  12. #define INTERNAL_REG_BASE_ADDR 0x14000000
  13. #define NO_BIT          0x00000000
  14. #define BIT0            0x00000001
  15. #define BIT1            0x00000002
  16. #define BIT2            0x00000004
  17. #define BIT3            0x00000008
  18. #define BIT4            0x00000010
  19. #define BIT5            0x00000020
  20. #define BIT6            0x00000040
  21. #define BIT7            0x00000080
  22. #define BIT8            0x00000100
  23. #define BIT9            0x00000200
  24. #define BIT10           0x00000400
  25. #define BIT11           0x00000800
  26. #define BIT12           0x00001000
  27. #define BIT13           0x00002000
  28. #define BIT14           0x00004000
  29. #define BIT15           0x00008000
  30. #define BIT16           0x00010000
  31. #define BIT17           0x00020000
  32. #define BIT18           0x00040000
  33. #define BIT19           0x00080000
  34. #define BIT20           0x00100000
  35. #define BIT21           0x00200000
  36. #define BIT22           0x00400000
  37. #define BIT23           0x00800000
  38. #define BIT24           0x01000000
  39. #define BIT25           0x02000000
  40. #define BIT26           0x04000000
  41. #define BIT27           0x08000000
  42. #define BIT28           0x10000000
  43. #define BIT29           0x20000000
  44. #define BIT30           0x40000000
  45. #define BIT31           0x80000000
  46. #define _1K             0x00000400
  47. #define _2K             0x00000800
  48. #define _4K             0x00001000
  49. #define _8K             0x00002000
  50. #define _16K            0x00004000
  51. #define _32K            0x00008000
  52. #define _64K            0x00010000
  53. #define _128K           0x00020000
  54. #define _256K           0x00040000
  55. #define _512K           0x00080000
  56. #define _1M             0x00100000
  57. #define _2M             0x00200000
  58. #define _3M             0x00300000
  59. #define _4M             0x00400000
  60. #define _5M             0x00500000
  61. #define _6M             0x00600000
  62. #define _7M             0x00700000
  63. #define _8M             0x00800000
  64. #define _9M             0x00900000
  65. #define _10M            0x00a00000
  66. #define _11M            0x00b00000
  67. #define _12M            0x00c00000
  68. #define _13M            0x00d00000
  69. #define _14M            0x00e00000
  70. #define _15M            0x00f00000
  71. #define _16M            0x01000000
  72. typedef enum _bool{false,true} bool;
  73. #ifndef NULL
  74. #define NULL 0
  75. #endif
  76. /* The two following defines are according to MIPS architecture. */
  77. #define NONE_CACHEABLE 0xa0000000
  78. #define MIPS_CACHEABLE 0x80000000
  79. /* Read/Write to/from GT`s internal registers */
  80. #define GT_REG_READ(offset, pData)
  81. do {
  82. *pData = (*((u32 *)(NONE_CACHEABLE |
  83. INTERNAL_REG_BASE_ADDR | (offset))));
  84. *pData = cpu_to_le32(*pData);
  85. } while(0)
  86. #define GT_REG_WRITE(offset, data)
  87. (*((u32 *)(NONE_CACHEABLE | INTERNAL_REG_BASE_ADDR |
  88. (offset))) = cpu_to_le32(data))
  89. #define VIRTUAL_TO_PHY(y) ((u32)(y) & (u32)0x5fffffff)
  90. #define PHY_TO_VIRTUAL(y) ((u32)(y) | NONE_CACHEABLE)
  91. /* Write 32/16/8 bit Non-Cache-able */
  92. #define WRITE_CHAR(address, data)
  93. (*((u8 *)((address) | NONE_CACHEABLE)) = (data))
  94. #define WRITE_SHORT(address, data)
  95. (*((u16 *)((address) | NONE_CACHEABLE)) = (u16) data)
  96. #define WRITE_WORD(address, data)
  97. (*((u32 *)((address) | NONE_CACHEABLE)) = (u32) data)
  98. /* Write 32/16/8 bits Cacheable */
  99. #define WRITE_CHAR_CACHEABLE(address, data)
  100. (*((u8 *)((address) | MIPS_CACHEABLE)) = (data))
  101. #define WRITE_SHORT_CACHEABLE(address, data)
  102. (*((u16 *)((address) | MIPS_CACHEABLE)) = (u16) data)
  103. #define WRITE_WORD_CACHEABLE(address, data)
  104. (*((u32 *)((address) | MIPS_CACHEABLE )) = (u32) data)
  105. /* Read 32/16/8 bits NonCacheable - returns data in variable. */
  106. #define READ_CHAR(address,pData)
  107. (*(pData) = *((u8 *)((address) | NONE_CACHEABLE)))
  108. #define READ_SHORT(address,pData)
  109. (*(pData) = *((u16 *)((address) | NONE_CACHEABLE)))
  110. #define READ_WORD(address,pData)
  111. (*(pData) = *((u32 *)((address) | NONE_CACHEABLE)))
  112. /* Read 32/16/8 bit NonCacheable - returns data direct. */
  113. #define READCHAR(address)
  114. (*((u8 *)((address) | NONE_CACHEABLE)))
  115. #define READSHORT(address)
  116. (*((u16 *)((address) | NONE_CACHEABLE)))
  117. #define READWORD(address)
  118.         (*((u32 *)((address) | NONE_CACHEABLE)))
  119. /* Read 32/16/8 bit Cacheable - returns data in variable. */
  120. #define READ_CHAR_CACHEABLE(address,pData)
  121.         (*(pData) = *((u8 *)((address) | MIPS_CACHEABLE)))
  122. #define READ_SHORT_CACHEABLE(address,pData)
  123.         (*(pData) = *((u16 *)((address) | MIPS_CACHEABLE)))
  124. #define READ_WORD_CACHEABLE(address,pData)
  125.         (*(pData) = *((u32 *)((address) | MIPS_CACHEABLE)))
  126. /* Read 32/16/8 bit Cacheable - returns data direct. */
  127. #define READCHAR_CACHEABLE(address)
  128. (*((u8 *)((address) | MIPS_CACHEABLE)))
  129. #define READSHORT_CACHEABLE(address)
  130. (*((u16 *)((address) | MIPS_CACHEABLE)))
  131. #define READWORD_CACHEABLE(address)
  132. (*((u32 *)((address) | MIPS_CACHEABLE)))
  133. /*
  134.  * SET_REG_BITS(regOffset,bits) -
  135.  * gets register offset and bits: a 32bit value. It set to logic '1' in the
  136.  * internal register the bits which given as an input example:
  137.  * SET_REG_BITS(0x840,BIT3 | BIT24 | BIT30) - set bits: 3,24 and 30 to logic
  138.  * '1' in register 0x840 while the other bits stays as is.
  139.  */
  140. #define SET_REG_BITS(regOffset,bits)
  141. (*(u32*)(NONE_CACHEABLE | INTERNAL_REG_BASE_ADDR |
  142. (regOffset)) |= (u32)cpu_to_le32(bits))
  143. /*
  144.  * RESET_REG_BITS(regOffset,bits) -
  145.  * gets register offset and bits: a 32bit value. It set to logic '0' in the
  146.  * internal register the bits which given as an input example:
  147.  * RESET_REG_BITS(0x840,BIT3 | BIT24 | BIT30) - set bits: 3,24 and 30 to logic
  148.  * '0' in register 0x840 while the other bits stays as is.
  149.  */
  150. #define RESET_REG_BITS(regOffset,bits)
  151. (*(u32 *)(NONE_CACHEABLE | INTERNAL_REG_BASE_ADDR |
  152. (regOffset)) &= ~((u32)cpu_to_le32(bits)))
  153. #endif /* __INCcoreh */