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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*!**************************************************************************
  2. *!                                                            
  3. *! MACROS:
  4. *!   IO_MASK(reg,field)
  5. *!   IO_STATE(reg,field,state)
  6. *!   IO_EXTRACT(reg,field,val)
  7. *!   IO_STATE_VALUE(reg,field,state)
  8. *!   IO_BITNR(reg,field)
  9. *!   IO_WIDTH(reg,field)
  10. *!   IO_FIELD(reg,field,val)
  11. *!   IO_RD(reg)
  12. *!   All moderegister addresses and fields of these.
  13. *!
  14. *!**************************************************************************/
  15. #ifndef __sv_addr_ag_h__
  16. #define __sv_addr_ag_h__
  17. #define __test_sv_addr__ 0
  18. /*------------------------------------------------------------
  19. !* General macros to manipulate moderegisters.
  20. !*-----------------------------------------------------------*/
  21. /* IO_MASK returns a mask for a specified bitfield in a register.
  22.    Note that this macro doesn't work when field width is 32 bits. */
  23. #define IO_MASK(reg,field) 
  24.     ( ( ( 1 << reg##__##field##__WIDTH ) - 1 ) << reg##__##field##__BITNR )
  25. /* IO_STATE returns a constant corresponding to a one of the symbolic
  26.    states that the bitfield can have. (Shifted to correct position)  */
  27. #define IO_STATE(reg,field,state) 
  28.     ( reg##__##field##__##state << reg##__##field##__BITNR )
  29. /* IO_EXTRACT returns the masked and shifted value corresponding to the
  30.    bitfield can have. */
  31. #define IO_EXTRACT(reg,field,val) ( (( ( ( 1 << reg##__##field##__WIDTH ) 
  32.      - 1 ) << reg##__##field##__BITNR ) & (val)) >> reg##__##field##__BITNR )
  33. /* IO_STATE_VALUE returns a constant corresponding to a one of the symbolic
  34.    states that the bitfield can have. (Not shifted)  */
  35. #define IO_STATE_VALUE(reg,field,state) ( reg##__##field##__##state )
  36. /* IO_FIELD shifts the val parameter to be aligned with the bitfield
  37.    specified. */
  38. #define IO_FIELD(reg,field,val) ((val) << reg##__##field##__BITNR)
  39. /* IO_BITNR returns the starting bitnumber of a bitfield. Bit 0 is
  40.    LSB and the returned bitnumber is LSB of the field. */
  41. #define IO_BITNR(reg,field) (reg##__##field##__BITNR)
  42. /* IO_WIDTH returns the width, in bits, of a bitfield. */
  43. #define IO_WIDTH(reg,field) (reg##__##field##__WIDTH)
  44. /*--- Obsolete. Kept for backw compatibility. ---*/
  45. /* Reads (or writes) a byte/uword/udword from the specified mode
  46.    register. */
  47. #define IO_RD(reg) (*(volatile u32*)(reg))
  48. #define IO_RD_B(reg) (*(volatile u8*)(reg))
  49. #define IO_RD_W(reg) (*(volatile u16*)(reg))
  50. #define IO_RD_D(reg) (*(volatile u32*)(reg))
  51. /*------------------------------------------------------------
  52. !* Start addresses of the different memory areas.
  53. !*-----------------------------------------------------------*/
  54. #define MEM_CSE0_START (0x00000000)
  55. #define MEM_CSE1_START (0x04000000)
  56. #define MEM_CSR0_START (0x08000000)
  57. #define MEM_CSR1_START (0x0c000000)
  58. #define MEM_CSP0_START (0x10000000)
  59. #define MEM_CSP1_START (0x14000000)
  60. #define MEM_CSP2_START (0x18000000)
  61. #define MEM_CSP3_START (0x1c000000)
  62. #define MEM_CSP4_START (0x20000000)
  63. #define MEM_CSP5_START (0x24000000)
  64. #define MEM_CSP6_START (0x28000000)
  65. #define MEM_CSP7_START (0x2c000000)
  66. #define MEM_DRAM_START (0x40000000)
  67. #define MEM_NON_CACHEABLE (0x80000000)
  68. /*------------------------------------------------------------
  69. !* Type casts used in mode register macros, making pointer
  70. !* dereferencing possible. Empty in assembler.
  71. !*-----------------------------------------------------------*/
  72. #ifndef __ASSEMBLER__
  73. # define  IO_TYPECAST_UDWORD  (volatile u32*)
  74. # define  IO_TYPECAST_RO_UDWORD  (const volatile u32*)
  75. # define  IO_TYPECAST_UWORD  (volatile u16*)
  76. # define  IO_TYPECAST_RO_UWORD  (const volatile u16*)
  77. # define  IO_TYPECAST_BYTE  (volatile u8*)
  78. # define  IO_TYPECAST_RO_BYTE  (const volatile u8*)
  79. #else
  80. # define  IO_TYPECAST_UDWORD
  81. # define  IO_TYPECAST_RO_UDWORD
  82. # define  IO_TYPECAST_UWORD
  83. # define  IO_TYPECAST_RO_UWORD
  84. # define  IO_TYPECAST_BYTE
  85. # define  IO_TYPECAST_RO_BYTE
  86. #endif
  87. /*------------------------------------------------------------*/
  88. #include "sv_addr.agh"
  89. #if __test_sv_addr__
  90. /* IO_MASK( R_BUS_CONFIG , CE ) */
  91. IO_MASK( R_WAITSTATES , SRAM_WS )
  92. IO_MASK( R_TEST , W32 )
  93. IO_STATE( R_BUS_CONFIG, CE, DISABLE )
  94. IO_STATE( R_BUS_CONFIG, CE, ENABLE )
  95. IO_STATE( R_DRAM_TIMING, REF, IVAL2 )
  96. IO_MASK( R_DRAM_TIMING, REF )
  97. IO_MASK( R_EXT_DMA_0_STAT, TFR_COUNT ) >> IO_BITNR( R_EXT_DMA_0_STAT, TFR_COUNT )
  98. IO_RD(R_EXT_DMA_0_STAT) & IO_MASK( R_EXT_DMA_0_STAT, S ) 
  99.    == IO_STATE( R_EXT_DMA_0_STAT, S, STARTED )
  100. #endif
  101. #endif  /* ifndef __sv_addr_ag_h__ */