mrfioc2  2.3.0
RTEMS/mrfIoOps.h
Go to the documentation of this file.
1 
2 #ifndef MRFIOOPS_H
3 #define MRFIOOPS_H
4 
5 #include <epicsEndian.h>
6 
7 #if defined(_ARCH_PPC) || defined(__PPC__) || defined(__PPC)
8 # include <libcpu/io.h>
9 
10 /*NOTE: All READ/WRITE operations have an implicit read or write barrier */
11 
12 # define ioread8(A) in_8((volatile epicsUInt8*)(A))
13 # define iowrite8(A,D) out_8((volatile epicsUInt8*)(A), D)
14 # define le_ioread16(A) in_le16((volatile epicsUInt16*)(A))
15 # define le_ioread32(A) in_le32((volatile epicsUInt32*)(A))
16 # define le_iowrite16(A,D) out_le16((volatile epicsUInt16*)(A), D)
17 # define le_iowrite32(A,D) out_le32((volatile epicsUInt32*)(A), D)
18 # define be_ioread16(A) in_be16((volatile epicsUInt16*)(A))
19 # define be_ioread32(A) in_be32((volatile epicsUInt32*)(A))
20 # define be_iowrite16(A,D) out_be16((volatile epicsUInt16*)(A), D)
21 # define be_iowrite32(A,D) out_be32((volatile epicsUInt32*)(A), D)
22 
23 # define rbarr() iobarrier_r()
24 # define wbarr() iobarrier_w()
25 # define rwbarr() iobarrier_rw()
26 
27 /* Define native operations */
28 # define nat_ioread16 be_ioread16
29 # define nat_ioread32 be_ioread32
30 # define nat_iowrite16 be_iowrite16
31 # define nat_iowrite32 be_iowrite32
32 
33 #elif defined(i386) ||defined(__i386__) || defined(__i386)
34 
35 /* X86 does not need special handling for read/write width.
36  *
37  * TODO: Memory barriers?
38  */
39 
40 #include "mrfIoOpsDef.h"
41 
42 #else
43 # warning I/O operations not defined for this RTEMS architecture
44 
45 #include "mrfIoOpsDef.h"
46 
47 #endif /* if defined PPC */
48 
49 #endif /* MRFIOOPS_H */