summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdc
diff options
context:
space:
mode:
authorjoerg <joerg@FreeBSD.org>1997-10-19 13:12:02 +0000
committerjoerg <joerg@FreeBSD.org>1997-10-19 13:12:02 +0000
commitc1819b340992c362c4719dc4fbe9fdb6fb549c8d (patch)
tree84fac636d884894649bfadefbd7539dd52148995 /sys/dev/fdc
parent075da1dbb990ca02802b89d73266b82c6c776b11 (diff)
downloadFreeBSD-src-c1819b340992c362c4719dc4fbe9fdb6fb549c8d.zip
FreeBSD-src-c1819b340992c362c4719dc4fbe9fdb6fb549c8d.tar.gz
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.
Diffstat (limited to 'sys/dev/fdc')
-rw-r--r--sys/dev/fdc/fdc.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c
index 72e7d7a..2d3081f 100644
--- a/sys/dev/fdc/fdc.c
+++ b/sys/dev/fdc/fdc.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;
OpenPOWER on IntegriCloud