*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->HP-UX 11i man pages -> iomap (7)              


 iomap(7)                                                           iomap(7)

 NAME    [Toc]    [Back]
      iomap - physical I/O address mapping

 SYNOPSIS    [Toc]    [Back]
      #include <sys/iomap.h>

 DESCRIPTION    [Toc]    [Back]
      The iomap mechanism allows the mapping (thus direct access) of
      physical I/O addresses into the user process address space.  For PARISC
 machines, the physical I/O address space begins at 0xf0000000 and
      extends to 0xffffffff.

      The special (device) files for iomap devices are character special
      files using the dynamic major number allocation scheme.

      The minor number for iomap devices is of the form:


      The physical I/O address is formed by prefixing 0xAAAA with 0xF, and
      by appending 0x000 (this forces the I/O address to be page-aligned).
      The size of the region to be mapped is given by the expression M*(2^S)
      4K pages.  For example, the minor number for a device starting at
      0xf4000000 that occupies 64MB is 0x4000e1.

      The iomap driver must be explicitly added to the /stand/system file,
      the kernel rebuilt, and the system subsequently rebooted prior to
      first using iomap.

      I/O space is always mapped with both read and write access rights,
      regardless of the actual permissions on the device special file.

      Multiple processes can have concurrently a single iomap device opened
      and mapped.  It is the responsibility of the processes to synchronize
      their access.

      Successive calls to iomap to map the same I/O space must be identical
      to the first mapping.  Identical mappings have the same address and

      Note that a process can additionally share I/O space (mapped by iomap)
      with a kernel driver.  However, this is only possible if the driver
      maps in the I/O space with user read/write access rights using the
      appropriate driver I/O mapping services.  Any I/O space mapped by
      drivers with kernel read/write access rights cannot be concurrently
      mapped by processes using iomap.

      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>:

 Hewlett-Packard Company            - 1 -   HP-UX 11i Version 2: August 2003

 iomap(7)                                                           iomap(7)

           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.

           IOMAPUNMAP          Unmap the iomap device from the user address

      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).

 WARNING    [Toc]    [Back]
      Be extremely careful when creating and using iomap devices.
      Inappropriate accesses to I/O devices or RAM can result in a system

 ERRORS    [Toc]    [Back]
      [EINVAL]       The address field was out of range, or the ioctl
                     request was invalid.

      [ENOMEM]       Not enough memory could be allocated for the mapping.

      [EBUSY]        Device was already mapped and this mapping was not
                     identical to the initial mapping (same address, size
                     and access rights).

      [ENODEV]       Read and write calls are unsupported.

      [ENXIO]        No such device at the address specified by the minor

      [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

 EXAMPLES    [Toc]    [Back]
      Consider the following code fragment:

 Hewlett-Packard Company            - 2 -   HP-UX 11i Version 2: August 2003

 iomap(7)                                                           iomap(7)

           #include <sys/iomap.h>
           int fildes;
           void *addr;
               addr = REQUESTED_ADDRESS;
               (void) ioctl(fildes, IOMAPMAP, &addr);
               (void) printf("actual address = 0x%x\n", addr);

      where fildes is an open file descriptor for the device special file
      and REQUESTED_ADDRESS is the address originally requested by the

      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    [Toc]    [Back]

 Hewlett-Packard Company            - 3 -   HP-UX 11i Version 2: August 2003
[ Back ]
 Similar pages
Name OS Title
KSEG_TO_PHYS Tru64 General: Converts a kernel-unmapped virtual address to a physical address
copy_to_phys Tru64 General: Copies data from a virtual address to a physical address
svatophys Tru64 General: Converts a system virtual address to a physical address
vtop Tru64 General: Converts any virtual address to a physical address
pmap_extract_and_hold FreeBSD map a virtual address to a physical page
pmap_extract FreeBSD map a virtual address to a physical page
PHYS_TO_KSEG Tru64 General: Converts a physical address to a
pmap_extract Tru64 General: Extracts a physical page address
pmap_change_wiring FreeBSD change physical wiring for a map or virtual address pair
pmap_mincore FreeBSD determine if a virtual address is resident in physical memory
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service