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.
This commit is contained in:
Joerg Wunsch 1997-10-19 13:12:02 +00:00
parent 23e200d5ab
commit 0722d6aba3
3 changed files with 45 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;