diff options
Diffstat (limited to 'usr/src/uts/intel/io')
-rw-r--r-- | usr/src/uts/intel/io/acpica/acpica.c | 4 | ||||
-rw-r--r-- | usr/src/uts/intel/io/dktp/controller/ata/ata_common.c | 39 | ||||
-rw-r--r-- | usr/src/uts/intel/io/dktp/controller/ata/ata_common.h | 3 | ||||
-rw-r--r-- | usr/src/uts/intel/io/dktp/controller/ata/atapi.c | 27 |
4 files changed, 42 insertions, 31 deletions
diff --git a/usr/src/uts/intel/io/acpica/acpica.c b/usr/src/uts/intel/io/acpica/acpica.c index 25b6f1dab7..283e06a164 100644 --- a/usr/src/uts/intel/io/acpica/acpica.c +++ b/usr/src/uts/intel/io/acpica/acpica.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* @@ -697,5 +697,5 @@ acpica_ddi_restore_resources(dev_info_t *dip) resbuf.Length = proplen; (void) AcpiSetCurrentResources(devobj, &resbuf); ddi_prop_free(propdata); - (void) ddi_prop_remove(DDI_DEV_T_ANY, dip, "acpi-crs"); + (void) ddi_prop_remove(DDI_DEV_T_NONE, dip, "acpi-crs"); } diff --git a/usr/src/uts/intel/io/dktp/controller/ata/ata_common.c b/usr/src/uts/intel/io/dktp/controller/ata/ata_common.c index 6de3774329..b18f3a12bf 100644 --- a/usr/src/uts/intel/io/dktp/controller/ata/ata_common.c +++ b/usr/src/uts/intel/io/dktp/controller/ata/ata_common.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -3551,12 +3551,12 @@ ata_resume_drive(ata_drv_t *ata_drvp) if (!ATAPIDRV(ata_drvp)) { /* Reset Ultra DMA mode */ - (void) ata_set_dma_mode(ata_ctlp, ata_drvp); + ata_reset_dma_mode(ata_drvp); if (!ata_disk_setup_parms(ata_ctlp, ata_drvp)) return; } else { (void) atapi_init_drive(ata_drvp); - (void) atapi_reset_dma_mode(ata_drvp); + atapi_reset_dma_mode(ata_drvp); } (void) ata_set_feature(ata_ctlp, ata_drvp, ATSF_DIS_REVPOD, 0); @@ -3858,3 +3858,36 @@ ata_set_dma_mode(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp) return (rval); } + +/* + * Reset Ultra DMA mode / MWDMA mode + */ +void +ata_reset_dma_mode(ata_drv_t *ata_drvp) +{ + uint8_t subcmd; + int mode; + ata_ctl_t *ata_ctlp = ata_drvp->ad_ctlp; + + switch (ata_drvp->ad_dma_cap) { + case ATA_DMA_ULTRAMODE: + subcmd = ATF_XFRMOD_UDMA; + for (mode = 0; mode <= 6; mode++) { + if (ata_drvp->ad_dma_mode & (1 << (mode + 8))) + break; + } + break; + case ATA_DMA_MWORDMODE: + subcmd = ATF_XFRMOD_MDMA; + mode = ((ata_drvp->ad_dma_mode & ATAC_MDMA_2_SEL) == + ATAC_MDMA_2_SEL ? 2 : + (ata_drvp->ad_dma_mode & ATAC_MDMA_1_SEL) == + ATAC_MDMA_1_SEL ? 1 : 0); + break; + default: + return; + } + + (void) ata_set_feature(ata_ctlp, ata_drvp, ATSF_SET_XFRMOD, + (subcmd | mode)); +} diff --git a/usr/src/uts/intel/io/dktp/controller/ata/ata_common.h b/usr/src/uts/intel/io/dktp/controller/ata/ata_common.h index 79617958e7..2df68e08bf 100644 --- a/usr/src/uts/intel/io/dktp/controller/ata/ata_common.h +++ b/usr/src/uts/intel/io/dktp/controller/ata/ata_common.h @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -684,6 +684,7 @@ int ata_wait3(ddi_acc_handle_t io_hdl, caddr_t ioaddr, uchar_t onbits1, int ata_test_lba_support(struct ata_id *aidp); void ata_nsecwait(clock_t count); int ata_set_dma_mode(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp); +void ata_reset_dma_mode(ata_drv_t *ata_drvp); void atapi_reset_dma_mode(ata_drv_t *ata_drvp); diff --git a/usr/src/uts/intel/io/dktp/controller/ata/atapi.c b/usr/src/uts/intel/io/dktp/controller/ata/atapi.c index d5a2b7d5c8..1715c516e0 100644 --- a/usr/src/uts/intel/io/dktp/controller/ata/atapi.c +++ b/usr/src/uts/intel/io/dktp/controller/ata/atapi.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -1208,31 +1208,8 @@ atapi_init_arq( void atapi_reset_dma_mode(ata_drv_t *ata_drvp) { - uint8_t subcmd; - int mode; ata_ctl_t *ata_ctlp = ata_drvp->ad_ctlp; - switch (ata_drvp->ad_dma_cap) { - case ATA_DMA_ULTRAMODE: - subcmd = ATF_XFRMOD_UDMA; - for (mode = 0; mode <= 6; mode++) { - if (ata_drvp->ad_dma_mode & (1 << (mode + 8))) - break; - } - break; - case ATA_DMA_MWORDMODE: - subcmd = ATF_XFRMOD_MDMA; - mode = ((ata_drvp->ad_dma_mode & ATAC_MDMA_2_SEL) == - ATAC_MDMA_2_SEL ? 2 : - (ata_drvp->ad_dma_mode & ATAC_MDMA_1_SEL) == - ATAC_MDMA_1_SEL ? 1 : 0); - break; - default: - return; - } - - (void) ata_set_feature(ata_ctlp, ata_drvp, ATSF_SET_XFRMOD, - (subcmd | mode)); - + ata_reset_dma_mode(ata_drvp); (void) atapi_id_update(ata_ctlp, ata_drvp, NULL); } |