summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/sparc/conf/GENERIC2
-rw-r--r--sys/arch/sparc/conf/GENERIC_SCSI32
-rw-r--r--sys/arch/sparc/conf/files.sparc6
-rw-r--r--sys/arch/sparc/sparc/conf.c7
-rw-r--r--sys/arch/sparc/sparc/rd_root.c80
5 files changed, 92 insertions, 5 deletions
diff --git a/sys/arch/sparc/conf/GENERIC b/sys/arch/sparc/conf/GENERIC
index f6c817b0c4c..6f50edb994b 100644
--- a/sys/arch/sparc/conf/GENERIC
+++ b/sys/arch/sparc/conf/GENERIC
@@ -229,6 +229,6 @@ fd* at fdc0 # the drive itself
pseudo-device kbd # Sun keyboard
#pseudo-device strip 1 # radio clock
-
+pseudo-device rd 2
options OLD_PIPE # XXX nbpg botch
diff --git a/sys/arch/sparc/conf/GENERIC_SCSI3 b/sys/arch/sparc/conf/GENERIC_SCSI3
index 33ce1b932b4..7804f1aa55f 100644
--- a/sys/arch/sparc/conf/GENERIC_SCSI3
+++ b/sys/arch/sparc/conf/GENERIC_SCSI3
@@ -229,6 +229,6 @@ fd* at fdc0 # the drive itself
pseudo-device kbd # Sun keyboard
#pseudo-device strip 1 # radio clock
-
+pseudo-device rd 2
options OLD_PIPE # XXX nbpg botch
diff --git a/sys/arch/sparc/conf/files.sparc b/sys/arch/sparc/conf/files.sparc
index 7b51eccdffd..2342e88f309 100644
--- a/sys/arch/sparc/conf/files.sparc
+++ b/sys/arch/sparc/conf/files.sparc
@@ -81,6 +81,12 @@ major { sd = 7 }
major { vnd = 8 }
major { cd = 18 }
+# RAM Disk for install floppy
+pseudo-device rd
+file dev/ramdisk.c rd needs-flag
+file arch/sparc/sparc/rd_root.c ramdisk_hooks
+major {rd = 17}
+
device dma {}
attach dma at sbus, obio
device ledma {}
diff --git a/sys/arch/sparc/sparc/conf.c b/sys/arch/sparc/sparc/conf.c
index 94a4662ab43..9147630566e 100644
--- a/sys/arch/sparc/sparc/conf.c
+++ b/sys/arch/sparc/sparc/conf.c
@@ -66,6 +66,7 @@
#include "sd.h"
#include "st.h"
#include "cd.h"
+#include "rd.h"
#include "zs.h"
#include "fdc.h" /* has NFDC and NFD; see files.sparc */
@@ -96,7 +97,7 @@ struct bdevsw bdevsw[] =
bdev_notdef(), /* 14 */
bdev_notdef(), /* 15 */
bdev_disk_init(NFD,fd), /* 16: floppy disk */
- bdev_notdef(), /* 17 */
+ bdev_disk_init(NRD,rd), /* 17: ram disk driver */
bdev_disk_init(NCD,cd), /* 18: SCSI CD-ROM */
bdev_lkm_dummy(), /* 19 */
bdev_lkm_dummy(), /* 20 */
@@ -215,7 +216,7 @@ struct cdevsw cdevsw[] =
cdev_notdef(), /* 103 */
cdev_notdef(), /* 104 */
cdev_bpftun_init(NBPFILTER,bpf),/* 105: packet filter */
- cdev_notdef(), /* 106 */
+ cdev_disk_init(NRD,rd), /* 106: ram disk driver */
cdev_notdef(), /* 107 */
cdev_notdef(), /* 108 */
cdev_notdef(), /* 109 */
@@ -376,7 +377,7 @@ static int chrtoblktbl[] = {
/*103 */ NODEV,
/*104 */ NODEV,
/*105 */ NODEV,
- /*106 */ NODEV,
+ /*106 */ 17,
/*107 */ NODEV,
/*108 */ NODEV,
/*109 */ NODEV,
diff --git a/sys/arch/sparc/sparc/rd_root.c b/sys/arch/sparc/sparc/rd_root.c
new file mode 100644
index 00000000000..6474f0d2188
--- /dev/null
+++ b/sys/arch/sparc/sparc/rd_root.c
@@ -0,0 +1,80 @@
+/* $NetBSD: rd_root.c,v 1.2 1996/03/27 16:38:33 perry Exp $ */
+
+/*
+ * Copyright (c) 1995 Gordon W. Ross
+ * 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 <sys/param.h>
+#include <sys/systm.h>
+#include <sys/reboot.h>
+
+#include <dev/ramdisk.h>
+
+extern int boothowto;
+
+#ifndef MINIROOTSIZE
+#define MINIROOTSIZE 512
+#endif
+
+#define ROOTBYTES (MINIROOTSIZE << DEV_BSHIFT)
+
+/*
+ * This array will be patched to contain a file-system image.
+ * See the program: src/distrib/sun3/common/rdsetroot.c
+ */
+int rd_root_size = ROOTBYTES;
+char rd_root_image[ROOTBYTES] = "|This is the root ramdisk!\n";
+
+/*
+ * This is called during autoconfig.
+ */
+void
+rd_attach_hook(unit, rd)
+ int unit;
+ struct rd_conf *rd;
+{
+ if (unit == 0) {
+ /* Setup root ramdisk */
+ rd->rd_addr = (caddr_t) rd_root_image;
+ rd->rd_size = (size_t) rd_root_size;
+ rd->rd_type = RD_KMEM_FIXED;
+ printf("rd%d: fixed, %d blocks\n", unit, MINIROOTSIZE);
+ }
+}
+
+/*
+ * This is called during open (i.e. mountroot)
+ */
+void
+rd_open_hook(unit, rd)
+ int unit;
+ struct rd_conf *rd;
+{
+ if (unit == 0) {
+ /* The root ramdisk only works single-user. */
+ boothowto |= RB_SINGLE;
+ }
+}