|SEGMAP(9E)||Driver Entry Points||SEGMAP(9E)|
#include <sys/types.h> #include <sys/mman.h> #include <sys/param.h> #include <sys/vm.h> #include <sys/ddi.h> #include <sys/sunddi.h> int prefixsegmap(dev_t dev, off_t off, struct as *asp, caddr_t *addrp, off_t len, unsigned int prot, unsigned int maxprot, unsigned int flags, cred_t *cred_p);
Architecture independent level 2 (DKI only).
The segmap() entry point is an optional routine for character drivers that support memory mapping. The mmap(2) system call, when applied to a character special file, allows device memory to be mapped into user space for direct access by the user application.
Typically, a character driver that needs to support the mmap(2) system call supplies either an devmap(9E) entry point, or both an devmap(9E) and a segmap() entry point routine (see the devmap(9E) reference page). If no segmap() entry point is provided for the driver, devmap_setup(9F) is used as a default.
A driver for a memory-mapped device would provide a segmap() entry point if it:
The responsibilities of a segmap() entry point are:
The segmap() routine should return 0 if the driver is successful in performing the memory map of its device address space into the specified address space.
The segmap() must return an error number on failure. For example, valid error numbers would be ENXIO if the offset/length pair specified exceeds the limits of the device memory, or EINVAL if the driver detects an invalid type of mapping attempted.
If one of the mapping routines ddi_devmap_segmap() or devmap_setup()fails, you must return the error number returned by the respective routine.
Writing Device Drivers
|January 14, 1997||OmniOS|