The physio is a helper function typically called from character device read and write routines to start I/O on a user process buffer. The maximum amount of data to transfer with each call is determined by dev->si_iosize_max. The physio call converts the I/O request into a strategy request and passes the new request to the drivers strategy routine for processing.
Since uio normally describes user space addresses, physio needs to lock those pages into memory. This is done by calling vmapbuf for the appropriate pages. physio always awaits the completion of the entire requested transfer before returning, unless an error condition is detected earlier.
A break-down of the arguments follows: