[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