s390_pci_mmio_write, s390_pci_mmio_read - transfer data to/from PCI MMIO memory
page
Standard C library (
libc,
-lc)
#include <sys/syscall.h> /* Definition of SYS_* constants */
#include <unistd.h>
int syscall(SYS_s390_pci_mmio_write, unsigned long mmio_addr,
const void user_buffer[.length], size_t length);
int syscall(SYS_s390_pci_mmio_read, unsigned long mmio_addr,
void user_buffer[.length], size_t length);
Note: glibc provides no wrappers for these system calls, necessitating
the use of
syscall(2).
The
s390_pci_mmio_write() system call writes
length bytes of data
from the user-space buffer
user_buffer to the PCI MMIO memory location
specified by
mmio_addr. The
s390_pci_mmio_read() system call
reads
length bytes of data from the PCI MMIO memory location specified
by
mmio_addr to the user-space buffer
user_buffer.
These system calls must be used instead of the simple assignment or
data-transfer operations that are used to access the PCI MMIO memory areas
mapped to user space on the Linux System z platform. The address specified by
mmio_addr must belong to a PCI MMIO memory page mapping in the caller's
address space, and the data being written or read must not cross a page
boundary. The
length value cannot be greater than the system page size.
On success,
s390_pci_mmio_write() and
s390_pci_mmio_read() return
0. On failure, -1 is returned and
errno is set to indicate the error.
- EFAULT
- The address in mmio_addr is invalid.
- EFAULT
-
user_buffer does not point to a valid location in
the caller's address space.
- EINVAL
- Invalid length argument.
- ENODEV
- PCI support is not enabled.
- ENOMEM
- Insufficient memory.
These system calls are available since Linux 3.19.
This Linux-specific system call is available only on the s390 architecture. The
required PCI support is available beginning with System z EC12.
syscall(2)