HPUX iomap[7]

iomap(7) Series 300/400 Only iomap(7)
NAME
iomap - physical address mapping
SYNOPSIS
#include <sys/iomap.h>
DESCRIPTION
The iomap mechanism allows the mapping (thus direct access) of
physical addresses into the user process address space. For most
Series 300/400 computers, the physical address space begins at
0x000000 and extends to 0xffffff.
The special (device) files for iomap devices are character special
files with major number 10.
The minor number for iomap devices is of the form:
0xAAAANN
where AAAA is a two-byte address, and NN is a one-byte field.
The address portion of the minor number is formed by dividing the
physical address by 65536. NN x 65536 is the size of the region to be
mapped. For example, the minor number for a device at 0x720000 that
occupies 128 Kbytes is 0x007202.
Access to iomap devices is controlled by file permissions set on the
character special file.
Multiple processes can concurrently have a single iomap device opened
and mapped. It is the responsibility of the processes to synchronize
their access.
No read() or write() system calls are supported by the iomap driver.
The ioctl() function is used to control the iomap device. The
following ioctl() requests are defined in <iomap.h>:
IOMAPMAP Map the iomap device into user address space
at the location specified by the pointer to
which the (void **) third argument to ioctl()
points. If the argument points to a variable
containing a null pointer, the system selects
an appropriate address. ioctl() then returns
the user address where the device was mapped,
storing it at the address pointed to by the
third argument (see EXAMPLES below).
Multiple processes can concurrently have the
same iomap device mapped.
Hewlett-Packard Company - 1 - HP-UX Release 9.0: August 1992
iomap(7) Series 300/400 Only iomap(7)
IOMAPUNMAP Unmap the iomap device from the user address
space.
close() shuts down the file descriptor associated with the iomap
device. If the close is for the last system wide open on the device,
the iomap device is also unmapped from the user address space;
otherwise it is left mapped into the user address space (see
IOMAPUNMAP above).
One shared memory descriptor (see shmget(2)) is used for each iomap
device. Shared memory descriptors obtained in this way are usable
only through the iomap interface. Consequently, attempts to access
them through shared memory routines (see shmat(2), shmctl(2),
shmdt(2), etc.) result in EACCES errors.
WARNING
Be extremely careful when creating and using iomap devices.
Inappropriate accesses to I/O devices or RAM can result in a system
crash.
ERRORS
[EINVAL] The address field was out of range, or the ioctl
request was invalid.
[ENOMEM] Not enough memory could be allocated for the mapping.
[ENODEV] Read and write calls are unsupported.
[ENXIO] No such device at the address specified by the minor
number.
[ENOSPC] Required resources for mapping could not be allocated.
[ENOTTY] Inappropriate ioctl request for this device type;
fildes is not a file descriptor for an iomap device
file.
EXAMPLES
Consider the following code fragment:
#include <sys/iomap.h>
...
int fildes;
void *addr;
...
addr = REQUESTED_ADDRESS;
(void) ioctl(fildes, IOMAPMAP, &addr);
(void) printf("actual address = 0x%x\n", addr);
Hewlett-Packard Company - 2 - HP-UX Release 9.0: August 1992
iomap(7) Series 300/400 Only iomap(7)
where fildes is an open file descriptor for the device special file
and REQUESTED_ADDRESS is the address originally requested by the
program.
If addr is a null pointer, the system selects a suitable address then
returns the selected address in addr.
If the value in addr is not a null pointer, it is used as a specified
address for allocating memory. If the specified address cannot be
used, an error is returned (see ERRORS).
SEE ALSO
mknod(1M).
Hewlett-Packard Company - 3 - HP-UX Release 9.0: August 1992