Subject: Support for PS/2 esdi disks in bootblocks
To: None <port-i386@netbsd.org>
From: Jaromír <jdolecek@netbsd.org>
List: port-i386
Date: 05/04/2001 23:24:13
--ELM989011453-3748-0_
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII
Hi,
I'd like to add some support code to identify the PS/2 ESDI disks
correctly and pass appropriate info to kernel. The code identifies
currently all DTYPE_ESDI disks as ed(4) device. I think this
is safe, but I'm not quite sure.
I'm appending the patch. Is it correct to do what I need this way?
Jaromir
--
Jaromir Dolecek <jdolecek@NetBSD.org> http://www.ics.muni.cz/~dolecek/
NetBSD - just plain best OS! -=*=- Got spare MCA cards or docs? Hand me them!
--ELM989011453-3748-0_
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=ISO-8859-2
Content-Disposition: attachment; filename=biosboot.diff
Index: biosboot/version
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/i386/stand/biosboot/version,v
retrieving revision 1.9
diff -u -p -r1.9 version
--- biosboot/version 2000/09/24 12:32:35 1.9
+++ biosboot/version 2001/05/04 21:17:44
@@ -15,3 +15,4 @@ is taken as the current.
2.6: Support ELF boot.
2.7: Support on-the-fly switching of console devices.
2.8: Support verbose/quiet boot.
+2.9: Recognize ESDI disks and identify them as ed(4)
Index: biosboot/devopen.c
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/i386/stand/biosboot/devopen.c,v
retrieving revision 1.9
diff -u -p -r1.9 devopen.c
--- biosboot/devopen.c 1999/10/28 05:20:05 1.9
+++ biosboot/devopen.c 2001/05/04 21:17:44
@@ -68,6 +68,9 @@ static struct {
},
{
"sd", 0x80
+ },
+ {
+ "ed", 0x80
}
#endif
};
@@ -105,6 +108,8 @@ bios2dev(biosdev, devname, unit)
if(disklabel.d_magic == DISKMAGIC) {
if(disklabel.d_type == DTYPE_SCSI)
*devname = biosdevtab[3].name;
+ else if (disklabel.d_type == DTYPE_ESDI)
+ *devname = biosdevtab[4].name;
else
*devname = biosdevtab[2].name;
} else
Index: lib/exec.c
===================================================================
RCS file: /cvsroot/syssrc/sys/arch/i386/stand/lib/exec.c,v
retrieving revision 1.15
diff -u -p -r1.15 exec.c
--- lib/exec.c 2000/02/22 07:45:04 1.15
+++ lib/exec.c 2001/05/04 21:17:44
@@ -67,13 +67,21 @@ dev2major(devname, major)
char *devname;
int *major;
{
- static char *devices[] = {"wd", "", "fd", "", "sd"};
-#define NUMDEVICES (sizeof(devices)/sizeof(char *))
+ static const struct {
+ const char *name;
+ int maj;
+ } devices[] = {
+ { "wd", 0 },
+ { "fd", 3 },
+ { "sd", 5 },
+ { "ed", 20 },
+ };
+#define NUMDEVICES (sizeof(devices)/sizeof(devices[0]))
int i;
for (i = 0; i < NUMDEVICES; i++)
- if (!strcmp(devname, devices[i])) {
- *major = i;
+ if (!strcmp(devname, devices[i].name)) {
+ *major = devices[i].maj;
return (0);
}
return (-1);
@@ -168,6 +176,8 @@ exec_netbsd(file, loadaddr, boothowto)
if (biosdisk_gettype(f) == DTYPE_SCSI)
devname = "sd";
+ else if (biosdisk_gettype(f) == DTYPE_ESDI)
+ devname = "ed";
else
devname = "wd";
--ELM989011453-3748-0_--