* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/kern/kern_xio.c,v 1.14 2007/06/29 05:09:15 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_xio.c,v 1.15 2007/08/13 17:20:04 dillon Exp $
*/
/*
* Kernel XIO interface. An initialized XIO is basically a collection of
}
/*
+ * Initialize an XIO given an array of vm_page pointers.
+ */
+int
+xio_init_pages(xio_t xio, struct vm_page **mbase, int npages, int xflags)
+{
+ int i;
+
+ KKASSERT(npages <= XIO_INTERNAL_PAGES);
+
+ xio->xio_flags = xflags;
+ xio->xio_offset = 0;
+ xio->xio_bytes = 0;
+ xio->xio_pages = xio->xio_internal_pages;
+ xio->xio_npages = npages;
+ xio->xio_error = 0;
+ crit_enter();
+ for (i = 0; i < npages; ++i) {
+ vm_page_hold(mbase[i]);
+ xio->xio_pages[i] = mbase[i];
+ }
+ crit_exit();
+ return(0);
+}
+
+/*
* Cleanup an XIO so it can be destroyed. The pages associated with the
* XIO are released.
*/
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/sys/xio.h,v 1.9 2007/06/29 05:09:14 dillon Exp $
+ * $DragonFly: src/sys/sys/xio.h,v 1.10 2007/08/13 17:20:05 dillon Exp $
*/
/*
void xio_init(xio_t xio);
int xio_init_ubuf(xio_t xio, void *ubase, size_t ubytes, int vmprot);
int xio_init_kbuf(xio_t xio, void *kbase, size_t kbytes);
+int xio_init_pages(xio_t xio, struct vm_page **mbase, int npages, int xflags);
void xio_release(xio_t xio);
int xio_uio_copy(xio_t xio, int uoffset, struct uio *uio, int *sizep);
int xio_copy_xtou(xio_t xio, int uoffset, void *uptr, int bytes);