* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/kern/kern_xio.c,v 1.13 2007/06/29 00:18:05 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_xio.c,v 1.14 2007/06/29 05:09:15 dillon Exp $
*/
/*
* Kernel XIO interface. An initialized XIO is basically a collection of
{
vm_offset_t addr;
vm_page_t m;
+ vm_page_t m0;
int error;
int i;
int n;
xio->xio_pages = xio->xio_internal_pages;
if ((n = PAGE_SIZE - xio->xio_offset) > ubytes)
n = ubytes;
+ m0 = NULL;
for (i = 0; n && i < XIO_INTERNAL_PAGES; ++i) {
m = vm_fault_page_quick(addr, vmprot, &error);
if (m == NULL)
if ((n = ubytes) > PAGE_SIZE)
n = PAGE_SIZE;
addr += PAGE_SIZE;
+
+ /*
+ * Check linearity, used by syslink to memory map DMA buffers.
+ */
+ if (flags & XIOF_VMLINEAR) {
+ if (i == 0) {
+ m0 = m;
+ } else
+ if (m->object != m0->object || m->pindex != m0->pindex + i) {
+ error = EINVAL;
+ break;
+ }
+ }
}
xio->xio_npages = i;
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/sys/xio.h,v 1.8 2007/06/29 00:18:03 dillon Exp $
+ * $DragonFly: src/sys/sys/xio.h,v 1.9 2007/06/29 05:09:14 dillon Exp $
*/
/*
#define XIOF_READ 0x0001
#define XIOF_WRITE 0x0002
+#define XIOF_VMLINEAR 0x0004 /* must be VM object linear */
#endif