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.