18 #ifndef EPICSMMIODEF_H 19 #define EPICSMMIODEF_H 22 #include <epicsEndian.h> 23 #include <compilerSpecific.h> 24 #include <libComAPI.h> 28 # define INLINE inline 38 static EPICS_ALWAYS_INLINE
40 ioread8(
volatile void* addr)
42 return *(
volatile epicsUInt8*)(addr);
47 static EPICS_ALWAYS_INLINE
49 iowrite8(
volatile void* addr, epicsUInt8 val)
51 *(
volatile epicsUInt8*)(addr) = val;
57 static EPICS_ALWAYS_INLINE
59 nat_ioread16(
volatile void* addr)
61 return *(
volatile epicsUInt16*)(addr);
67 static EPICS_ALWAYS_INLINE
69 nat_iowrite16(
volatile void* addr, epicsUInt16 val)
71 *(
volatile epicsUInt16*)(addr) = val;
77 static EPICS_ALWAYS_INLINE
79 nat_ioread32(
volatile void* addr)
81 return *(
volatile epicsUInt32*)(addr);
87 static EPICS_ALWAYS_INLINE
89 nat_iowrite32(
volatile void* addr, epicsUInt32 val)
91 *(
volatile epicsUInt32*)(addr) = val;
94 #if EPICS_BYTE_ORDER == EPICS_ENDIAN_BIG 100 static EPICS_ALWAYS_INLINE
102 bswap16(epicsUInt16
value)
104 return (((epicsUInt16)(value) & 0x00ff) << 8) |
105 (((epicsUInt16)(value) & 0xff00) >> 8);
108 static EPICS_ALWAYS_INLINE
110 bswap32(epicsUInt32 value)
112 return (((epicsUInt32)(value) & 0x000000ff) << 24) |
113 (((epicsUInt32)(value) & 0x0000ff00) << 8) |
114 (((epicsUInt32)(value) & 0x00ff0000) >> 8) |
115 (((epicsUInt32)(value) & 0xff000000) >> 24);
118 # define be_ioread16(A) nat_ioread16(A) 119 # define be_ioread32(A) nat_ioread32(A) 120 # define be_iowrite16(A,D) nat_iowrite16(A,D) 121 # define be_iowrite32(A,D) nat_iowrite32(A,D) 123 # define le_ioread16(A) bswap16(nat_ioread16(A)) 124 # define le_ioread32(A) bswap32(nat_ioread32(A)) 125 # define le_iowrite16(A,D) nat_iowrite16(A,bswap16(D)) 126 # define le_iowrite32(A,D) nat_iowrite32(A,bswap32(D)) 130 #elif EPICS_BYTE_ORDER == EPICS_ENDIAN_LITTLE 142 #define bswap16(v) htons(v) 143 #define bswap32(v) htonl(v) 145 # define be_ioread16(A) bswap16(nat_ioread16(A)) 146 # define be_ioread32(A) bswap32(nat_ioread32(A)) 147 # define be_iowrite16(A,D) nat_iowrite16(A,bswap16(D)) 148 # define be_iowrite32(A,D) nat_iowrite32(A,bswap32(D)) 150 # define le_ioread16(A) nat_ioread16(A) 151 # define le_ioread32(A) nat_ioread32(A) 152 # define le_iowrite16(A,D) nat_iowrite16(A,D) 153 # define le_iowrite32(A,D) nat_iowrite32(A,D) 158 # error Unable to determine native byte order 199 #define rbarr() do{}while(0) 203 #define wbarr() do{}while(0) 207 #define rwbarr() do{}while(0)
The core data types used by epics.