Merge from sys/isa/fd.c rev 1.170.

This commit is contained in:
KATO Takenori 1999-12-07 09:32:59 +00:00
parent 9976554fa0
commit 4332f82d59
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=54256
2 changed files with 46 additions and 12 deletions

View File

@ -819,13 +819,30 @@ fdc_probe(device_t dev)
fdc->porth = rman_get_bushandle(fdc->res_ioport);
#ifndef PC98
/*
* Some bios' report the device at 0x3f2-0x3f5,0x3f7 and some at
* 0x3f0-0x3f5,0x3f7. We detect the former by checking the size
* and adjust the port address accordingly.
*
* And some (!!) report 0x3f2-0x3f5 and completely leave out the
* control register! It seems that some non-antique controller chips
* have a different method of programming the transfer speed which
* doesn't require the control register, but it's mighty bogus as the
* chip still responds to the address for the control register.
* This hack is truely evil as we use the 6th port in a 4-port chunk.
*/
/* 0x3f2-0x3f5 */
if (bus_get_resource_count(dev, SYS_RES_IOPORT, 0) == 4 &&
bus_get_resource_count(dev, SYS_RES_IOPORT, 1) == 0) {
fdc->port_off = -2;
ispnp = 0; /* hack, don't reserve second port chunk */
}
/* 0x3f0-0x3f5 */
if (bus_get_resource_count(dev, SYS_RES_IOPORT, 0) == 6 &&
bus_get_resource_count(dev, SYS_RES_IOPORT, 1) == 0) {
ispnp = 0; /* hack, don't reserve second port chunk */
}
if (ispnp) {
/*
* Some bios' report the device at 0x3f2-0x3f5,0x3f7
* and some at 0x3f0-0x3f5,0x3f7. We detect the former
* by checking the size and adjust the port address
* accordingly.
*/
if (bus_get_resource_count(dev, SYS_RES_IOPORT, 0) == 4)
fdc->port_off = -2;
fdc->flags |= FDC_ISPNP;

View File

@ -819,13 +819,30 @@ fdc_probe(device_t dev)
fdc->porth = rman_get_bushandle(fdc->res_ioport);
#ifndef PC98
/*
* Some bios' report the device at 0x3f2-0x3f5,0x3f7 and some at
* 0x3f0-0x3f5,0x3f7. We detect the former by checking the size
* and adjust the port address accordingly.
*
* And some (!!) report 0x3f2-0x3f5 and completely leave out the
* control register! It seems that some non-antique controller chips
* have a different method of programming the transfer speed which
* doesn't require the control register, but it's mighty bogus as the
* chip still responds to the address for the control register.
* This hack is truely evil as we use the 6th port in a 4-port chunk.
*/
/* 0x3f2-0x3f5 */
if (bus_get_resource_count(dev, SYS_RES_IOPORT, 0) == 4 &&
bus_get_resource_count(dev, SYS_RES_IOPORT, 1) == 0) {
fdc->port_off = -2;
ispnp = 0; /* hack, don't reserve second port chunk */
}
/* 0x3f0-0x3f5 */
if (bus_get_resource_count(dev, SYS_RES_IOPORT, 0) == 6 &&
bus_get_resource_count(dev, SYS_RES_IOPORT, 1) == 0) {
ispnp = 0; /* hack, don't reserve second port chunk */
}
if (ispnp) {
/*
* Some bios' report the device at 0x3f2-0x3f5,0x3f7
* and some at 0x3f0-0x3f5,0x3f7. We detect the former
* by checking the size and adjust the port address
* accordingly.
*/
if (bus_get_resource_count(dev, SYS_RES_IOPORT, 0) == 4)
fdc->port_off = -2;
fdc->flags |= FDC_ISPNP;