Module Name: src
Committed By: uebayasi
Date: Sun Feb 28 05:03:58 UTC 2010
Modified Files:
src/sys/dev [uebayasi-xip]: flash.c
src/sys/miscfs/genfs [uebayasi-xip]: genfs_io.c
src/sys/sys [uebayasi-xip]: dkio.h
Log Message:
To mount block devices as XIP, pass physical address "cookie" used by
bus_space_mmap(9) / pmap_phys_addr(9) via struct mount.
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.3 -r1.1.2.4 src/sys/dev/flash.c
cvs rdiff -u -r1.36.2.2 -r1.36.2.3 src/sys/miscfs/genfs/genfs_io.c
cvs rdiff -u -r1.15.2.1 -r1.15.2.2 src/sys/sys/dkio.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/flash.c
diff -u src/sys/dev/flash.c:1.1.2.3 src/sys/dev/flash.c:1.1.2.4
--- src/sys/dev/flash.c:1.1.2.3 Sun Feb 28 04:36:27 2010
+++ src/sys/dev/flash.c Sun Feb 28 05:03:58 2010
@@ -1,4 +1,4 @@
-/* $Id: flash.c,v 1.1.2.3 2010/02/28 04:36:27 uebayasi Exp $ */
+/* $Id: flash.c,v 1.1.2.4 2010/02/28 05:03:58 uebayasi Exp $ */
/*-
* Copyright (c) 2010 Tsubai Masanari. All rights reserved.
@@ -100,7 +100,8 @@
if (sc->sc_addr == 0)
error = EINVAL;
else
- *(paddr_t *)data = sc->sc_addr;
+ *(paddr_t *)data = bus_space_mmap(sc->sc_iot,
+ sc->sc_addr, 0, 0/* XXX prot */, BUS_SPACE_MAP_LINEAR);
break;
#endif
Index: src/sys/miscfs/genfs/genfs_io.c
diff -u src/sys/miscfs/genfs/genfs_io.c:1.36.2.2 src/sys/miscfs/genfs/genfs_io.c:1.36.2.3
--- src/sys/miscfs/genfs/genfs_io.c:1.36.2.2 Tue Feb 23 07:46:28 2010
+++ src/sys/miscfs/genfs/genfs_io.c Sun Feb 28 05:03:58 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: genfs_io.c,v 1.36.2.2 2010/02/23 07:46:28 uebayasi Exp $ */
+/* $NetBSD: genfs_io.c,v 1.36.2.3 2010/02/28 05:03:58 uebayasi Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.36.2.2 2010/02/23 07:46:28 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.36.2.3 2010/02/28 05:03:58 uebayasi Exp $");
#include "opt_device_page.h"
#include "opt_xip.h"
@@ -808,7 +808,8 @@
/* unallocated page is redirected to read-only zero-filled page */
phys_addr = uvm_pageofzero_xip_phys_addr();
} else {
- phys_addr = vp->v_mount->mnt_phys_addr +
+ /* bus_space_mmap cookie -> paddr_t */
+ phys_addr = pmap_phys_address(vp->v_mount->mnt_phys_addr) +
(blkno << dev_bshift) +
(off - (lbn << fs_bshift));
}
Index: src/sys/sys/dkio.h
diff -u src/sys/sys/dkio.h:1.15.2.1 src/sys/sys/dkio.h:1.15.2.2
--- src/sys/sys/dkio.h:1.15.2.1 Thu Feb 11 05:19:35 2010
+++ src/sys/sys/dkio.h Sun Feb 28 05:03:58 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: dkio.h,v 1.15.2.1 2010/02/11 05:19:35 uebayasi Exp $ */
+/* $NetBSD: dkio.h,v 1.15.2.2 2010/02/28 05:03:58 uebayasi Exp $ */
/*
* Copyright (c) 1987, 1988, 1993
@@ -105,7 +105,7 @@
/* get disk-info dictionary */
#define DIOCGDISKINFO _IOR('d', 127, struct plistref)
- /* get physical address if directly memory-mappable (XIP) */
+ /* get physical address cookie if directly memory-mappable (XIP) */
#define DIOCGPHYSADDR _IOR('d', 128, paddr_t)
#endif /* _SYS_DKIO_H_ */