Module Name:    src
Committed By:   uebayasi
Date:           Thu Aug 19 12:36:59 UTC 2010

Modified Files:
        src/share/man/man4 [uebayasi-xip]: md.4
        src/sys/arch/evbppc/conf [uebayasi-xip]: OPENBLOCKS266 majors.evbppc
        src/sys/arch/powerpc/conf [uebayasi-xip]: files.powerpc
        src/sys/conf [uebayasi-xip]: files
Added Files:
        src/share/man/man4 [uebayasi-xip]: xmd.4
        src/sys/arch/powerpc/powerpc [uebayasi-xip]: xmd_machdep.c
        src/sys/dev [uebayasi-xip]: xmd.c xmdvar.h

Log Message:
Initial addition of xmd(4), XIP memory disk.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.5.26.1 src/share/man/man4/md.4
cvs rdiff -u -r0 -r1.1.2.1 src/share/man/man4/xmd.4
cvs rdiff -u -r1.46.2.2 -r1.46.2.3 src/sys/arch/evbppc/conf/OPENBLOCKS266
cvs rdiff -u -r1.28.6.1 -r1.28.6.2 src/sys/arch/evbppc/conf/majors.evbppc
cvs rdiff -u -r1.71.4.2 -r1.71.4.3 src/sys/arch/powerpc/conf/files.powerpc
cvs rdiff -u -r0 -r1.1.2.1 src/sys/arch/powerpc/powerpc/xmd_machdep.c
cvs rdiff -u -r1.974.2.7 -r1.974.2.8 src/sys/conf/files
cvs rdiff -u -r0 -r1.1.2.1 src/sys/dev/xmd.c src/sys/dev/xmdvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man4/md.4
diff -u src/share/man/man4/md.4:1.5 src/share/man/man4/md.4:1.5.26.1
--- src/share/man/man4/md.4:1.5	Sun Feb 25 04:22:01 2007
+++ src/share/man/man4/md.4	Thu Aug 19 12:36:59 2010
@@ -1,4 +1,4 @@
-.\"   $NetBSD: md.4,v 1.5 2007/02/25 04:22:01 uwe Exp $
+.\"   $NetBSD: md.4,v 1.5.26.1 2010/08/19 12:36:59 uebayasi Exp $
 .\"
 .\" This file is in the public domain.
 .\"
@@ -35,5 +35,6 @@
 .El
 .Sh SEE ALSO
 .Xr options 4 ,
+.Xr xmd 4 ,
 .Xr mdconfig 8 ,
 .Xr mdsetimage 8

Index: src/sys/arch/evbppc/conf/OPENBLOCKS266
diff -u src/sys/arch/evbppc/conf/OPENBLOCKS266:1.46.2.2 src/sys/arch/evbppc/conf/OPENBLOCKS266:1.46.2.3
--- src/sys/arch/evbppc/conf/OPENBLOCKS266:1.46.2.2	Wed Aug 11 14:03:58 2010
+++ src/sys/arch/evbppc/conf/OPENBLOCKS266	Thu Aug 19 12:36:58 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: OPENBLOCKS266,v 1.46.2.2 2010/08/11 14:03:58 uebayasi Exp $
+#	$NetBSD: OPENBLOCKS266,v 1.46.2.3 2010/08/19 12:36:58 uebayasi Exp $
 #
 #	GENERIC -- everything that's currently supported
 #
@@ -7,7 +7,7 @@
 
 #options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"OPENBLOCKS266-$Revision: 1.46.2.2 $"
+#ident 		"OPENBLOCKS266-$Revision: 1.46.2.3 $"
 
 maxusers	32
 
@@ -197,6 +197,7 @@
 #pseudo-device	fss			# file system snapshot device
 #pseudo-device	md		1	# memory disk device
 #pseudo-device	vnd			# disk-like interface to files
+#pseudo-device	xmd		1	# XIP memory disk device
 
 # network pseudo-devices
 pseudo-device	loop			# network loopback

Index: src/sys/arch/evbppc/conf/majors.evbppc
diff -u src/sys/arch/evbppc/conf/majors.evbppc:1.28.6.1 src/sys/arch/evbppc/conf/majors.evbppc:1.28.6.2
--- src/sys/arch/evbppc/conf/majors.evbppc:1.28.6.1	Wed Aug 11 13:56:27 2010
+++ src/sys/arch/evbppc/conf/majors.evbppc	Thu Aug 19 12:36:58 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: majors.evbppc,v 1.28.6.1 2010/08/11 13:56:27 uebayasi Exp $
+#	$NetBSD: majors.evbppc,v 1.28.6.2 2010/08/19 12:36:58 uebayasi Exp $
 #
 # Device majors for evbppc
 # (When possible, make entries the same as macppc)
@@ -81,6 +81,7 @@
 device-major	nsmb		char 98			nsmb
 device-major 	xlcom 		char 99 		xlcom
 device-major 	flash 		char 100  block 15 	flash
+device-major	xmd		char 101  block 16	xmd
 
 # Majors up to 143 are reserved for machine-dependant drivers.
 # New machine-independent driver majors are assigned in 

Index: src/sys/arch/powerpc/conf/files.powerpc
diff -u src/sys/arch/powerpc/conf/files.powerpc:1.71.4.2 src/sys/arch/powerpc/conf/files.powerpc:1.71.4.3
--- src/sys/arch/powerpc/conf/files.powerpc:1.71.4.2	Wed Aug 11 13:20:07 2010
+++ src/sys/arch/powerpc/conf/files.powerpc	Thu Aug 19 12:36:58 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: files.powerpc,v 1.71.4.2 2010/08/11 13:20:07 uebayasi Exp $
+#	$NetBSD: files.powerpc,v 1.71.4.3 2010/08/19 12:36:58 uebayasi Exp $
 
 defflag	opt_altivec.h	ALTIVEC K_ALTIVEC
 defflag	opt_openpic.h	OPENPIC OPENPIC_SERIAL_MODE
@@ -94,3 +94,5 @@
 file arch/powerpc/powerpc/linux_sigcode.S		compat_linux
 file arch/powerpc/powerpc/linux_trap.c			compat_linux
 file arch/powerpc/powerpc/linux_syscall.c		compat_linux
+
+file arch/powerpc/powerpc/xmd_machdep.c			xmd

Index: src/sys/conf/files
diff -u src/sys/conf/files:1.974.2.7 src/sys/conf/files:1.974.2.8
--- src/sys/conf/files:1.974.2.7	Tue Aug 17 06:45:56 2010
+++ src/sys/conf/files	Thu Aug 19 12:36:58 2010
@@ -1,4 +1,4 @@
-#	$NetBSD: files,v 1.974.2.7 2010/08/17 06:45:56 uebayasi Exp $
+#	$NetBSD: files,v 1.974.2.8 2010/08/19 12:36:58 uebayasi Exp $
 #	@(#)files.newconf	7.5 (Berkeley) 5/10/93
 
 version 	20100430
@@ -271,6 +271,10 @@
 defparam opt_md.h		MEMORY_DISK_SERVER=1 MEMORY_DISK_ROOT_SIZE
 				MEMORY_DISK_RBFLAGS
 
+# XIP memory (ram) disk options
+#
+defflag	opt_xmd.h		XMD_ROOT_SIZE
+
 defflag opt_tftproot.h		TFTPROOT TFTPROOT_DEBUG
 
 # Support for hardware performance monitoring counters
@@ -1256,6 +1260,7 @@
 defpseudodev cgd:	disk, des, blowfish, cast128, rijndael
 defpseudodev md:	disk
 defpseudodev fss:	disk
+defpseudodev xmd:	disk
 
 defpseudo pty:		tty
 defpseudo rnd
@@ -1415,6 +1420,7 @@
 file	dev/sequencer.c			sequencer		needs-flag
 file	dev/video.c			video			needs-flag
 file	dev/vnd.c			vnd			needs-flag
+file	dev/xmd.c			xmd			needs-count
 file	kern/bufq_disksort.c		bufq_disksort
 file	kern/bufq_fcfs.c		bufq_fcfs
 file	kern/bufq_priocscan.c		bufq_priocscan

Added files:

Index: src/share/man/man4/xmd.4
diff -u /dev/null src/share/man/man4/xmd.4:1.1.2.1
--- /dev/null	Thu Aug 19 12:36:59 2010
+++ src/share/man/man4/xmd.4	Thu Aug 19 12:36:59 2010
@@ -0,0 +1,30 @@
+.\" $NetBSD: xmd.4,v 1.1.2.1 2010/08/19 12:36:59 uebayasi Exp $
+.\"
+.\" This file is in the public domain.
+.\"
+.Dd August 19, 2010
+.Dt XMD 4
+.Os
+.Sh NAME
+.Nm xmd
+.Nd XIP memory disk
+.Sh SYNOPSIS
+.Cd "pseudo-device xmd" Op Ar count
+.Sh DESCRIPTION
+The
+.Nm
+driver enables use of system or user memory as a disk, which can be
+mounted as XIP (eXecute-In-Place), so that filesystem data are read
+without consuming intermediate page cache buffers.
+.Pp
+Memory for the disk is allocated within the kernel and set with
+.Xr mdsetimage 8
+before the
+.Nm
+device may be used as a disk.
+.Nm
+disks should be mounted as read-only to enable XIP.
+.Sh SEE ALSO
+.Xr md 4 ,
+.Xr options 4 ,
+.Xr mdsetimage 8

Index: src/sys/arch/powerpc/powerpc/xmd_machdep.c
diff -u /dev/null src/sys/arch/powerpc/powerpc/xmd_machdep.c:1.1.2.1
--- /dev/null	Thu Aug 19 12:36:59 2010
+++ src/sys/arch/powerpc/powerpc/xmd_machdep.c	Thu Aug 19 12:36:58 2010
@@ -0,0 +1,69 @@
+/*	$NetBSD: xmd_machdep.c,v 1.1.2.1 2010/08/19 12:36:58 uebayasi Exp $	*/
+
+/*-
+ * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "opt_xip.h"
+
+#include <sys/param.h>
+#include <sys/mman.h>
+
+#include <uvm/uvm_page.h>
+
+#include <dev/xmdvar.h>
+
+paddr_t
+xmd_machdep_mmap(vaddr_t addr, off_t off, int prot)
+{
+
+	/* addr is in PA == VA RAM area. */
+	KASSERT(addr >= 0x00000000);
+	KASSERT(addr < 0x80000000);
+
+	return addr;
+}
+
+void *
+xmd_machdep_physload(vaddr_t addr, size_t size)
+{
+	paddr_t s, e, as, ae;
+
+	/* addr is in PA == VA RAM area. */
+	KASSERT(addr >= 0x00000000);
+	KASSERT(addr < 0x80000000);
+
+	s = as = (addr) >> PAGE_SHIFT;
+	e = ae = (addr + size) >> PAGE_SHIFT;
+
+	return uvm_page_physload_device(s, e, as, ae, PROT_READ, 0);
+}
+
+void
+xmd_machdep_physunload(void *phys)
+{
+
+	uvm_page_physunload_device(phys);
+}

Index: src/sys/dev/xmd.c
diff -u /dev/null src/sys/dev/xmd.c:1.1.2.1
--- /dev/null	Thu Aug 19 12:36:59 2010
+++ src/sys/dev/xmd.c	Thu Aug 19 12:36:58 2010
@@ -0,0 +1,299 @@
+/*	$NetBSD: xmd.c,v 1.1.2.1 2010/08/19 12:36:58 uebayasi Exp $	*/
+
+/*-
+ * Copyright (c) 2010 Tsubai Masanari.  All rights reserved.
+ * Copyright (c) 2010 Masao Uebayashi.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "opt_xip.h"
+#include "opt_xmd.h"
+
+#ifndef XIP
+#error xmd(4) needs options XIP
+#endif
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/ioctl.h>
+#include <sys/kmem.h>
+#include <sys/buf.h>
+#include <sys/bufq.h>
+#include <sys/device.h>
+#include <sys/disk.h>
+#include <sys/disklabel.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <sys/kmem.h>
+
+#include <machine/vmparam.h>
+
+#include <dev/xmdvar.h>
+
+struct xmd_softc {
+	vaddr_t sc_addr;
+	size_t sc_size;
+
+	void *sc_phys;
+
+	struct disk sc_dkdev;
+	struct bufq_state *sc_buflist;
+};
+
+void xmdattach(int);
+static void xmd_attach(device_t, device_t, void *);
+static int xmd_detach(device_t, int);
+static dev_type_open(xmd_open);
+static dev_type_close(xmd_close);
+static dev_type_ioctl(xmd_ioctl);
+static dev_type_mmap(xmd_mmap);
+static dev_type_strategy(xmd_strategy);
+static dev_type_size(xmd_size);
+
+struct bdevsw xmd_bdevsw = {
+	xmd_open, xmd_close, xmd_strategy, xmd_ioctl,
+	nodump, xmd_size, D_DISK | D_MPSAFE
+};
+
+struct cdevsw xmd_cdevsw = {
+	nullopen, nullclose, nullread, nowrite, xmd_ioctl,
+	nostop, notty, nopoll, xmd_mmap, nokqfilter
+};
+
+extern struct cfdriver xmd_cd;
+CFATTACH_DECL3_NEW(xmd, sizeof(struct xmd_softc),
+    NULL, xmd_attach, xmd_detach, NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
+
+static struct dkdriver xmddkdriver = { xmd_strategy, NULL };
+
+const char md_root_image[XMD_ROOT_SIZE << DEV_BSHIFT] __aligned(PAGE_SIZE) =
+    "|This is the root ramdisk!\n";
+const size_t md_root_size = XMD_ROOT_SIZE << DEV_BSHIFT;
+
+void
+xmdattach(int n)
+{
+	int i;
+	cfdata_t cf;
+
+	if (config_cfattach_attach("xmd", &xmd_ca)) {
+		aprint_error("xmd: cfattach_attach failed\n");
+		return;
+	}
+
+	/* XXX Support single instance for now. */
+	KASSERT(n == 1);
+
+	for (i = 0; i < n; i++) {
+		cf = kmem_alloc(sizeof(*cf), KM_SLEEP);
+		KASSERT(cf != NULL);
+		cf->cf_name = "xmd";
+		cf->cf_atname = "xmd";
+		cf->cf_unit = i;
+		cf->cf_fstate = FSTATE_NOTFOUND;
+		(void)config_attach_pseudo(cf);
+	}
+}
+
+static void
+xmd_attach(device_t parent, device_t self, void *aux)
+{
+	struct xmd_softc *sc = device_private(self);
+
+	sc->sc_addr = (vaddr_t)md_root_image;
+	sc->sc_size = (size_t)md_root_size;
+
+#ifdef XIP
+	sc->sc_phys = xmd_machdep_physload(sc->sc_addr, sc->sc_size);
+#endif
+
+	bufq_alloc(&sc->sc_buflist, "fcfs", 0);
+
+	disk_init(&sc->sc_dkdev, device_xname(self), &xmddkdriver);
+	disk_attach(&sc->sc_dkdev);
+
+	if (!pmf_device_register(self, NULL, NULL))
+		aprint_error_dev(self, "couldn't establish power handler\n");
+}
+
+static int
+xmd_detach(device_t self, int flags)
+{
+	struct xmd_softc *sc = device_private(self);
+	int rc;
+
+	rc = 0;
+	mutex_enter(&sc->sc_dkdev.dk_openlock);
+	if (sc->sc_dkdev.dk_openmask == 0)
+		;	/* nothing to do */
+	else if ((flags & DETACH_FORCE) == 0)
+		rc = EBUSY;
+	mutex_exit(&sc->sc_dkdev.dk_openlock);
+
+	if (rc != 0)
+		return rc;
+
+	pmf_device_deregister(self);
+	disk_detach(&sc->sc_dkdev);
+	disk_destroy(&sc->sc_dkdev);
+	bufq_free(sc->sc_buflist);
+	return 0;
+}
+
+static int
+xmd_open(dev_t dev, int flags, int fmt, struct lwp *l)
+{
+	struct xmd_softc *sc = device_lookup_private(&xmd_cd, DISKUNIT(dev));
+	struct disk *dk = &sc->sc_dkdev;
+	const int part = DISKUNIT(dev);
+	const int pmask = 1 << part;
+
+	if (sc == NULL)
+		return ENXIO;
+
+	mutex_enter(&dk->dk_openlock);
+	switch (fmt) {
+		case S_IFCHR:
+		dk->dk_copenmask |= pmask;
+		break;
+	case S_IFBLK:
+		dk->dk_bopenmask |= pmask;
+		break;
+	}
+	dk->dk_openmask = dk->dk_copenmask | dk->dk_bopenmask;
+	mutex_exit(&dk->dk_openlock);
+
+	return 0;
+}
+
+static int
+xmd_close(dev_t dev, int flags, int fmt, struct lwp *l)
+{
+
+	return 0;
+}
+
+int
+xmd_ioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
+{
+	struct xmd_softc *sc = device_lookup_private(&xmd_cd, DISKUNIT(dev));
+	const int part = DISKUNIT(dev);
+	int error = 0;
+
+	if (sc == NULL)
+		return -1;
+
+	switch (cmd) {
+#ifdef XIP
+	case DIOCGPHYSSEG:
+		if (sc->sc_phys == NULL)
+			error = EINVAL;
+		else
+			*(void **)data = sc->sc_phys;
+		break;
+#endif
+
+	case DIOCGDINFO:
+		*(struct disklabel *)data = *sc->sc_dkdev.dk_label;
+		break;
+
+	case DIOCGPART:
+		((struct partinfo *)data)->disklab = sc->sc_dkdev.dk_label;
+		((struct partinfo *)data)->part =
+		    &sc->sc_dkdev.dk_label->d_partitions[part];
+		break;
+
+	default:
+		error = EINVAL;
+		break;
+	}
+
+	return error;
+}
+
+paddr_t
+xmd_mmap(dev_t dev, off_t off, int prot)
+{
+	struct xmd_softc *sc = device_lookup_private(&xmd_cd, DISKUNIT(dev));
+
+	if (sc == NULL)
+		return -1;
+
+	if ((u_int64_t)off >= sc->sc_size)
+		return -1;
+
+	return xmd_machdep_mmap(sc->sc_addr, off, prot);
+}
+
+static void
+xmd_strategy(struct buf *bp)
+{
+	struct xmd_softc *sc;
+	void *addr;
+	size_t off, count;
+
+	sc = device_lookup_private(&xmd_cd, DISKUNIT(bp->b_dev));
+
+	off = bp->b_blkno << DEV_BSHIFT;
+
+	/* XXX is b_bcount==0 legal? */
+
+	if (off >= sc->sc_size) {
+		if (bp->b_flags & B_READ)
+			/* XXX why not error? */
+			goto done;
+		bp->b_error = EIO;
+		goto done;
+	}
+
+	if (bp->b_bcount <= (sc->sc_size - off))
+		count = bp->b_bcount;
+	else
+		count = sc->sc_size - off;
+
+	addr = (void *)(sc->sc_addr + off);
+
+	if (bp->b_flags & B_READ)
+		memcpy(bp->b_data, addr, count);
+	else
+		panic("%s: block write is not supported", __func__);
+
+	bp->b_resid = bp->b_bcount - count;
+
+ done:
+	biodone(bp);
+}
+
+static int
+xmd_size(dev_t dev)
+{
+	struct xmd_softc *sc;
+
+	sc = device_lookup_private(&xmd_cd, DISKUNIT(dev));
+	if (sc == NULL)
+		return 0;
+
+	return sc->sc_size >> DEV_BSHIFT;
+}
Index: src/sys/dev/xmdvar.h
diff -u /dev/null src/sys/dev/xmdvar.h:1.1.2.1
--- /dev/null	Thu Aug 19 12:36:59 2010
+++ src/sys/dev/xmdvar.h	Thu Aug 19 12:36:58 2010
@@ -0,0 +1,36 @@
+/*	$NetBSD: xmdvar.h,v 1.1.2.1 2010/08/19 12:36:58 uebayasi Exp $	*/
+
+/*-
+ * Copyright (c) 2010 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _DEV_XMDVAR_H_
+#define _DEV_XMDVAR_H_
+
+paddr_t xmd_machdep_mmap(vaddr_t, off_t, int);
+void *xmd_machdep_physload(vaddr_t, size_t);
+void xmd_machdep_physunload(void *);
+
+#endif

Reply via email to