00001 #ifndef _GPXE_EFI_IO_H
00002 #define _GPXE_EFI_IO_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 FILE_LICENCE ( GPL2_OR_LATER );
00014
00015 #ifdef IOAPI_EFI
00016 #define IOAPI_PREFIX_efi
00017 #else
00018 #define IOAPI_PREFIX_efi __efi_
00019 #endif
00020
00021 extern unsigned long long efi_ioread ( volatile void *io_addr,
00022 size_t size );
00023 extern void efi_iowrite ( unsigned long long data, volatile void *io_addr,
00024 size_t size );
00025 extern void efi_ioreads ( volatile void *io_addr, void *data,
00026 size_t size, unsigned int count );
00027 extern void efi_iowrites ( volatile void *io_addr, const void *data,
00028 size_t size, unsigned int count );
00029
00030
00031
00032
00033
00034
00035
00036
00037 static inline __always_inline unsigned long
00038 IOAPI_INLINE ( efi, phys_to_bus ) ( unsigned long phys_addr ) {
00039 return phys_addr;
00040 }
00041
00042 static inline __always_inline unsigned long
00043 IOAPI_INLINE ( efi, bus_to_phys ) ( unsigned long bus_addr ) {
00044 return bus_addr;
00045 }
00046
00047 static inline __always_inline void *
00048 IOAPI_INLINE ( efi, ioremap ) ( unsigned long bus_addr, size_t len __unused ) {
00049 return ( ( void * ) bus_addr );
00050 }
00051
00052 static inline __always_inline void
00053 IOAPI_INLINE ( efi, iounmap ) ( volatile const void *io_addr __unused ) {
00054
00055 }
00056
00057 static inline __always_inline unsigned long
00058 IOAPI_INLINE ( efi, io_to_bus ) ( volatile const void *io_addr ) {
00059 return ( ( unsigned long ) io_addr );
00060 }
00061
00062
00063
00064
00065
00066
00067 static inline __always_inline uint8_t
00068 IOAPI_INLINE ( efi, readb ) ( volatile uint8_t *io_addr ) {
00069 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00070 }
00071
00072 static inline __always_inline uint16_t
00073 IOAPI_INLINE ( efi, readw ) ( volatile uint16_t *io_addr ) {
00074 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00075 }
00076
00077 static inline __always_inline uint32_t
00078 IOAPI_INLINE ( efi, readl ) ( volatile uint32_t *io_addr ) {
00079 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00080 }
00081
00082 static inline __always_inline uint64_t
00083 IOAPI_INLINE ( efi, readq ) ( volatile uint64_t *io_addr ) {
00084 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00085 }
00086
00087 static inline __always_inline void
00088 IOAPI_INLINE ( efi, writeb ) ( uint8_t data, volatile uint8_t *io_addr ) {
00089 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00090 }
00091
00092 static inline __always_inline void
00093 IOAPI_INLINE ( efi, writew ) ( uint16_t data, volatile uint16_t *io_addr ) {
00094 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00095 }
00096
00097 static inline __always_inline void
00098 IOAPI_INLINE ( efi, writel ) ( uint32_t data, volatile uint32_t *io_addr ) {
00099 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00100 }
00101
00102 static inline __always_inline void
00103 IOAPI_INLINE ( efi, writeq ) ( uint64_t data, volatile uint64_t *io_addr ) {
00104 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00105 }
00106
00107 static inline __always_inline uint8_t
00108 IOAPI_INLINE ( efi, inb ) ( volatile uint8_t *io_addr ) {
00109 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00110 }
00111
00112 static inline __always_inline uint16_t
00113 IOAPI_INLINE ( efi, inw ) ( volatile uint16_t *io_addr ) {
00114 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00115 }
00116
00117 static inline __always_inline uint32_t
00118 IOAPI_INLINE ( efi, inl ) ( volatile uint32_t *io_addr ) {
00119 return efi_ioread ( io_addr, sizeof ( *io_addr ) );
00120 }
00121
00122 static inline __always_inline void
00123 IOAPI_INLINE ( efi, outb ) ( uint8_t data, volatile uint8_t *io_addr ) {
00124 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00125 }
00126
00127 static inline __always_inline void
00128 IOAPI_INLINE ( efi, outw ) ( uint16_t data, volatile uint16_t *io_addr ) {
00129 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00130 }
00131
00132 static inline __always_inline void
00133 IOAPI_INLINE ( efi, outl ) ( uint32_t data, volatile uint32_t *io_addr ) {
00134 efi_iowrite ( data, io_addr, sizeof ( *io_addr ) );
00135 }
00136
00137 static inline __always_inline void
00138 IOAPI_INLINE ( efi, insb ) ( volatile uint8_t *io_addr, uint8_t *data,
00139 unsigned int count ) {
00140 efi_ioreads ( io_addr, data, sizeof ( *io_addr ), count );
00141 }
00142
00143 static inline __always_inline void
00144 IOAPI_INLINE ( efi, insw ) ( volatile uint16_t *io_addr, uint16_t *data,
00145 unsigned int count ) {
00146 efi_ioreads ( io_addr, data, sizeof ( *io_addr ), count );
00147 }
00148
00149 static inline __always_inline void
00150 IOAPI_INLINE ( efi, insl ) ( volatile uint32_t *io_addr, uint32_t *data,
00151 unsigned int count ) {
00152 efi_ioreads ( io_addr, data, sizeof ( *io_addr ), count );
00153 }
00154
00155 static inline __always_inline void
00156 IOAPI_INLINE ( efi, outsb ) ( volatile uint8_t *io_addr, const uint8_t *data,
00157 unsigned int count ) {
00158 efi_iowrites ( io_addr, data, sizeof ( *io_addr ), count );
00159 }
00160
00161 static inline __always_inline void
00162 IOAPI_INLINE ( efi, outsw ) ( volatile uint16_t *io_addr, const uint16_t *data,
00163 unsigned int count ) {
00164 efi_iowrites ( io_addr, data, sizeof ( *io_addr ), count );
00165 }
00166
00167 static inline __always_inline void
00168 IOAPI_INLINE ( efi, outsl ) ( volatile uint32_t *io_addr, const uint32_t *data,
00169 unsigned int count ) {
00170 efi_iowrites ( io_addr, data, sizeof ( *io_addr ), count );
00171 }
00172
00173 static inline __always_inline void
00174 IOAPI_INLINE ( efi, mb ) ( void ) {
00175
00176
00177
00178 }
00179
00180 #endif