iPXE
dummy_pio.h File Reference

Dummy PIO reads and writes up to 32 bits. More...

#include <string.h>

Go to the source code of this file.

Macros

#define DUMMY_INX(_prefix, _suffix, _type)
#define DUMMY_OUTX(_prefix, _suffix, _type)
#define DUMMY_IOREADX(_prefix, _width, _suffix, _type)
#define DUMMY_IOWRITEX(_prefix, _width, _suffix, _type)
#define DUMMY_IODELAY(_prefix)
#define DUMMY_PIO(_prefix)
#define PROVIDE_DUMMY_PIO(_prefix)

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)

Detailed Description

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.

Definition in file dummy_pio.h.

Macro Definition Documentation

◆ DUMMY_INX

#define DUMMY_INX ( _prefix,
_suffix,
_type )
Value:
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 ) ); \
}
__be32 in[4]
Definition CIB_PRM.h:7
uint8_t data[48]
Additional event data.
Definition ena.h:11
char _prefix[]
Start address of the iPXE image.
#define __always_inline
Declare a function to be always inline.
Definition compiler.h:611
#define __unused
Declare a variable or data structure as unused.
Definition compiler.h:573
static unsigned int count
Number of entries.
Definition dwmac.h:220

Definition at line 19 of file dummy_pio.h.

19#define DUMMY_INX( _prefix, _suffix, _type ) \
20static inline __always_inline _type \
21IOAPI_INLINE ( _prefix, in ## _suffix ) ( volatile _type *io_addr __unused) { \
22 return ~( (_type) 0 ); \
23} \
24static inline __always_inline void \
25IOAPI_INLINE ( _prefix, ins ## _suffix ) ( volatile _type *io_addr __unused, \
26 _type *data, unsigned int count ) {\
27 memset ( data, 0xff, count * sizeof ( *data ) ); \
28}

◆ DUMMY_OUTX

#define DUMMY_OUTX ( _prefix,
_suffix,
_type )
Value:
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 */ \
}
__be32 out[4]
Definition CIB_PRM.h:8

Definition at line 30 of file dummy_pio.h.

30#define DUMMY_OUTX( _prefix, _suffix, _type ) \
31static inline __always_inline void \
32IOAPI_INLINE ( _prefix, out ## _suffix ) ( _type data __unused, \
33 volatile _type *io_addr __unused ){\
34 /* Do nothing */ \
35} \
36static inline __always_inline void \
37IOAPI_INLINE ( _prefix, outs ## _suffix ) ( volatile _type *io_addr __unused, \
38 const _type *data __unused, \
39 unsigned int count __unused ) { \
40 /* Do nothing */ \
41}

◆ DUMMY_IOREADX

#define DUMMY_IOREADX ( _prefix,
_width,
_suffix,
_type )
Value:
static inline __always_inline _type \
IOAPI_INLINE ( _prefix, ioread ## _width ) ( volatile _type *io_addr ) { \
return IOAPI_INLINE ( _prefix, read ## _suffix ) ( io_addr ); \
}
#define IOAPI_INLINE(_subsys, _api_func)
Calculate static inline I/O API function name.
Definition io.h:40
struct option_descriptor read[1]
Definition nvo_cmd.c:116

Definition at line 43 of file dummy_pio.h.

43#define DUMMY_IOREADX( _prefix, _width, _suffix, _type ) \
44static inline __always_inline _type \
45IOAPI_INLINE ( _prefix, ioread ## _width ) ( volatile _type *io_addr ) { \
46 return IOAPI_INLINE ( _prefix, read ## _suffix ) ( io_addr ); \
47}

◆ DUMMY_IOWRITEX

#define DUMMY_IOWRITEX ( _prefix,
_width,
_suffix,
_type )
Value:
static inline __always_inline void \
IOAPI_INLINE ( _prefix, iowrite ## _width ) ( _type data, \
volatile _type *io_addr ) { \
IOAPI_INLINE ( _prefix, write ## _suffix ) ( data, io_addr ); \
}
device nvs write
Definition threewire.h:62

Definition at line 49 of file dummy_pio.h.

49#define DUMMY_IOWRITEX( _prefix, _width, _suffix, _type ) \
50static inline __always_inline void \
51IOAPI_INLINE ( _prefix, iowrite ## _width ) ( _type data, \
52 volatile _type *io_addr ) { \
53 IOAPI_INLINE ( _prefix, write ## _suffix ) ( data, io_addr ); \
54}

◆ DUMMY_IODELAY

#define DUMMY_IODELAY ( _prefix)
Value:
static inline __always_inline void \
IOAPI_INLINE ( _prefix, iodelay ) ( void ) { \
/* Nothing to do */ \
}
void iodelay(void)
Slow down I/O.

Definition at line 56 of file dummy_pio.h.

56#define DUMMY_IODELAY( _prefix ) \
57static inline __always_inline void \
58IOAPI_INLINE ( _prefix, iodelay ) ( void ) { \
59 /* Nothing to do */ \
60}

◆ DUMMY_PIO

#define DUMMY_PIO ( _prefix)
Value:
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_IOREADX ( _prefix, 8, b, uint8_t ); \
DUMMY_IOREADX ( _prefix, 16, w, uint16_t ); \
DUMMY_IOREADX ( _prefix, 32, l, uint32_t ); \
DUMMY_IOWRITEX ( _prefix, 8, b, uint8_t ); \
DUMMY_IOWRITEX ( _prefix, 16, w, uint16_t ); \
DUMMY_IOWRITEX ( _prefix, 32, l, uint32_t ); \
DUMMY_IODELAY ( _prefix );
unsigned short uint16_t
Definition stdint.h:11
unsigned int uint32_t
Definition stdint.h:12
unsigned char uint8_t
Definition stdint.h:10
#define DUMMY_INX(_prefix, _suffix, _type)
Definition dummy_pio.h:19
uint8_t l
Definition registers.h:1

Definition at line 62 of file dummy_pio.h.

62#define DUMMY_PIO( _prefix ) \
63 DUMMY_INX ( _prefix, b, uint8_t ); \
64 DUMMY_INX ( _prefix, w, uint16_t ); \
65 DUMMY_INX ( _prefix, l, uint32_t ); \
66 DUMMY_OUTX ( _prefix, b, uint8_t ); \
67 DUMMY_OUTX ( _prefix, w, uint16_t ); \
68 DUMMY_OUTX ( _prefix, l, uint32_t ); \
69 DUMMY_IOREADX ( _prefix, 8, b, uint8_t ); \
70 DUMMY_IOREADX ( _prefix, 16, w, uint16_t ); \
71 DUMMY_IOREADX ( _prefix, 32, l, uint32_t ); \
72 DUMMY_IOWRITEX ( _prefix, 8, b, uint8_t ); \
73 DUMMY_IOWRITEX ( _prefix, 16, w, uint16_t ); \
74 DUMMY_IOWRITEX ( _prefix, 32, l, uint32_t ); \
75 DUMMY_IODELAY ( _prefix );

◆ PROVIDE_DUMMY_PIO

#define PROVIDE_DUMMY_PIO ( _prefix)
Value:
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, ioread8 ); \
PROVIDE_IOAPI_INLINE ( _prefix, ioread16 ); \
PROVIDE_IOAPI_INLINE ( _prefix, ioread32 ); \
PROVIDE_IOAPI_INLINE ( _prefix, iowrite8 ); \
PROVIDE_IOAPI_INLINE ( _prefix, iowrite16 ); \
PROVIDE_IOAPI_INLINE ( _prefix, iowrite32 ); \
PROVIDE_IOAPI_INLINE ( _prefix, iodelay );
#define inw(io_addr)
Definition io.h:292
#define outb(data, io_addr)
Definition io.h:310
#define ioread16(io_addr)
Definition io.h:350
#define outw(data, io_addr)
Definition io.h:320
#define inl(io_addr)
Definition io.h:301
#define outl(data, io_addr)
Definition io.h:330
#define inb(io_addr)
Definition io.h:283
#define ioread32(io_addr)
Definition io.h:360
#define iowrite8(data, io_addr)
Definition io.h:370
#define iowrite16(data, io_addr)
Definition io.h:380
#define ioread8(io_addr)
Definition io.h:340
#define PROVIDE_IOAPI_INLINE(_subsys, _api_func)
Provide a static inline I/O API implementation.
Definition io.h:59
#define iowrite32(data, io_addr)
Definition io.h:390

Definition at line 77 of file dummy_pio.h.

77#define PROVIDE_DUMMY_PIO( _prefix ) \
78 PROVIDE_IOAPI_INLINE ( _prefix, inb ); \
79 PROVIDE_IOAPI_INLINE ( _prefix, inw ); \
80 PROVIDE_IOAPI_INLINE ( _prefix, inl ); \
81 PROVIDE_IOAPI_INLINE ( _prefix, outb ); \
82 PROVIDE_IOAPI_INLINE ( _prefix, outw ); \
83 PROVIDE_IOAPI_INLINE ( _prefix, outl ); \
84 PROVIDE_IOAPI_INLINE ( _prefix, ioread8 ); \
85 PROVIDE_IOAPI_INLINE ( _prefix, ioread16 ); \
86 PROVIDE_IOAPI_INLINE ( _prefix, ioread32 ); \
87 PROVIDE_IOAPI_INLINE ( _prefix, iowrite8 ); \
88 PROVIDE_IOAPI_INLINE ( _prefix, iowrite16 ); \
89 PROVIDE_IOAPI_INLINE ( _prefix, iowrite32 ); \
90 PROVIDE_IOAPI_INLINE ( _prefix, iodelay );

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )