提交 ab9c2322 编写于 作者: L Linus Torvalds

Merge branch 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev

* 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev: (119 commits)
  [libata] struct pci_dev related cleanups
  libata: use ata_exec_internal() for PMP register access
  libata: implement ATA_PFLAG_RESETTING
  libata: add @timeout to ata_exec_internal[_sg]()
  ahci: fix notification handling
  ahci: clean up PORT_IRQ_BAD_PMP enabling
  ahci: kill leftover from enabling NCQ over PMP
  libata: wrap schedule_timeout_uninterruptible() in loop
  libata: skip suppress reporting if ATA_EHI_QUIET
  libata: clear ehi description after initial host report
  pata_jmicron: match vendor and class code only
  libata: add ST9160821AS / 3.ALD to NCQ blacklist
  pata_acpi: ACPI driver support
  libata-core: Expose gtm methods for driver use
  libata: add HDT722516DLA380 to NCQ blacklist
  libata: blacklist NCQ on Seagate Barracuda ST380817AS
  [libata] Turn on ACPI by default
  libata_scsi: Fix ATAPI transfer lengths
  libata: correct handling of SRST reset sequences
  libata: Integrate ACPI-based PATA/SATA hotplug - version 5
  ...
...@@ -865,6 +865,10 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -865,6 +865,10 @@ and is between 256 and 4096 characters. It is defined in the file
lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip
Format: addr:<io>,irq:<irq> Format: addr:<io>,irq:<irq>
libata.noacpi [LIBATA] Disables use of ACPI in libata suspend/resume
when set.
Format: <int>
load_ramdisk= [RAM] List of ramdisks to load from floppy load_ramdisk= [RAM] List of ramdisks to load from floppy
See Documentation/ramdisk.txt. See Documentation/ramdisk.txt.
...@@ -1085,10 +1089,6 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -1085,10 +1089,6 @@ and is between 256 and 4096 characters. It is defined in the file
emulation library even if a 387 maths coprocessor emulation library even if a 387 maths coprocessor
is present. is present.
noacpi [LIBATA] Disables use of ACPI in libata suspend/resume
when set.
Format: <int>
noaliencache [MM, NUMA, SLAB] Disables the allocation of alien noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
caches in the slab allocator. Saves per-node memory, caches in the slab allocator. Saves per-node memory,
but will impact performance. but will impact performance.
......
...@@ -173,6 +173,15 @@ config SATA_INIC162X ...@@ -173,6 +173,15 @@ config SATA_INIC162X
help help
This option enables support for Initio 162x Serial ATA. This option enables support for Initio 162x Serial ATA.
config PATA_ACPI
tristate "ACPI firmware driver for PATA"
depends on ATA_ACPI
help
This option enables an ACPI method driver which drives
motherboard PATA controller interfaces through the ACPI
firmware in the BIOS. This driver can sometimes handle
otherwise unsupported hardware.
config PATA_ALI config PATA_ALI
tristate "ALi PATA support (Experimental)" tristate "ALi PATA support (Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI && EXPERIMENTAL
...@@ -192,16 +201,25 @@ config PATA_AMD ...@@ -192,16 +201,25 @@ config PATA_AMD
If unsure, say N. If unsure, say N.
config PATA_ARTOP config PATA_ARTOP
tristate "ARTOP 6210/6260 PATA support (Experimental)" tristate "ARTOP 6210/6260 PATA support"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for ARTOP PATA controllers. This option enables support for ARTOP PATA controllers.
If unsure, say N. If unsure, say N.
config PATA_AT32
tristate "Atmel AVR32 PATA support (Experimental)"
depends on AVR32 && PLATFORM_AT32AP && EXPERIMENTAL
help
This option enables support for the IDE devices on the
Atmel AT32AP platform.
If unsure, say N.
config PATA_ATIIXP config PATA_ATIIXP
tristate "ATI PATA support (Experimental)" tristate "ATI PATA support"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for the ATI ATA interfaces This option enables support for the ATI ATA interfaces
found on the many ATI chipsets. found on the many ATI chipsets.
...@@ -219,8 +237,8 @@ config PATA_CMD640_PCI ...@@ -219,8 +237,8 @@ config PATA_CMD640_PCI
If unsure, say N. If unsure, say N.
config PATA_CMD64X config PATA_CMD64X
tristate "CMD64x PATA support (Very Experimental)" tristate "CMD64x PATA support"
depends on PCI&& EXPERIMENTAL depends on PCI
help help
This option enables support for the CMD64x series chips This option enables support for the CMD64x series chips
except for the CMD640. except for the CMD640.
...@@ -282,8 +300,8 @@ config ATA_GENERIC ...@@ -282,8 +300,8 @@ config ATA_GENERIC
If unsure, say N. If unsure, say N.
config PATA_HPT366 config PATA_HPT366
tristate "HPT 366/368 PATA support (Experimental)" tristate "HPT 366/368 PATA support"
depends on PCI && EXPERIMENTAL depends on PCI
help help
This option enables support for the HPT 366 and 368 This option enables support for the HPT 366 and 368
PATA controllers via the new ATA layer. PATA controllers via the new ATA layer.
...@@ -432,6 +450,15 @@ config PATA_NS87410 ...@@ -432,6 +450,15 @@ config PATA_NS87410
If unsure, say N. If unsure, say N.
config PATA_NS87415
tristate "Nat Semi NS87415 PATA support (Experimental)"
depends on PCI && EXPERIMENTAL
help
This option enables support for the National Semiconductor
NS87415 PCI-IDE controller.
If unsure, say N.
config PATA_OPTI config PATA_OPTI
tristate "OPTI621/6215 PATA support (Very Experimental)" tristate "OPTI621/6215 PATA support (Very Experimental)"
depends on PCI && EXPERIMENTAL depends on PCI && EXPERIMENTAL
...@@ -596,4 +623,20 @@ config PATA_SCC ...@@ -596,4 +623,20 @@ config PATA_SCC
If unsure, say N. If unsure, say N.
config PATA_BF54X
tristate "Blackfin 54x ATAPI support"
depends on BF542 || BF548 || BF549
help
This option enables support for the built-in ATAPI controller on
Blackfin 54x family chips.
If unsure, say N.
config PATA_BF54X_DMA
bool "DMA mode"
depends on PATA_BF54X
default y
help
Enable DMA mode for Blackfin ATAPI controller.
endif # ATA endif # ATA
...@@ -21,6 +21,7 @@ obj-$(CONFIG_PDC_ADMA) += pdc_adma.o ...@@ -21,6 +21,7 @@ obj-$(CONFIG_PDC_ADMA) += pdc_adma.o
obj-$(CONFIG_PATA_ALI) += pata_ali.o obj-$(CONFIG_PATA_ALI) += pata_ali.o
obj-$(CONFIG_PATA_AMD) += pata_amd.o obj-$(CONFIG_PATA_AMD) += pata_amd.o
obj-$(CONFIG_PATA_ARTOP) += pata_artop.o obj-$(CONFIG_PATA_ARTOP) += pata_artop.o
obj-$(CONFIG_PATA_AT32) += pata_at32.o
obj-$(CONFIG_PATA_ATIIXP) += pata_atiixp.o obj-$(CONFIG_PATA_ATIIXP) += pata_atiixp.o
obj-$(CONFIG_PATA_CMD640_PCI) += pata_cmd640.o obj-$(CONFIG_PATA_CMD640_PCI) += pata_cmd640.o
obj-$(CONFIG_PATA_CMD64X) += pata_cmd64x.o obj-$(CONFIG_PATA_CMD64X) += pata_cmd64x.o
...@@ -39,6 +40,7 @@ obj-$(CONFIG_PATA_IT8213) += pata_it8213.o ...@@ -39,6 +40,7 @@ obj-$(CONFIG_PATA_IT8213) += pata_it8213.o
obj-$(CONFIG_PATA_JMICRON) += pata_jmicron.o obj-$(CONFIG_PATA_JMICRON) += pata_jmicron.o
obj-$(CONFIG_PATA_NETCELL) += pata_netcell.o obj-$(CONFIG_PATA_NETCELL) += pata_netcell.o
obj-$(CONFIG_PATA_NS87410) += pata_ns87410.o obj-$(CONFIG_PATA_NS87410) += pata_ns87410.o
obj-$(CONFIG_PATA_NS87415) += pata_ns87415.o
obj-$(CONFIG_PATA_OPTI) += pata_opti.o obj-$(CONFIG_PATA_OPTI) += pata_opti.o
obj-$(CONFIG_PATA_OPTIDMA) += pata_optidma.o obj-$(CONFIG_PATA_OPTIDMA) += pata_optidma.o
obj-$(CONFIG_PATA_MPC52xx) += pata_mpc52xx.o obj-$(CONFIG_PATA_MPC52xx) += pata_mpc52xx.o
...@@ -61,12 +63,16 @@ obj-$(CONFIG_PATA_SIS) += pata_sis.o ...@@ -61,12 +63,16 @@ obj-$(CONFIG_PATA_SIS) += pata_sis.o
obj-$(CONFIG_PATA_TRIFLEX) += pata_triflex.o obj-$(CONFIG_PATA_TRIFLEX) += pata_triflex.o
obj-$(CONFIG_PATA_IXP4XX_CF) += pata_ixp4xx_cf.o obj-$(CONFIG_PATA_IXP4XX_CF) += pata_ixp4xx_cf.o
obj-$(CONFIG_PATA_SCC) += pata_scc.o obj-$(CONFIG_PATA_SCC) += pata_scc.o
obj-$(CONFIG_PATA_BF54X) += pata_bf54x.o
obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o obj-$(CONFIG_PATA_PLATFORM) += pata_platform.o
obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o obj-$(CONFIG_PATA_ICSIDE) += pata_icside.o
# Should be last but two libata driver
obj-$(CONFIG_PATA_ACPI) += pata_acpi.o
# Should be last but one libata driver # Should be last but one libata driver
obj-$(CONFIG_ATA_GENERIC) += ata_generic.o obj-$(CONFIG_ATA_GENERIC) += ata_generic.o
# Should be last libata driver # Should be last libata driver
obj-$(CONFIG_PATA_LEGACY) += pata_legacy.o obj-$(CONFIG_PATA_LEGACY) += pata_legacy.o
libata-objs := libata-core.o libata-scsi.o libata-sff.o libata-eh.o libata-objs := libata-core.o libata-scsi.o libata-sff.o libata-eh.o \
libata-pmp.o
libata-$(CONFIG_ATA_ACPI) += libata-acpi.o libata-$(CONFIG_ATA_ACPI) += libata-acpi.o
此差异已折叠。
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
/** /**
* generic_set_mode - mode setting * generic_set_mode - mode setting
* @ap: interface to set up * @link: link to set up
* @unused: returned device on error * @unused: returned device on error
* *
* Use a non standard set_mode function. We don't want to be tuned. * Use a non standard set_mode function. We don't want to be tuned.
...@@ -43,24 +43,24 @@ ...@@ -43,24 +43,24 @@
* and respect them. * and respect them.
*/ */
static int generic_set_mode(struct ata_port *ap, struct ata_device **unused) static int generic_set_mode(struct ata_link *link, struct ata_device **unused)
{ {
struct ata_port *ap = link->ap;
int dma_enabled = 0; int dma_enabled = 0;
int i; struct ata_device *dev;
/* Bits 5 and 6 indicate if DMA is active on master/slave */ /* Bits 5 and 6 indicate if DMA is active on master/slave */
if (ap->ioaddr.bmdma_addr) if (ap->ioaddr.bmdma_addr)
dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS); dma_enabled = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
for (i = 0; i < ATA_MAX_DEVICES; i++) { ata_link_for_each_dev(dev, link) {
struct ata_device *dev = &ap->device[i];
if (ata_dev_enabled(dev)) { if (ata_dev_enabled(dev)) {
/* We don't really care */ /* We don't really care */
dev->pio_mode = XFER_PIO_0; dev->pio_mode = XFER_PIO_0;
dev->dma_mode = XFER_MW_DMA_0; dev->dma_mode = XFER_MW_DMA_0;
/* We do need the right mode information for DMA or PIO /* We do need the right mode information for DMA or PIO
and this comes from the current configuration flags */ and this comes from the current configuration flags */
if (dma_enabled & (1 << (5 + i))) { if (dma_enabled & (1 << (5 + dev->devno))) {
ata_id_to_dma_mode(dev, XFER_MW_DMA_0); ata_id_to_dma_mode(dev, XFER_MW_DMA_0);
dev->flags &= ~ATA_DFLAG_PIO; dev->flags &= ~ATA_DFLAG_PIO;
} else { } else {
...@@ -95,7 +95,6 @@ static struct scsi_host_template generic_sht = { ...@@ -95,7 +95,6 @@ static struct scsi_host_template generic_sht = {
static struct ata_port_operations generic_port_ops = { static struct ata_port_operations generic_port_ops = {
.set_mode = generic_set_mode, .set_mode = generic_set_mode,
.port_disable = ata_port_disable,
.tf_load = ata_tf_load, .tf_load = ata_tf_load,
.tf_read = ata_tf_read, .tf_read = ata_tf_read,
.check_status = ata_check_status, .check_status = ata_check_status,
...@@ -121,9 +120,8 @@ static struct ata_port_operations generic_port_ops = { ...@@ -121,9 +120,8 @@ static struct ata_port_operations generic_port_ops = {
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
.irq_on = ata_irq_on, .irq_on = ata_irq_on,
.irq_ack = ata_irq_ack,
.port_start = ata_port_start, .port_start = ata_sff_port_start,
}; };
static int all_generic_ide; /* Set to claim all devices */ static int all_generic_ide; /* Set to claim all devices */
......
...@@ -123,7 +123,6 @@ enum { ...@@ -123,7 +123,6 @@ enum {
ich_pata_33 = 1, /* ICH up to UDMA 33 only */ ich_pata_33 = 1, /* ICH up to UDMA 33 only */
ich_pata_66 = 2, /* ICH up to 66 Mhz */ ich_pata_66 = 2, /* ICH up to 66 Mhz */
ich_pata_100 = 3, /* ICH up to UDMA 100 */ ich_pata_100 = 3, /* ICH up to UDMA 100 */
ich_pata_133 = 4, /* ICH up to UDMA 133 */
ich5_sata = 5, ich5_sata = 5,
ich6_sata = 6, ich6_sata = 6,
ich6_sata_ahci = 7, ich6_sata_ahci = 7,
...@@ -199,7 +198,7 @@ static const struct pci_device_id piix_pci_tbl[] = { ...@@ -199,7 +198,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
{ 0x8086, 0x24CA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, { 0x8086, 0x24CA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
{ 0x8086, 0x24CB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, { 0x8086, 0x24CB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
/* Intel ICH5 */ /* Intel ICH5 */
{ 0x8086, 0x24DB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_133 }, { 0x8086, 0x24DB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
/* C-ICH (i810E2) */ /* C-ICH (i810E2) */
{ 0x8086, 0x245B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, { 0x8086, 0x245B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
/* ESB (855GME/875P + 6300ESB) UDMA 100 */ /* ESB (855GME/875P + 6300ESB) UDMA 100 */
...@@ -207,7 +206,7 @@ static const struct pci_device_id piix_pci_tbl[] = { ...@@ -207,7 +206,7 @@ static const struct pci_device_id piix_pci_tbl[] = {
/* ICH6 (and 6) (i915) UDMA 100 */ /* ICH6 (and 6) (i915) UDMA 100 */
{ 0x8086, 0x266F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, { 0x8086, 0x266F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
/* ICH7/7-R (i945, i975) UDMA 100*/ /* ICH7/7-R (i945, i975) UDMA 100*/
{ 0x8086, 0x27DF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_133 }, { 0x8086, 0x27DF, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
{ 0x8086, 0x269E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, { 0x8086, 0x269E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
/* ICH8 Mobile PATA Controller */ /* ICH8 Mobile PATA Controller */
{ 0x8086, 0x2850, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 }, { 0x8086, 0x2850, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich_pata_100 },
...@@ -290,7 +289,6 @@ static struct scsi_host_template piix_sht = { ...@@ -290,7 +289,6 @@ static struct scsi_host_template piix_sht = {
}; };
static const struct ata_port_operations piix_pata_ops = { static const struct ata_port_operations piix_pata_ops = {
.port_disable = ata_port_disable,
.set_piomode = piix_set_piomode, .set_piomode = piix_set_piomode,
.set_dmamode = piix_set_dmamode, .set_dmamode = piix_set_dmamode,
.mode_filter = ata_pci_default_filter, .mode_filter = ata_pci_default_filter,
...@@ -318,13 +316,11 @@ static const struct ata_port_operations piix_pata_ops = { ...@@ -318,13 +316,11 @@ static const struct ata_port_operations piix_pata_ops = {
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
.irq_on = ata_irq_on, .irq_on = ata_irq_on,
.irq_ack = ata_irq_ack,
.port_start = ata_port_start, .port_start = ata_port_start,
}; };
static const struct ata_port_operations ich_pata_ops = { static const struct ata_port_operations ich_pata_ops = {
.port_disable = ata_port_disable,
.set_piomode = piix_set_piomode, .set_piomode = piix_set_piomode,
.set_dmamode = ich_set_dmamode, .set_dmamode = ich_set_dmamode,
.mode_filter = ata_pci_default_filter, .mode_filter = ata_pci_default_filter,
...@@ -352,14 +348,11 @@ static const struct ata_port_operations ich_pata_ops = { ...@@ -352,14 +348,11 @@ static const struct ata_port_operations ich_pata_ops = {
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
.irq_on = ata_irq_on, .irq_on = ata_irq_on,
.irq_ack = ata_irq_ack,
.port_start = ata_port_start, .port_start = ata_port_start,
}; };
static const struct ata_port_operations piix_sata_ops = { static const struct ata_port_operations piix_sata_ops = {
.port_disable = ata_port_disable,
.tf_load = ata_tf_load, .tf_load = ata_tf_load,
.tf_read = ata_tf_read, .tf_read = ata_tf_read,
.check_status = ata_check_status, .check_status = ata_check_status,
...@@ -382,7 +375,6 @@ static const struct ata_port_operations piix_sata_ops = { ...@@ -382,7 +375,6 @@ static const struct ata_port_operations piix_sata_ops = {
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
.irq_on = ata_irq_on, .irq_on = ata_irq_on,
.irq_ack = ata_irq_ack,
.port_start = ata_port_start, .port_start = ata_port_start,
}; };
...@@ -466,7 +458,7 @@ static const struct piix_map_db *piix_map_db_table[] = { ...@@ -466,7 +458,7 @@ static const struct piix_map_db *piix_map_db_table[] = {
}; };
static struct ata_port_info piix_port_info[] = { static struct ata_port_info piix_port_info[] = {
/* piix_pata_33: 0: PIIX4 at 33MHz */ [piix_pata_33] = /* PIIX4 at 33MHz */
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_PATA_FLAGS, .flags = PIIX_PATA_FLAGS,
...@@ -476,7 +468,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -476,7 +468,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_pata_ops, .port_ops = &piix_pata_ops,
}, },
/* ich_pata_33: 1 ICH0 - ICH at 33Mhz*/ [ich_pata_33] = /* ICH0 - ICH at 33Mhz*/
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_PATA_FLAGS, .flags = PIIX_PATA_FLAGS,
...@@ -485,7 +477,8 @@ static struct ata_port_info piix_port_info[] = { ...@@ -485,7 +477,8 @@ static struct ata_port_info piix_port_info[] = {
.udma_mask = ATA_UDMA2, /* UDMA33 */ .udma_mask = ATA_UDMA2, /* UDMA33 */
.port_ops = &ich_pata_ops, .port_ops = &ich_pata_ops,
}, },
/* ich_pata_66: 2 ICH controllers up to 66MHz */
[ich_pata_66] = /* ICH controllers up to 66MHz */
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_PATA_FLAGS, .flags = PIIX_PATA_FLAGS,
...@@ -495,7 +488,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -495,7 +488,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &ich_pata_ops, .port_ops = &ich_pata_ops,
}, },
/* ich_pata_100: 3 */ [ich_pata_100] =
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_PATA_FLAGS | PIIX_FLAG_CHECKINTR, .flags = PIIX_PATA_FLAGS | PIIX_FLAG_CHECKINTR,
...@@ -505,17 +498,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -505,17 +498,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &ich_pata_ops, .port_ops = &ich_pata_ops,
}, },
/* ich_pata_133: 4 ICH with full UDMA6 */ [ich5_sata] =
{
.sht = &piix_sht,
.flags = PIIX_PATA_FLAGS | PIIX_FLAG_CHECKINTR,
.pio_mask = 0x1f, /* pio 0-4 */
.mwdma_mask = 0x06, /* Check: maybe 0x07 */
.udma_mask = ATA_UDMA6, /* UDMA133 */
.port_ops = &ich_pata_ops,
},
/* ich5_sata: 5 */
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_SATA_FLAGS, .flags = PIIX_SATA_FLAGS,
...@@ -525,7 +508,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -525,7 +508,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_sata_ops, .port_ops = &piix_sata_ops,
}, },
/* ich6_sata: 6 */ [ich6_sata] =
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR, .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR,
...@@ -535,7 +518,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -535,7 +518,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_sata_ops, .port_ops = &piix_sata_ops,
}, },
/* ich6_sata_ahci: 7 */ [ich6_sata_ahci] =
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
...@@ -546,7 +529,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -546,7 +529,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_sata_ops, .port_ops = &piix_sata_ops,
}, },
/* ich6m_sata_ahci: 8 */ [ich6m_sata_ahci] =
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
...@@ -557,7 +540,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -557,7 +540,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_sata_ops, .port_ops = &piix_sata_ops,
}, },
/* ich8_sata_ahci: 9 */ [ich8_sata_ahci] =
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
...@@ -568,7 +551,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -568,7 +551,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_sata_ops, .port_ops = &piix_sata_ops,
}, },
/* piix_pata_mwdma: 10: PIIX3 MWDMA only */ [piix_pata_mwdma] = /* PIIX3 MWDMA only */
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_PATA_FLAGS, .flags = PIIX_PATA_FLAGS,
...@@ -577,7 +560,7 @@ static struct ata_port_info piix_port_info[] = { ...@@ -577,7 +560,7 @@ static struct ata_port_info piix_port_info[] = {
.port_ops = &piix_pata_ops, .port_ops = &piix_pata_ops,
}, },
/* tolapai_sata_ahci: 11: */ [tolapai_sata_ahci] =
{ {
.sht = &piix_sht, .sht = &piix_sht,
.flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
...@@ -615,6 +598,7 @@ static const struct ich_laptop ich_laptop[] = { ...@@ -615,6 +598,7 @@ static const struct ich_laptop ich_laptop[] = {
{ 0x27DF, 0x0005, 0x0280 }, /* ICH7 on Acer 5602WLMi */ { 0x27DF, 0x0005, 0x0280 }, /* ICH7 on Acer 5602WLMi */
{ 0x27DF, 0x1025, 0x0110 }, /* ICH7 on Acer 3682WLMi */ { 0x27DF, 0x1025, 0x0110 }, /* ICH7 on Acer 3682WLMi */
{ 0x27DF, 0x1043, 0x1267 }, /* ICH7 on Asus W5F */ { 0x27DF, 0x1043, 0x1267 }, /* ICH7 on Asus W5F */
{ 0x27DF, 0x103C, 0x30A1 }, /* ICH7 on HP Compaq nc2400 */
{ 0x24CA, 0x1025, 0x0061 }, /* ICH4 on ACER Aspire 2023WLMi */ { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on ACER Aspire 2023WLMi */
/* end marker */ /* end marker */
{ 0, } { 0, }
...@@ -657,19 +641,20 @@ static int ich_pata_cable_detect(struct ata_port *ap) ...@@ -657,19 +641,20 @@ static int ich_pata_cable_detect(struct ata_port *ap)
/** /**
* piix_pata_prereset - prereset for PATA host controller * piix_pata_prereset - prereset for PATA host controller
* @ap: Target port * @link: Target link
* @deadline: deadline jiffies for the operation * @deadline: deadline jiffies for the operation
* *
* LOCKING: * LOCKING:
* None (inherited from caller). * None (inherited from caller).
*/ */
static int piix_pata_prereset(struct ata_port *ap, unsigned long deadline) static int piix_pata_prereset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
struct pci_dev *pdev = to_pci_dev(ap->host->dev); struct pci_dev *pdev = to_pci_dev(ap->host->dev);
if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &piix_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static void piix_pata_error_handler(struct ata_port *ap) static void piix_pata_error_handler(struct ata_port *ap)
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/libata.h> #include <linux/libata.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <scsi/scsi_device.h>
#include "libata.h" #include "libata.h"
#include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h>
...@@ -40,11 +41,40 @@ static int is_pci_dev(struct device *dev) ...@@ -40,11 +41,40 @@ static int is_pci_dev(struct device *dev)
return (dev->bus == &pci_bus_type); return (dev->bus == &pci_bus_type);
} }
static void ata_acpi_associate_sata_port(struct ata_port *ap) /**
* ata_acpi_associate_sata_port - associate SATA port with ACPI objects
* @ap: target SATA port
*
* Look up ACPI objects associated with @ap and initialize acpi_handle
* fields of @ap, the port and devices accordingly.
*
* LOCKING:
* EH context.
*
* RETURNS:
* 0 on success, -errno on failure.
*/
void ata_acpi_associate_sata_port(struct ata_port *ap)
{ {
WARN_ON(!(ap->flags & ATA_FLAG_ACPI_SATA));
if (!ap->nr_pmp_links) {
acpi_integer adr = SATA_ADR(ap->port_no, NO_PORT_MULT); acpi_integer adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
ap->device->acpi_handle = acpi_get_child(ap->host->acpi_handle, adr); ap->link.device->acpi_handle =
acpi_get_child(ap->host->acpi_handle, adr);
} else {
struct ata_link *link;
ap->link.device->acpi_handle = NULL;
ata_port_for_each_link(link, ap) {
acpi_integer adr = SATA_ADR(ap->port_no, link->pmp);
link->device->acpi_handle =
acpi_get_child(ap->host->acpi_handle, adr);
}
}
} }
static void ata_acpi_associate_ide_port(struct ata_port *ap) static void ata_acpi_associate_ide_port(struct ata_port *ap)
...@@ -60,12 +90,53 @@ static void ata_acpi_associate_ide_port(struct ata_port *ap) ...@@ -60,12 +90,53 @@ static void ata_acpi_associate_ide_port(struct ata_port *ap)
max_devices++; max_devices++;
for (i = 0; i < max_devices; i++) { for (i = 0; i < max_devices; i++) {
struct ata_device *dev = &ap->device[i]; struct ata_device *dev = &ap->link.device[i];
dev->acpi_handle = acpi_get_child(ap->acpi_handle, i); dev->acpi_handle = acpi_get_child(ap->acpi_handle, i);
} }
} }
static void ata_acpi_handle_hotplug (struct ata_port *ap, struct kobject *kobj,
u32 event)
{
char event_string[12];
char *envp[] = { event_string, NULL };
struct ata_eh_info *ehi = &ap->link.eh_info;
if (event == 0 || event == 1) {
unsigned long flags;
spin_lock_irqsave(ap->lock, flags);
ata_ehi_clear_desc(ehi);
ata_ehi_push_desc(ehi, "ACPI event");
ata_ehi_hotplugged(ehi);
ata_port_freeze(ap);
spin_unlock_irqrestore(ap->lock, flags);
}
if (kobj) {
sprintf(event_string, "BAY_EVENT=%d", event);
kobject_uevent_env(kobj, KOBJ_CHANGE, envp);
}
}
static void ata_acpi_dev_notify(acpi_handle handle, u32 event, void *data)
{
struct ata_device *dev = data;
struct kobject *kobj = NULL;
if (dev->sdev)
kobj = &dev->sdev->sdev_gendev.kobj;
ata_acpi_handle_hotplug (dev->link->ap, kobj, event);
}
static void ata_acpi_ap_notify(acpi_handle handle, u32 event, void *data)
{
struct ata_port *ap = data;
ata_acpi_handle_hotplug (ap, &ap->dev->kobj, event);
}
/** /**
* ata_acpi_associate - associate ATA host with ACPI objects * ata_acpi_associate - associate ATA host with ACPI objects
* @host: target ATA host * @host: target ATA host
...@@ -81,7 +152,7 @@ static void ata_acpi_associate_ide_port(struct ata_port *ap) ...@@ -81,7 +152,7 @@ static void ata_acpi_associate_ide_port(struct ata_port *ap)
*/ */
void ata_acpi_associate(struct ata_host *host) void ata_acpi_associate(struct ata_host *host)
{ {
int i; int i, j;
if (!is_pci_dev(host->dev) || libata_noacpi) if (!is_pci_dev(host->dev) || libata_noacpi)
return; return;
...@@ -97,6 +168,22 @@ void ata_acpi_associate(struct ata_host *host) ...@@ -97,6 +168,22 @@ void ata_acpi_associate(struct ata_host *host)
ata_acpi_associate_sata_port(ap); ata_acpi_associate_sata_port(ap);
else else
ata_acpi_associate_ide_port(ap); ata_acpi_associate_ide_port(ap);
if (ap->acpi_handle)
acpi_install_notify_handler (ap->acpi_handle,
ACPI_SYSTEM_NOTIFY,
ata_acpi_ap_notify,
ap);
for (j = 0; j < ata_link_max_devices(&ap->link); j++) {
struct ata_device *dev = &ap->link.device[j];
if (dev->acpi_handle)
acpi_install_notify_handler (dev->acpi_handle,
ACPI_SYSTEM_NOTIFY,
ata_acpi_dev_notify,
dev);
}
} }
} }
...@@ -113,7 +200,7 @@ void ata_acpi_associate(struct ata_host *host) ...@@ -113,7 +200,7 @@ void ata_acpi_associate(struct ata_host *host)
* RETURNS: * RETURNS:
* 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure. * 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure.
*/ */
static int ata_acpi_gtm(const struct ata_port *ap, struct ata_acpi_gtm *gtm) int ata_acpi_gtm(const struct ata_port *ap, struct ata_acpi_gtm *gtm)
{ {
struct acpi_buffer output = { .length = ACPI_ALLOCATE_BUFFER }; struct acpi_buffer output = { .length = ACPI_ALLOCATE_BUFFER };
union acpi_object *out_obj; union acpi_object *out_obj;
...@@ -157,6 +244,8 @@ static int ata_acpi_gtm(const struct ata_port *ap, struct ata_acpi_gtm *gtm) ...@@ -157,6 +244,8 @@ static int ata_acpi_gtm(const struct ata_port *ap, struct ata_acpi_gtm *gtm)
return rc; return rc;
} }
EXPORT_SYMBOL_GPL(ata_acpi_gtm);
/** /**
* ata_acpi_stm - execute _STM * ata_acpi_stm - execute _STM
* @ap: target ATA port * @ap: target ATA port
...@@ -170,7 +259,7 @@ static int ata_acpi_gtm(const struct ata_port *ap, struct ata_acpi_gtm *gtm) ...@@ -170,7 +259,7 @@ static int ata_acpi_gtm(const struct ata_port *ap, struct ata_acpi_gtm *gtm)
* RETURNS: * RETURNS:
* 0 on success, -ENOENT if _STM doesn't exist, -errno on failure. * 0 on success, -ENOENT if _STM doesn't exist, -errno on failure.
*/ */
static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm) int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm)
{ {
acpi_status status; acpi_status status;
struct acpi_object_list input; struct acpi_object_list input;
...@@ -182,10 +271,10 @@ static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm) ...@@ -182,10 +271,10 @@ static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm)
/* Buffers for id may need byteswapping ? */ /* Buffers for id may need byteswapping ? */
in_params[1].type = ACPI_TYPE_BUFFER; in_params[1].type = ACPI_TYPE_BUFFER;
in_params[1].buffer.length = 512; in_params[1].buffer.length = 512;
in_params[1].buffer.pointer = (u8 *)ap->device[0].id; in_params[1].buffer.pointer = (u8 *)ap->link.device[0].id;
in_params[2].type = ACPI_TYPE_BUFFER; in_params[2].type = ACPI_TYPE_BUFFER;
in_params[2].buffer.length = 512; in_params[2].buffer.length = 512;
in_params[2].buffer.pointer = (u8 *)ap->device[1].id; in_params[2].buffer.pointer = (u8 *)ap->link.device[1].id;
input.count = 3; input.count = 3;
input.pointer = in_params; input.pointer = in_params;
...@@ -202,6 +291,8 @@ static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm) ...@@ -202,6 +291,8 @@ static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(ata_acpi_stm);
/** /**
* ata_dev_get_GTF - get the drive bootup default taskfile settings * ata_dev_get_GTF - get the drive bootup default taskfile settings
* @dev: target ATA device * @dev: target ATA device
...@@ -226,7 +317,7 @@ static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm) ...@@ -226,7 +317,7 @@ static int ata_acpi_stm(const struct ata_port *ap, struct ata_acpi_gtm *stm)
static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf, static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf,
void **ptr_to_free) void **ptr_to_free)
{ {
struct ata_port *ap = dev->ap; struct ata_port *ap = dev->link->ap;
acpi_status status; acpi_status status;
struct acpi_buffer output; struct acpi_buffer output;
union acpi_object *out_obj; union acpi_object *out_obj;
...@@ -295,6 +386,44 @@ static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf, ...@@ -295,6 +386,44 @@ static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf,
return rc; return rc;
} }
/**
* ata_acpi_cbl_80wire - Check for 80 wire cable
* @ap: Port to check
*
* Return 1 if the ACPI mode data for this port indicates the BIOS selected
* an 80wire mode.
*/
int ata_acpi_cbl_80wire(struct ata_port *ap)
{
struct ata_acpi_gtm gtm;
int valid = 0;
/* No _GTM data, no information */
if (ata_acpi_gtm(ap, &gtm) < 0)
return 0;
/* Split timing, DMA enabled */
if ((gtm.flags & 0x11) == 0x11 && gtm.drive[0].dma < 55)
valid |= 1;
if ((gtm.flags & 0x14) == 0x14 && gtm.drive[1].dma < 55)
valid |= 2;
/* Shared timing, DMA enabled */
if ((gtm.flags & 0x11) == 0x01 && gtm.drive[0].dma < 55)
valid |= 1;
if ((gtm.flags & 0x14) == 0x04 && gtm.drive[0].dma < 55)
valid |= 2;
/* Drive check */
if ((valid & 1) && ata_dev_enabled(&ap->link.device[0]))
return 1;
if ((valid & 2) && ata_dev_enabled(&ap->link.device[1]))
return 1;
return 0;
}
EXPORT_SYMBOL_GPL(ata_acpi_cbl_80wire);
/** /**
* taskfile_load_raw - send taskfile registers to host controller * taskfile_load_raw - send taskfile registers to host controller
* @dev: target ATA device * @dev: target ATA device
...@@ -320,7 +449,7 @@ static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf, ...@@ -320,7 +449,7 @@ static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf,
static int taskfile_load_raw(struct ata_device *dev, static int taskfile_load_raw(struct ata_device *dev,
const struct ata_acpi_gtf *gtf) const struct ata_acpi_gtf *gtf)
{ {
struct ata_port *ap = dev->ap; struct ata_port *ap = dev->link->ap;
struct ata_taskfile tf, rtf; struct ata_taskfile tf, rtf;
unsigned int err_mask; unsigned int err_mask;
...@@ -349,7 +478,7 @@ static int taskfile_load_raw(struct ata_device *dev, ...@@ -349,7 +478,7 @@ static int taskfile_load_raw(struct ata_device *dev,
tf.lbal, tf.lbam, tf.lbah, tf.device); tf.lbal, tf.lbam, tf.lbah, tf.device);
rtf = tf; rtf = tf;
err_mask = ata_exec_internal(dev, &rtf, NULL, DMA_NONE, NULL, 0); err_mask = ata_exec_internal(dev, &rtf, NULL, DMA_NONE, NULL, 0, 0);
if (err_mask) { if (err_mask) {
ata_dev_printk(dev, KERN_ERR, ata_dev_printk(dev, KERN_ERR,
"ACPI cmd %02x/%02x:%02x:%02x:%02x:%02x:%02x failed " "ACPI cmd %02x/%02x:%02x:%02x:%02x:%02x:%02x failed "
...@@ -424,7 +553,7 @@ static int ata_acpi_exec_tfs(struct ata_device *dev) ...@@ -424,7 +553,7 @@ static int ata_acpi_exec_tfs(struct ata_device *dev)
*/ */
static int ata_acpi_push_id(struct ata_device *dev) static int ata_acpi_push_id(struct ata_device *dev)
{ {
struct ata_port *ap = dev->ap; struct ata_port *ap = dev->link->ap;
int err; int err;
acpi_status status; acpi_status status;
struct acpi_object_list input; struct acpi_object_list input;
...@@ -508,7 +637,7 @@ int ata_acpi_on_suspend(struct ata_port *ap) ...@@ -508,7 +637,7 @@ int ata_acpi_on_suspend(struct ata_port *ap)
*/ */
void ata_acpi_on_resume(struct ata_port *ap) void ata_acpi_on_resume(struct ata_port *ap)
{ {
int i; struct ata_device *dev;
if (ap->acpi_handle && (ap->pflags & ATA_PFLAG_GTM_VALID)) { if (ap->acpi_handle && (ap->pflags & ATA_PFLAG_GTM_VALID)) {
BUG_ON(ap->flags & ATA_FLAG_ACPI_SATA); BUG_ON(ap->flags & ATA_FLAG_ACPI_SATA);
...@@ -518,8 +647,8 @@ void ata_acpi_on_resume(struct ata_port *ap) ...@@ -518,8 +647,8 @@ void ata_acpi_on_resume(struct ata_port *ap)
} }
/* schedule _GTF */ /* schedule _GTF */
for (i = 0; i < ATA_MAX_DEVICES; i++) ata_link_for_each_dev(dev, &ap->link)
ap->device[i].flags |= ATA_DFLAG_ACPI_PENDING; dev->flags |= ATA_DFLAG_ACPI_PENDING;
} }
/** /**
...@@ -538,8 +667,8 @@ void ata_acpi_on_resume(struct ata_port *ap) ...@@ -538,8 +667,8 @@ void ata_acpi_on_resume(struct ata_port *ap)
*/ */
int ata_acpi_on_devcfg(struct ata_device *dev) int ata_acpi_on_devcfg(struct ata_device *dev)
{ {
struct ata_port *ap = dev->ap; struct ata_port *ap = dev->link->ap;
struct ata_eh_context *ehc = &ap->eh_context; struct ata_eh_context *ehc = &ap->link.eh_context;
int acpi_sata = ap->flags & ATA_FLAG_ACPI_SATA; int acpi_sata = ap->flags & ATA_FLAG_ACPI_SATA;
int rc; int rc;
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -33,8 +33,9 @@ enum { ...@@ -33,8 +33,9 @@ enum {
ATIIXP_IDE_UDMA_MODE = 0x56 ATIIXP_IDE_UDMA_MODE = 0x56
}; };
static int atiixp_pre_reset(struct ata_port *ap, unsigned long deadline) static int atiixp_pre_reset(struct ata_link *link, unsigned long deadline)
{ {
struct ata_port *ap = link->ap;
static const struct pci_bits atiixp_enable_bits[] = { static const struct pci_bits atiixp_enable_bits[] = {
{ 0x48, 1, 0x01, 0x00 }, { 0x48, 1, 0x01, 0x00 },
{ 0x48, 1, 0x08, 0x00 } { 0x48, 1, 0x08, 0x00 }
...@@ -44,7 +45,7 @@ static int atiixp_pre_reset(struct ata_port *ap, unsigned long deadline) ...@@ -44,7 +45,7 @@ static int atiixp_pre_reset(struct ata_port *ap, unsigned long deadline)
if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no])) if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no]))
return -ENOENT; return -ENOENT;
return ata_std_prereset(ap, deadline); return ata_std_prereset(link, deadline);
} }
static void atiixp_error_handler(struct ata_port *ap) static void atiixp_error_handler(struct ata_port *ap)
...@@ -172,6 +173,9 @@ static void atiixp_set_dmamode(struct ata_port *ap, struct ata_device *adev) ...@@ -172,6 +173,9 @@ static void atiixp_set_dmamode(struct ata_port *ap, struct ata_device *adev)
* *
* When DMA begins we need to ensure that the UDMA control * When DMA begins we need to ensure that the UDMA control
* register for the channel is correctly set. * register for the channel is correctly set.
*
* Note: The host lock held by the libata layer protects
* us from two channels both trying to set DMA bits at once
*/ */
static void atiixp_bmdma_start(struct ata_queued_cmd *qc) static void atiixp_bmdma_start(struct ata_queued_cmd *qc)
...@@ -198,6 +202,9 @@ static void atiixp_bmdma_start(struct ata_queued_cmd *qc) ...@@ -198,6 +202,9 @@ static void atiixp_bmdma_start(struct ata_queued_cmd *qc)
* *
* DMA has completed. Clear the UDMA flag as the next operations will * DMA has completed. Clear the UDMA flag as the next operations will
* be PIO ones not UDMA data transfer. * be PIO ones not UDMA data transfer.
*
* Note: The host lock held by the libata layer protects
* us from two channels both trying to set DMA bits at once
*/ */
static void atiixp_bmdma_stop(struct ata_queued_cmd *qc) static void atiixp_bmdma_stop(struct ata_queued_cmd *qc)
...@@ -232,7 +239,6 @@ static struct scsi_host_template atiixp_sht = { ...@@ -232,7 +239,6 @@ static struct scsi_host_template atiixp_sht = {
}; };
static struct ata_port_operations atiixp_port_ops = { static struct ata_port_operations atiixp_port_ops = {
.port_disable = ata_port_disable,
.set_piomode = atiixp_set_piomode, .set_piomode = atiixp_set_piomode,
.set_dmamode = atiixp_set_dmamode, .set_dmamode = atiixp_set_dmamode,
.mode_filter = ata_pci_default_filter, .mode_filter = ata_pci_default_filter,
...@@ -261,9 +267,8 @@ static struct ata_port_operations atiixp_port_ops = { ...@@ -261,9 +267,8 @@ static struct ata_port_operations atiixp_port_ops = {
.irq_handler = ata_interrupt, .irq_handler = ata_interrupt,
.irq_clear = ata_bmdma_irq_clear, .irq_clear = ata_bmdma_irq_clear,
.irq_on = ata_irq_on, .irq_on = ata_irq_on,
.irq_ack = ata_irq_ack,
.port_start = ata_port_start, .port_start = ata_sff_port_start,
}; };
static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册