diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c index 1e74e0117346..03ec49a536ff 100644 --- a/sys/dev/ata/ata-all.c +++ b/sys/dev/ata/ata-all.c @@ -769,6 +769,7 @@ ata_mode2str(int mode) case ATA_UDMA5: return "UDMA100"; case ATA_UDMA6: return "UDMA133"; case ATA_SA150: return "SATA150"; + case ATA_SA300: return "SATA300"; default: if (mode & ATA_DMA_MASK) return "BIOSDMA"; diff --git a/sys/dev/ata/ata-chipset.c b/sys/dev/ata/ata-chipset.c index c9b3292b1608..8156ce6e1752 100644 --- a/sys/dev/ata/ata-chipset.c +++ b/sys/dev/ata/ata-chipset.c @@ -208,6 +208,7 @@ ata_generic_setmode(device_t dev, int mode) static void ata_sata_setmode(device_t dev, int mode) { + struct ata_pci_controller *ctlr = device_get_softc(GRANDPARENT(dev)); struct ata_device *atadev = device_get_softc(dev); /* @@ -220,7 +221,7 @@ ata_sata_setmode(device_t dev, int mode) atadev->param.satacapabilities != 0xffff) { if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, ata_limit_mode(dev, mode, ATA_UDMA6))) - atadev->mode = ATA_SA150; + atadev->mode = ctlr->chip->max_dma; } else { mode = ata_limit_mode(dev, mode, ATA_UDMA5); @@ -2233,6 +2234,8 @@ ata_promise_ident(device_t dev) { ATA_PDC20622, 0, PRMIO, PRSX4X, ATA_SA150, "Promise PDC20622" }, { ATA_PDC40518, 0, PRMIO, PRSATA2, ATA_SA150, "Promise PDC40518" }, { ATA_PDC40519, 0, PRMIO, PRSATA2, ATA_SA150, "Promise PDC40519" }, + { ATA_PDC40718, 0, PRMIO, PRSATA2, ATA_SA300, "Promise PDC40718" }, + { ATA_PDC40719, 0, PRMIO, PRSATA2, ATA_SA300, "Promise PDC40719" }, { 0, 0, 0, 0, 0, 0}}; char buffer[64]; uintptr_t devid = 0; diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h index 1f9e8c3832b7..8d29a0eb959b 100644 --- a/sys/dev/ata/ata-pci.h +++ b/sys/dev/ata/ata-pci.h @@ -203,6 +203,8 @@ struct ata_connect_task { #define ATA_PDC20580 0x3570105a #define ATA_PDC40518 0x3d18105a #define ATA_PDC40519 0x3519105a +#define ATA_PDC40718 0x3d17105a +#define ATA_PDC40719 0x3515105a #define ATA_PDC20617 0x6617105a #define ATA_PDC20618 0x6626105a #define ATA_PDC20619 0x6629105a