[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

VRAM disk



井上@ASAHI-NET です。

VRAM の非表示領域を RAM disk にしようとして、ソースを見てみたんですが、
どうもできないようなので、md pseudo device に機能追加してみました。とり
あえず kernel 側の変更部分です。(world21用) MQ200 driver の方もサスペ
ンド用のコード以外は出来ています。そのうち、

  http://www.asahi-net.or.jp/~pf5y-inue/world21-beta.html

からたどれる所に置きます。

なお、hpcmips の /dev/MAKEDEV では md?{a,c} を作るようになってますが、
kernel 側は md?d (RAW_PART) を期待しているようです。また、hpcmips に限
らない事ですが newfs の際の手間を省くため md* の disklabel を ioctl で
とれるようにするか、せめて newfs に disktab ファイルの指定オプションが
欲しい様な気がします。

send-pr とか 別の所に出した方がよいでしょうか。
---
井上義也

--- sys/dev/md.c.org	Sat Jan 22 08:39:57 2000
+++ sys/dev/md.c	Fri Feb  2 17:23:52 2001
@@ -544,3 +544,39 @@
 	}
 }
 #endif	/* MEMORY_DISK_SERVER */
+
+int
+md_attach_internal(addr, size)
+	caddr_t addr;
+	size_t  size;
+{
+	int unit;
+	struct md_softc *sc;
+
+	for (unit = 0; unit < MD_MAX_UNITS; unit++) {
+		sc = ramdisk_devs[unit];
+		if (sc->sc_type == MD_UNCONFIGURED)
+			break;
+	}
+	if (unit >= MD_MAX_UNITS) {
+		return (-1);
+	}
+
+	printf("md%d: (%d blocks) attached\n", unit, size >> DEV_BSHIFT);
+	sc->sc_addr = addr;
+	sc->sc_size = size;
+	sc->sc_type = MD_KMEM_FIXED;
+	return (unit);
+}
+
+void
+md_detach_internal(unit)
+	int unit;
+{
+	struct md_softc *sc = ramdisk_devs[unit];
+
+	sc->sc_type = MD_UNCONFIGURED;
+	sc->sc_addr = 0;
+	sc->sc_size = 0;
+	printf("md%d: detached\n", unit);
+}
--- sys/dev/md.h.org	Fri Jan 21 21:14:53 2000
+++ sys/dev/md.h	Fri Feb  2 16:28:46 2001
@@ -87,4 +87,6 @@
  */
 extern void md_attach_hook __P((int unit, struct md_conf *));
 extern void md_open_hook   __P((int unit, struct md_conf *));
+int md_attach_internal	   __P((caddr_t addr, size_t size));
+void md_detach_internal	   __P((int unit));
 #endif