123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- #ifndef _HV_VOS_CONN_H
- #define _HV_VOS_CONN_H
- #include "hv_vos_Types.h"
- #include "hv_vos_Macro.h"
- #include "hv_vos_Endian.h"
- #include "hv_vos_Log.h"
- VOS_EXTERN_C_BEGIN
- typedef struct _HV_VOS_CONN_S Hv_Vos_CONN_S;
- typedef enum _HV_VOS_CONN_TYPE_E {
- HV_VOS_CONN_SIM,
- HV_VOS_CONN_ETHERNET,
- HV_VOS_CONN_I2C,
- HV_VOS_CONN_DSUI2C,
- HV_VOS_CONN_AUTO,
- HV_VOS_CONN_DSUSPI,
- } Hv_Vos_CONN_TYPE_E;
- typedef enum _HV_VOS_CONN_DEBUG_FLAG {
- HV_VOS_CONN_DEBUG_NONE = 0,
- HV_VOS_CONN_DEBUG_READ = 1,
- HV_VOS_CONN_DEBUG_WRITE = 2,
- HV_VOS_CONN_DEBUG_READ_WRITE = 3,
- } HV_VOS_CONN_DEBUG_FLAG;
- #define Hv_Vos_CONN_Open(type, connectString) (NULL)
- #define Hv_Vos_CONN_Close(self)
- #define Hv_Vos_CONN_IsConnected(self) (HV_TRUE)
- #define Hv_Vos_CONN_SetDebug(self, flag)
- #ifndef HV_PHY_ADDR
- #define HV_PHY_ADDR(addr) ((intptr_t)(addr))
- #endif
- #define HV_R8(addr) (*(volatile UCHAR8*)(HV_PHY_ADDR(addr)))
- #define HV_W8(addr, value) (*(volatile UCHAR8*)(HV_PHY_ADDR(addr)) = (value))
- INLINE void HV_W8_MASK(UINT32 addr, UCHAR8 mask, UCHAR8 value){
- UCHAR8 val = HV_R8(addr);
- val = HV_MASK_ASSIGN(val, mask, value);
- HV_W8(addr, val);
- }
- #define HV_R8_BE(addr) HV_R8(addr)
- #define HV_W8_BE(addr, value) HV_W8_BE(addr, value)
- #define HV_W8_BE_MASK(addr, mask, value) HV_W8_MASK(addr, mask, value)
- #ifdef HV_CONFIG_ENDIAN_LITTLE
- #define HV_R16(addr) (*(volatile USHORT16*)(HV_PHY_ADDR(addr)))
- #define HV_W16(addr, value) (*(volatile USHORT16*)(HV_PHY_ADDR(addr)) = (value))
- #define HV_R16_BE(addr) HV_SWAP16(*(volatile USHORT16*)(HV_PHY_ADDR(addr)))
- #define HV_W16_BE(addr, value) (*(volatile USHORT16*)(HV_PHY_ADDR(addr)) = HV_SWAP16(value))
- #else
- #define HV_R16(addr) HV_SWAP16((*(volatile USHORT16*)(HV_PHY_ADDR(addr))))
- #define HV_W16(addr, value) (*(volatile USHORT16*)(HV_PHY_ADDR(addr)) = HV_SWAP16(value))
- #define HV_R16_BE(addr) (*(volatile USHORT16*)(HV_PHY_ADDR(addr)))
- #define HV_W16_BE(addr, value) (*(volatile USHORT16*)(HV_PHY_ADDR(addr)) = (value))
- #endif
- INLINE void HV_W16_MASK(USHORT16 addr, USHORT16 mask, USHORT16 value){
- USHORT16 val = HV_R16(addr);
- val = HV_MASK_ASSIGN(val, mask, value);
- HV_W16(addr, val);
- }
- INLINE void HV_W16_BE_MASK(USHORT16 addr, USHORT16 mask, USHORT16 value){
- USHORT16 val = HV_R16_BE(addr);
- val = HV_MASK_ASSIGN(val, mask, value);
- HV_W16_BE(addr, val);
- }
- #ifdef HV_CONFIG_ENDIAN_LITTLE
- #define HV_R32(addr) (*(volatile UINT32*)(HV_PHY_ADDR(addr)))
- #define HV_W32(addr, value) (*(volatile UINT32*)(HV_PHY_ADDR(addr)) = (value))
- #define HV_R32_BE(addr) HV_SWAP32(*(volatile UINT32*)(HV_PHY_ADDR(addr)))
- #define HV_W32_BE(addr, value) (*(volatile UINT32*)(HV_PHY_ADDR(addr)) = HV_SWAP32(value))
- #else
- #define HV_R32(addr) (HV_SWAP32(*(volatile UINT32*)(addr)))
- #define HV_W32(addr, value) (*(volatile UINT32*)(addr)) = HV_SWAP32(value)
- #define HV_R32_BE(addr) (*(volatile UINT32*)(HV_PHY_ADDR(addr)))
- #define HV_W32_BE(addr, value) (*(volatile UINT32*)(HV_PHY_ADDR(addr)) = (value))
- #endif
- INLINE void HV_W32_MASK(UINT32 addr, UINT32 mask, UINT32 value){
- UINT32 val = HV_R32(addr);
- val = HV_MASK_ASSIGN(val, mask, value);
- HV_W32(addr, val);
- }
- INLINE void HV_W32_BE_MASK(UINT32 addr, UINT32 mask, UINT32 value){
- UINT32 val = HV_R32_BE(addr);
- val = HV_MASK_ASSIGN(val, mask, value);
- HV_W32_BE(addr, val);
- }
- void HV_WRITE_MEM(UINT32 addr, const UCHAR8 *data, UINT32 size);
- void HV_READ_MEM(UINT32 addr, UCHAR8 *data, UINT32 size);
- #define HV_R8_DECL_VAR() UCHAR8 _reg_val
- #define HV_R8_FIELD(addr, field) \
- (_reg_val = HV_R8(addr), ((addr##_struct*)(void*)&(_reg_val))->field)
- #define HV_R8_FIELD_EX(addr, base, field) \
- (_reg_val = HV_R8(addr + base), ((addr##_struct*)&(_reg_val))->field)
-
- #define HV_W8_FIELD(addr, field, value) do { \
- UCHAR8 _val = HV_R8(addr); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W8(addr, _val); \
- } while (0)
- #define HV_W8_FIELD_EX(addr, base, field, value) do { \
- UCHAR8 _val = HV_R8(addr + base); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W8(addr + base, _val); \
- } while (0)
- #define HV_R8_BE_FIELD(addr, field) \
- (_reg_val = HV_R8_BE(addr), ((addr##_struct*)(void*)&(_reg_val))->field)
- #define HV_R8_BE_FIELD_EX(addr, base, field) \
- (_reg_val = HV_R8_BE(addr + base), ((addr##_struct*)&(_reg_val))->field)
-
- #define HV_W8_BE_FIELD(addr, field, value) do { \
- UCHAR8 _val = HV_R8_BE(addr); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W8_BE(addr, _val); \
- } while (0)
- #define HV_W8_FIELD_EX(addr, base, field, value) do { \
- UCHAR8 _val = HV_R8(addr + base); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W8(addr + base, _val); \
- } while (0)
- #define HV_R16_DECL_VAR() USHORT16 _reg_val
- #define HV_R16_FIELD(addr, field) \
- (_reg_val = HV_R16(addr), ((addr##_struct*)(void*)&(_reg_val))->field)
- #define HV_R16_FIELD_EX(addr, base, field) \
- (_reg_val = HV_R16(addr + base), ((addr##_struct*)&(_reg_val))->field)
-
- #define HV_W16_FIELD(addr, field, value) do { \
- UCHAR8 _val = HV_R16(addr); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W16(addr, _val); \
- } while (0)
- #define HV_W16_FIELD_EX(addr, base, field, value) do { \
- USHORT16 _val = HV_R16(addr + base); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W16(addr + base, _val); \
- } while (0)
- #define HV_R16_BE_FIELD(addr, field) \
- (_reg_val = HV_R16_BE(addr), ((addr##_struct*)(void*)&(_reg_val))->field)
- #define HV_R16_BE_FIELD_EX(addr, base, field) \
- (_reg_val = HV_R16_BE(addr + base), ((addr##_struct*)&(_reg_val))->field)
-
- #define HV_W16_BE_FIELD(addr, field, value) do { \
- UCHAR8 _val = HV_R16_BE(addr); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W16_BE(addr, _val); \
- } while (0)
- #define HV_W16_BE_FIELD_EX(addr, base, field, value) do { \
- USHORT16 _val = HV_R16_BE(addr + base); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W16_BE(addr + base, _val); \
- } while (0)
- #define HV_R32_DECL_VAR() UINT32 _reg_val
- #define HV_R32_FIELD(addr, field) \
- (_reg_val = HV_R32(addr), ((addr##_struct*)(void*)&(_reg_val))->field)
- #define HV_R32_FIELD_EX(addr, base, field) \
- (_reg_val = HV_R32(addr + base), ((addr##_struct*)&(_reg_val))->field)
-
- #define HV_W32_FIELD(addr, field, value) do { \
- UINT32 _val = HV_R32(addr); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W32(addr, _val); \
- } while (0)
- #define HV_W32_FIELD_EX(addr, base, field, value) do { \
- UINT32 _val = HV_R32(addr + base); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W32(addr + base, _val); \
- } while (0)
- #define HV_R32_BE_FIELD(addr, field) \
- (_reg_val = HV_R32_BE(addr), ((addr##_struct*)(void*)&(_reg_val))->field)
- #define HV_R32_BE_FIELD_EX(addr, base, field) \
- (_reg_val = HV_R32_BE(addr + base), ((addr##_struct*)&(_reg_val))->field)
-
- #define HV_W32_BE_FIELD(addr, field, value) do { \
- UINT32 _val = HV_R32_BE(addr); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W32_BE(addr, _val); \
- } while (0)
- #define HV_W32_BE_FIELD_EX(addr, base, field, value) do { \
- UINT32 _val = HV_R32_BE(addr + base); \
- ((addr##_struct*)&(_val))->field = value; \
- HV_W32_BE(addr + base, _val); \
- } while (0)
- #define HV_REG_VAL(reg) (*(UINT32*)&(reg))
- #define HV_W32_REG(addr, reg) HV_W32(addr, HV_REG_VAL(reg))
- #define HV_W32_BE_REG(addr, reg) HV_W32_BE(addr, HV_REG_VAL(reg))
- #define HV_R32_REG(addr, reg) HV_REG_VAL(reg) = HV_R32(addr)
- #define HV_R32_BE_REG(addr, reg) HV_REG_VAL(reg) = HV_R32_BE(addr)
- #define HV_W32_SET_BIT(addr, bit) HV_W32_MASK(addr, 1 << (bit), 1 << (bit))
- #define HV_W32_CLR_BIT(addr, bit) HV_W32_MASK(addr, 1 << (bit), 0x00000000)
- #define HV_R32_GET_BIT(addr, bit) ((HV_R32(addr) >> bit) & 1)
- #define HV_W_FEILD_REG(addr, startbit,endbit, reg) do{ \
- UINT32 _val = HV_R32(addr); \
- if((endbit-startbit) != 31) \
- { \
- UINT32 _mask = ~(0xFFFFFFFF << (endbit - startbit + 1)) << startbit;\
- _val &= ~_mask; \
- _val |= (reg<<startbit)&_mask; \
- HV_W32(addr,_val); \
- } \
- else \
- { \
- HV_W32(addr,reg); \
- } \
- } while (0)
- /** @} */
- VOS_EXTERN_C_END
- #endif
|