#include <assert.h>
#include <gpxe/io.h>
#include <gpxe/efi/efi.h>
#include <gpxe/efi/Protocol/CpuIo.h>
#include <gpxe/efi/efi_io.h>
Go to the source code of this file.
Defines | |
| #define | MAX_PORT_ADDRESS 0xffff |
| Maximum address that can be used for port I/O. | |
| #define | IS_PORT_ADDRESS(io_addr) ( ( ( intptr_t ) (io_addr) ) <= MAX_PORT_ADDRESS ) |
| Determine whether or not address is a port I/O address. | |
Functions | |
| FILE_LICENCE (GPL2_OR_LATER) | |
| EFI_REQUIRE_PROTOCOL (EFI_CPU_IO_PROTOCOL,&cpu_io) | |
| static EFI_CPU_IO_PROTOCOL_WIDTH | efi_width (size_t size) |
| Determine EFI CPU I/O width code. | |
| unsigned long long | efi_ioread (volatile void *io_addr, size_t size) |
| Read from device. | |
| void | efi_iowrite (unsigned long long data, volatile void *io_addr, size_t size) |
| Write to device. | |
| void | efi_ioreads (volatile void *io_addr, void *data, size_t size, unsigned int count) |
| String read from device. | |
| void | efi_iowrites (volatile void *io_addr, const void *data, size_t size, unsigned int count) |
| String write to device. | |
| static void | efi_iodelay (void) |
| Wait for I/O-mapped operation to complete. | |
| PROVIDE_IOAPI_INLINE (efi, phys_to_bus) | |
| PROVIDE_IOAPI_INLINE (efi, bus_to_phys) | |
| PROVIDE_IOAPI_INLINE (efi, ioremap) | |
| PROVIDE_IOAPI_INLINE (efi, iounmap) | |
| PROVIDE_IOAPI_INLINE (efi, io_to_bus) | |
| PROVIDE_IOAPI_INLINE (efi, readb) | |
| PROVIDE_IOAPI_INLINE (efi, readw) | |
| PROVIDE_IOAPI_INLINE (efi, readl) | |
| PROVIDE_IOAPI_INLINE (efi, readq) | |
| PROVIDE_IOAPI_INLINE (efi, writeb) | |
| PROVIDE_IOAPI_INLINE (efi, writew) | |
| PROVIDE_IOAPI_INLINE (efi, writel) | |
| PROVIDE_IOAPI_INLINE (efi, writeq) | |
| PROVIDE_IOAPI_INLINE (efi, inb) | |
| PROVIDE_IOAPI_INLINE (efi, inw) | |
| PROVIDE_IOAPI_INLINE (efi, inl) | |
| PROVIDE_IOAPI_INLINE (efi, outb) | |
| PROVIDE_IOAPI_INLINE (efi, outw) | |
| PROVIDE_IOAPI_INLINE (efi, outl) | |
| PROVIDE_IOAPI_INLINE (efi, insb) | |
| PROVIDE_IOAPI_INLINE (efi, insw) | |
| PROVIDE_IOAPI_INLINE (efi, insl) | |
| PROVIDE_IOAPI_INLINE (efi, outsb) | |
| PROVIDE_IOAPI_INLINE (efi, outsw) | |
| PROVIDE_IOAPI_INLINE (efi, outsl) | |
| PROVIDE_IOAPI (efi, iodelay, efi_iodelay) | |
| PROVIDE_IOAPI_INLINE (efi, mb) | |
Variables | |
| static EFI_CPU_IO_PROTOCOL * | cpu_io |
| CPU I/O protocol. | |
Definition in file efi_io.c.
| #define MAX_PORT_ADDRESS 0xffff |
| #define IS_PORT_ADDRESS | ( | io_addr | ) | ( ( ( intptr_t ) (io_addr) ) <= MAX_PORT_ADDRESS ) |
Determine whether or not address is a port I/O address.
| io_addr | I/O address | |
| is_port | I/O address is a port I/O address |
Definition at line 46 of file efi_io.c.
Referenced by efi_ioread(), efi_ioreads(), efi_iowrite(), and efi_iowrites().
| FILE_LICENCE | ( | GPL2_OR_LATER | ) |
| EFI_REQUIRE_PROTOCOL | ( | EFI_CPU_IO_PROTOCOL | , | |
| & | cpu_io | |||
| ) |
| static EFI_CPU_IO_PROTOCOL_WIDTH efi_width | ( | size_t | size | ) | [static] |
Determine EFI CPU I/O width code.
| size | Size of value |
| width | EFI width code |
Definition at line 60 of file efi_io.c.
References assert, EfiCpuIoWidthFifoUint16, EfiCpuIoWidthFifoUint32, EfiCpuIoWidthFifoUint64, EfiCpuIoWidthFifoUint8, and EfiCpuIoWidthMaximum.
Referenced by efi_ioread(), efi_ioreads(), efi_iowrite(), and efi_iowrites().
00060 { 00061 switch ( size ) { 00062 case 1 : return EfiCpuIoWidthFifoUint8; 00063 case 2 : return EfiCpuIoWidthFifoUint16; 00064 case 4 : return EfiCpuIoWidthFifoUint32; 00065 case 8 : return EfiCpuIoWidthFifoUint64; 00066 default : 00067 assert ( 0 ); 00068 /* I wonder what this will actually do... */ 00069 return EfiCpuIoWidthMaximum; 00070 } 00071 }
| unsigned long long efi_ioread | ( | volatile void * | io_addr, | |
| size_t | size | |||
| ) |
Read from device.
| io_addr | I/O address | |
| size | Size of value |
| data | Value read |
Definition at line 80 of file efi_io.c.
References DBG, efi_strerror(), efi_width(), _EFI_CPU_IO_PROTOCOL::Io, IS_PORT_ADDRESS, _EFI_CPU_IO_PROTOCOL::Mem, and EFI_CPU_IO_PROTOCOL_ACCESS::Read.
00080 { 00081 EFI_CPU_IO_PROTOCOL_IO_MEM read; 00082 unsigned long long data = 0; 00083 EFI_STATUS efirc; 00084 00085 read = ( IS_PORT_ADDRESS ( io_addr ) ? 00086 cpu_io->Io.Read : cpu_io->Mem.Read ); 00087 00088 if ( ( efirc = read ( cpu_io, efi_width ( size ), 00089 ( intptr_t ) io_addr, 1, 00090 ( void * ) &data ) ) != 0 ) { 00091 DBG ( "EFI I/O read at %p failed: %s\n", 00092 io_addr, efi_strerror ( efirc ) ); 00093 return -1ULL; 00094 } 00095 00096 return data; 00097 }
| void efi_iowrite | ( | unsigned long long | data, | |
| volatile void * | io_addr, | |||
| size_t | size | |||
| ) |
Write to device.
| data | Value to write | |
| io_addr | I/O address | |
| size | Size of value |
Definition at line 106 of file efi_io.c.
References DBG, efi_strerror(), efi_width(), _EFI_CPU_IO_PROTOCOL::Io, IS_PORT_ADDRESS, _EFI_CPU_IO_PROTOCOL::Mem, and EFI_CPU_IO_PROTOCOL_ACCESS::Write.
00107 { 00108 EFI_CPU_IO_PROTOCOL_IO_MEM write; 00109 EFI_STATUS efirc; 00110 00111 write = ( IS_PORT_ADDRESS ( io_addr ) ? 00112 cpu_io->Io.Write : cpu_io->Mem.Write ); 00113 00114 if ( ( efirc = write ( cpu_io, efi_width ( size ), 00115 ( intptr_t ) io_addr, 1, 00116 ( void * ) &data ) ) != 0 ) { 00117 DBG ( "EFI I/O write at %p failed: %s\n", 00118 io_addr, efi_strerror ( efirc ) ); 00119 } 00120 }
| void efi_ioreads | ( | volatile void * | io_addr, | |
| void * | data, | |||
| size_t | size, | |||
| unsigned int | count | |||
| ) |
String read from device.
| io_addr | I/O address | |
| data | Data buffer | |
| size | Size of values | |
| count | Number of values to read |
Definition at line 130 of file efi_io.c.
References DBG, efi_strerror(), efi_width(), _EFI_CPU_IO_PROTOCOL::Io, IS_PORT_ADDRESS, _EFI_CPU_IO_PROTOCOL::Mem, and EFI_CPU_IO_PROTOCOL_ACCESS::Read.
00131 { 00132 EFI_CPU_IO_PROTOCOL_IO_MEM read; 00133 EFI_STATUS efirc; 00134 00135 read = ( IS_PORT_ADDRESS ( io_addr ) ? 00136 cpu_io->Io.Read : cpu_io->Mem.Read ); 00137 00138 if ( ( efirc = read ( cpu_io, efi_width ( size ), 00139 ( intptr_t ) io_addr, count, 00140 ( void * ) data ) ) != 0 ) { 00141 DBG ( "EFI I/O string read at %p failed: %s\n", 00142 io_addr, efi_strerror ( efirc ) ); 00143 } 00144 }
| void efi_iowrites | ( | volatile void * | io_addr, | |
| const void * | data, | |||
| size_t | size, | |||
| unsigned int | count | |||
| ) |
String write to device.
| io_addr | I/O address | |
| data | Data buffer | |
| size | Size of values | |
| count | Number of values to write |
Definition at line 154 of file efi_io.c.
References DBG, efi_strerror(), efi_width(), _EFI_CPU_IO_PROTOCOL::Io, IS_PORT_ADDRESS, _EFI_CPU_IO_PROTOCOL::Mem, and EFI_CPU_IO_PROTOCOL_ACCESS::Write.
00155 { 00156 EFI_CPU_IO_PROTOCOL_IO_MEM write; 00157 EFI_STATUS efirc; 00158 00159 write = ( IS_PORT_ADDRESS ( io_addr ) ? 00160 cpu_io->Io.Write : cpu_io->Mem.Write ); 00161 00162 if ( ( efirc = write ( cpu_io, efi_width ( size ), 00163 ( intptr_t ) io_addr, count, 00164 ( void * ) data ) ) != 0 ) { 00165 DBG ( "EFI I/O write at %p failed: %s\n", 00166 io_addr, efi_strerror ( efirc ) ); 00167 } 00168 }
| static void efi_iodelay | ( | void | ) | [static] |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| phys_to_bus | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| bus_to_phys | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| ioremap | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| iounmap | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| io_to_bus | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| readb | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| readw | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| readl | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| readq | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| writeb | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| writew | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| writel | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| writeq | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| inb | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| inw | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| inl | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| outb | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| outw | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| outl | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| insb | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| insw | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| insl | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| outsb | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| outsw | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| outsl | ||||
| ) |
| PROVIDE_IOAPI | ( | efi | , | |
| iodelay | , | |||
| efi_iodelay | ||||
| ) |
| PROVIDE_IOAPI_INLINE | ( | efi | , | |
| mb | ||||
| ) |
EFI_CPU_IO_PROTOCOL* cpu_io [static] |
1.5.7.1