summaryrefslogtreecommitdiffstats
path: root/src/include/ipxe/dummy_pio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/ipxe/dummy_pio.h')
-rw-r--r--src/include/ipxe/dummy_pio.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/include/ipxe/dummy_pio.h b/src/include/ipxe/dummy_pio.h
new file mode 100644
index 00000000..1cdabba1
--- /dev/null
+++ b/src/include/ipxe/dummy_pio.h
@@ -0,0 +1,64 @@
+#ifndef _IPXE_DUMMY_PIO_H
+#define _IPXE_DUMMY_PIO_H
+
+/** @file
+ *
+ * Dummy PIO reads and writes up to 32 bits
+ *
+ * There is no common standard for I/O-space access for non-x86 CPU
+ * families, and non-MMIO peripherals are vanishingly rare. Provide
+ * dummy implementations that will allow code to link and should cause
+ * drivers to simply fail to detect hardware at runtime.
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+#define DUMMY_INX( _prefix, _suffix, _type ) \
+static inline __always_inline _type \
+IOAPI_INLINE ( _prefix, in ## _suffix ) ( volatile _type *io_addr __unused) { \
+ return ~( (_type) 0 ); \
+} \
+static inline __always_inline void \
+IOAPI_INLINE ( _prefix, ins ## _suffix ) ( volatile _type *io_addr __unused, \
+ _type *data, unsigned int count ) {\
+ memset ( data, 0xff, count * sizeof ( *data ) ); \
+}
+
+#define DUMMY_OUTX( _prefix, _suffix, _type ) \
+static inline __always_inline void \
+IOAPI_INLINE ( _prefix, out ## _suffix ) ( _type data __unused, \
+ volatile _type *io_addr __unused ){\
+ /* Do nothing */ \
+} \
+static inline __always_inline void \
+IOAPI_INLINE ( _prefix, outs ## _suffix ) ( volatile _type *io_addr __unused, \
+ const _type *data __unused, \
+ unsigned int count __unused ) { \
+ /* Do nothing */ \
+}
+
+#define DUMMY_IODELAY( _prefix ) \
+static inline __always_inline void \
+IOAPI_INLINE ( _prefix, iodelay ) ( void ) { \
+ /* Nothing to do */ \
+}
+
+#define DUMMY_PIO( _prefix ) \
+ DUMMY_INX ( _prefix, b, uint8_t ); \
+ DUMMY_INX ( _prefix, w, uint16_t ); \
+ DUMMY_INX ( _prefix, l, uint32_t ); \
+ DUMMY_OUTX ( _prefix, b, uint8_t ); \
+ DUMMY_OUTX ( _prefix, w, uint16_t ); \
+ DUMMY_OUTX ( _prefix, l, uint32_t ); \
+ DUMMY_IODELAY ( _prefix );
+
+#define PROVIDE_DUMMY_PIO( _prefix ) \
+ PROVIDE_IOAPI_INLINE ( _prefix, inb ); \
+ PROVIDE_IOAPI_INLINE ( _prefix, inw ); \
+ PROVIDE_IOAPI_INLINE ( _prefix, inl ); \
+ PROVIDE_IOAPI_INLINE ( _prefix, outb ); \
+ PROVIDE_IOAPI_INLINE ( _prefix, outw ); \
+ PROVIDE_IOAPI_INLINE ( _prefix, outl ); \
+ PROVIDE_IOAPI_INLINE ( _prefix, iodelay );
+
+#endif /* _IPXE_DUMMY_PIO_H */