From c1819b340992c362c4719dc4fbe9fdb6fb549c8d Mon Sep 17 00:00:00 2001 From: joerg Date: Sun, 19 Oct 1997 13:12:02 +0000 Subject: Introduce a device flags value of 0x1 to always pretend a 1.44 MB floppy drive #0, regardless of what the CMOS says. This is intended as a bandaid for those plagued with Compaq's idea to not announce the floppy drive on their `Aero' notebook. Using the device flags is not very nice (in particular since they aren't per-drive but per-controller), but still looks a lot better to me than the disgusting guesswork hack that was recently posted to -hackers. Doc update will follow shortly. --- sys/i386/isa/fd.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'sys/i386/isa/fd.c') diff --git a/sys/i386/isa/fd.c b/sys/i386/isa/fd.c index 72e7d7a..2d3081f 100644 --- a/sys/i386/isa/fd.c +++ b/sys/i386/isa/fd.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.103 1997/09/21 21:41:00 gibbs Exp $ + * $Id: fd.c,v 1.104 1997/09/23 22:14:43 gibbs Exp $ * */ @@ -88,6 +88,12 @@ /* misuse a flag to identify format operation */ #define B_FORMAT B_XXX +/* configuration flags */ +#define FDC_PRETEND_D0 (1 << 0) /* pretend drive 0 to be there */ + +/* internally used only, not really from CMOS: */ +#define RTCFDT_144M_PRETENDED 0x1000 + /* * this biotab field doubles as a field for the physical unit number * on the controller @@ -549,7 +555,10 @@ fdattach(struct isa_device *dev) fdsu = fdup->id_physid; /* look up what bios thinks we have */ switch (fdu) { - case 0: fdt = (rtcin(RTC_FDISKETTE) & 0xf0); + case 0: if (dev->id_flags & FDC_PRETEND_D0) + fdt = RTCFDT_144M | RTCFDT_144M_PRETENDED; + else + fdt = (rtcin(RTC_FDISKETTE) & 0xf0); break; case 1: fdt = ((rtcin(RTC_FDISKETTE) << 4) & 0xf0); break; @@ -684,6 +693,10 @@ fdattach(struct isa_device *dev) printf("1.2MB 5.25in\n"); fd->type = FD_1200; break; + case RTCFDT_144M | RTCFDT_144M_PRETENDED: + printf("config-pretended "); + fdt = RTCFDT_144M; + /* fallthrough */ case RTCFDT_144M: printf("1.44MB 3.5in\n"); fd->type = FD_1440; -- cgit v1.1