Use only higher half of device signature to identify device type. Some

devices return incorrect values in lower part confusing detection, while
higher part itself gives enough information for proper detetion.
This commit is contained in:
Alexander Motin 2009-02-21 23:46:34 +00:00
parent 97a7b00c15
commit e412a8c3b5
4 changed files with 15 additions and 15 deletions

View File

@ -295,11 +295,11 @@ ata_pm_identify(device_t dev)
device_printf(dev, "p%d: SIGNATURE=%08x\n", port, signature);
/* figure out whats there */
switch (signature) {
case 0x00000101:
switch (signature >> 16) {
case 0x0000:
ch->devices |= (ATA_ATA_MASTER << port);
continue;
case 0xeb140101:
case 0xeb14:
ch->devices |= (ATA_ATAPI_MASTER << port);
continue;
}

View File

@ -754,15 +754,15 @@ ata_ahci_reset(device_t dev)
if (bootverbose)
device_printf(dev, "SIGNATURE: %08x\n", signature);
switch (signature) {
case 0x00000101:
switch (signature >> 16) {
case 0x0000:
ch->devices = ATA_ATA_MASTER;
break;
case 0x96690101:
case 0x9669:
ch->devices = ATA_PORTMULTIPLIER;
ata_pm_identify(dev);
break;
case 0xeb140101:
case 0xeb14:
ch->devices = ATA_ATAPI_MASTER;
break;
default: /* SOS XXX */

View File

@ -808,15 +808,15 @@ ata_promise_mio_reset(device_t dev)
if (1 | bootverbose)
device_printf(dev, "SIGNATURE: %08x\n", signature);
switch (signature) {
case 0x00000101:
switch (signature >> 16) {
case 0x0000:
ch->devices = ATA_ATA_MASTER;
break;
case 0x96690101:
case 0x9669:
ch->devices = ATA_PORTMULTIPLIER;
ata_pm_identify(dev);
break;
case 0xeb140101:
case 0xeb14:
ch->devices = ATA_ATAPI_MASTER;
break;
default: /* SOS XXX */

View File

@ -849,17 +849,17 @@ ata_siiprb_reset(device_t dev)
device_printf(dev, "SIGNATURE=%08x\n", signature);
/* figure out whats there */
switch (signature) {
case 0x00000101:
switch (signature >> 16) {
case 0x0000:
ch->devices = ATA_ATA_MASTER;
break;
case 0x96690101:
case 0x9669:
ch->devices = ATA_PORTMULTIPLIER;
ATA_OUTL(ctlr->r_res2, 0x1000 + offset, 0x2000); /* enable PM support */
//SOS XXX need to clear all PM status and interrupts!!!!
ata_pm_identify(dev);
break;
case 0xeb140101:
case 0xeb14:
ch->devices = ATA_ATAPI_MASTER;
break;
default: