Architecture independent level 1 (DDI/DKI).
The contents of uio structures passed to the driver through the entry points should not be written by the driver. The uiomove(9F) function takes care of all overhead related to maintaining the state of the uio structure.
uio structures allocated by the driver should be initialized to zero before use (by bzero(9F) , kmem_zalloc(9F) , or an equivalent).
iovec_t | *uio_iov; | /* pointer to the start of the iovec */ |
/* list for the uio structure */ | ||
int | uio_iovcnt; | /* the number of iovecs in the list */ |
off_t | uio_offset; | /* 32-bit offset into file where data is */ |
/* transferred from or to. See NOTES. */ | ||
offset_t | uio_loffset; | /* 64-bit offset into file where data is */ |
/* transferred from or to. See NOTES. */ | ||
uio_seg_t | uio_segflg; | /* identifies the type of I/O transfer: */ |
/* UIO_SYSSPACE: kernel <-> kernel */ | ||
/* UIO_USERSPACE: kernel <-> user */ | ||
short | uio_fmode; | /* file mode flags (not driver setable) */ |
daddr_t | uio_limit; | /* 32-bit ulimit for file (maximum block */ |
/* offset). not driver setable. See NOTES. */ | ||
diskaddr_t | uio_llimit; | /* 64-bit ulimit for file (maximum block */ |
/* offset). not driver setable. See NOTES. */ | ||
int | uio_resid; | /* residual count */ |
The uio_iov member is a pointer to the beginning of the iovec(9S) list for the uio. When the uio structure is passed to the driver through an entry point, the driver should not set uio_iov. When the uio structure is created by the driver, uio_iov should be initialized by the driver and not written to afterward.
Only one of uio_offset or uio_loffset should be interpreted by the driver. Which field the driver interprets is dependent upon the settings in the cb_ops(9S) structure.
Only one of uio_limit or uio_llimit should be interpreted by the driver. Which field the driver interprets is dependent upon the settings in the cb_ops(9S) structure.