Module Name:    src
Committed By:   uebayasi
Date:           Sun Feb 28 04:36:27 UTC 2010

Modified Files:
        src/sys/dev [uebayasi-xip]: flash.c

Log Message:
Implement mmap() entry using bus_space_mmap(9).  Put a common init code.


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.2 -r1.1.2.3 src/sys/dev/flash.c

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.2 src/sys/dev/flash.c:1.1.2.3
--- src/sys/dev/flash.c:1.1.2.2	Wed Feb 24 01:19:37 2010
+++ src/sys/dev/flash.c	Sun Feb 28 04:36:27 2010
@@ -1,4 +1,4 @@
-/*	$Id: flash.c,v 1.1.2.2 2010/02/24 01:19:37 uebayasi Exp $	*/
+/*	$Id: flash.c,v 1.1.2.3 2010/02/28 04:36:27 uebayasi Exp $	*/
 
 /*-
  * Copyright (c) 2010 Tsubai Masanari.  All rights reserved.
@@ -122,6 +122,21 @@
 	return error;
 }
 
+paddr_t
+flash_mmap(dev_t dev, off_t off, int prot)
+{
+	struct flash_softc *sc = device_lookup_private(&flash_cd, minor(dev));
+
+	if (sc == NULL)
+		return -1;
+
+	if ((u_int64_t)off >= sc->sc_size)
+		return -1;
+
+	return bus_space_mmap(sc->sc_iot, sc->sc_addr, off, prot,
+	    BUS_SPACE_MAP_LINEAR);
+}
+
 int
 flash_map(struct flash_softc *sc, u_long addr)
 {
@@ -194,3 +209,33 @@
 
 	return sc->sc_size >> DEV_BSHIFT;
 }
+
+void
+flash_init(struct flash_softc *sc)
+{
+
+#ifdef notyet
+	if (bus_space_map(sc->sc_iot, sc->sc_addr, 0x1000, 0, &sc->sc_baseioh)) {
+		printf(": failed to map registers\n");
+		return;
+	}
+
+	if (intelflash_probe(sc) == 0)
+		goto found;
+	if (amdflash_probe(sc) == 0)
+		goto found;
+	printf(": unknown chip\n");
+	return;
+
+found:
+
+	sc->sc_program = amdflash_program_word;
+	sc->sc_eraseblk = amdflash_erase_block;
+	sc->sc_size = sc->sc_product->size;
+	printf(": %s (%dKB, %d bit/word)\n", sc->sc_product->name,
+	    sc->sc_size / 1024, sc->sc_wordsize * 8);
+#endif
+
+	disk_init(&sc->sc_dkdev, device_xname(&sc->sc_dev), NULL);
+	disk_attach(&sc->sc_dkdev);
+}

Reply via email to