segmap - map device memory into user space
#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).
dev
off
asp
addrp
len
prot
PROT_READ
PROT_WRITE
PROT_EXEC
PROT_USER
PROT_ALL
maxprot
flags
MAP_SHARED
MAP_PRIVATE
cred_p
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.
mmap(2), devmap(9E), devmap_setup(9F), ddi_devmap_segmap(9F), ddi_device_acc_attr(9S)
Writing Device Drivers
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |