Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8930ff25 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

libata-sff: clean up inheritance in several drivers



1. pata_cmd640 is PIO only.  Inherit from sff.

2. pata_macio is BMDMA.  Inherit from bmdma and drop explicit
   bmdma_mode_filter() setting.

3. In sata_mv, unlike mv5, mv6 is BMDMA.  Inherit from bmdma and
   don't clear ->post_internal_cmd().

4. bf54x and icside are quasi-BMDMA controllers which don't use the
   standard BMDMA registers so they don't initialize bmdma_addr and
   inherit from sff to avoid the default mode_filter which disables
   DMA modes if bmdma_addr is not initialized.

For 2 and 3, this patch makes the drivers explicitly specify
->mode_filter to ATA_OP_NULL while inheriting from ata_bmdma_port_ops.
These will be removed by the next patch.

This patch makes all and only BMDMA drivers inherit from
ata_bmdma_port_ops to ease further SFF/BMDMA separation.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 9f2f7210
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1421,7 +1421,7 @@ static struct scsi_host_template bfin_sht = {
};

static struct ata_port_operations bfin_pata_ops = {
	.inherits		= &ata_sff_port_ops,
	.inherits		= &ata_bmdma_port_ops,

	.set_piomode		= bfin_set_piomode,
	.set_dmamode		= bfin_set_dmamode,
@@ -1450,6 +1450,8 @@ static struct ata_port_operations bfin_pata_ops = {

	.port_start		= bfin_port_start,
	.port_stop		= bfin_port_stop,

	.mode_filter		= ATA_OP_NULL,	/* will be removed soon */
};

static struct ata_port_info bfin_port_info[] = {
+2 −2
Original line number Diff line number Diff line
@@ -166,11 +166,11 @@ static int cmd640_port_start(struct ata_port *ap)
}

static struct scsi_host_template cmd640_sht = {
	ATA_BMDMA_SHT(DRV_NAME),
	ATA_PIO_SHT(DRV_NAME),
};

static struct ata_port_operations cmd640_port_ops = {
	.inherits	= &ata_bmdma_port_ops,
	.inherits	= &ata_sff_port_ops,
	/* In theory xfer_noirq is not needed once we kill the prefetcher */
	.sff_data_xfer	= ata_sff_data_xfer_noirq,
	.qc_issue	= cmd640_qc_issue,
+3 −1
Original line number Diff line number Diff line
@@ -321,7 +321,7 @@ static void pata_icside_postreset(struct ata_link *link, unsigned int *classes)
}

static struct ata_port_operations pata_icside_port_ops = {
	.inherits		= &ata_sff_port_ops,
	.inherits		= &ata_bmdma_port_ops,
	/* no need to build any PRD tables for DMA */
	.qc_prep		= ata_noop_qc_prep,
	.sff_data_xfer		= ata_sff_data_xfer_noirq,
@@ -334,6 +334,8 @@ static struct ata_port_operations pata_icside_port_ops = {
	.set_dmamode		= pata_icside_set_dmamode,
	.postreset		= pata_icside_postreset,
	.post_internal_cmd	= pata_icside_bmdma_stop,

	.mode_filter		= ATA_OP_NULL,	/* will be removed soon */
};

static void __devinit
+1 −2
Original line number Diff line number Diff line
@@ -917,7 +917,7 @@ static struct scsi_host_template pata_macio_sht = {
};

static struct ata_port_operations pata_macio_ops = {
	.inherits		= &ata_sff_port_ops,
	.inherits		= &ata_bmdma_port_ops,

	.freeze			= pata_macio_freeze,
	.set_piomode		= pata_macio_set_timings,
@@ -925,7 +925,6 @@ static struct ata_port_operations pata_macio_ops = {
	.cable_detect		= pata_macio_cable_detect,
	.sff_dev_select		= pata_macio_dev_select,
	.qc_prep		= pata_macio_qc_prep,
	.mode_filter		= ata_bmdma_mode_filter,
	.bmdma_setup		= pata_macio_bmdma_setup,
	.bmdma_start		= pata_macio_bmdma_start,
	.bmdma_stop		= pata_macio_bmdma_stop,
+20 −4
Original line number Diff line number Diff line
@@ -686,16 +686,27 @@ static struct ata_port_operations mv5_ops = {
};

static struct ata_port_operations mv6_ops = {
	.inherits		= &mv5_ops,
	.inherits		= &ata_bmdma_port_ops,

	.lost_interrupt		= ATA_OP_NULL,

	.qc_defer		= mv_qc_defer,
	.qc_prep		= mv_qc_prep,
	.qc_issue		= mv_qc_issue,

	.dev_config             = mv6_dev_config,
	.scr_read		= mv_scr_read,
	.scr_write		= mv_scr_write,

	.freeze			= mv_eh_freeze,
	.thaw			= mv_eh_thaw,
	.hardreset		= mv_hardreset,
	.softreset		= mv_softreset,
	.pmp_hardreset		= mv_pmp_hardreset,
	.pmp_softreset		= mv_softreset,
	.softreset		= mv_softreset,
	.error_handler		= mv_pmp_error_handler,

	.scr_read		= mv_scr_read,
	.scr_write		= mv_scr_write,

	.sff_check_status	= mv_sff_check_status,
	.sff_irq_clear		= mv_sff_irq_clear,
	.check_atapi_dma	= mv_check_atapi_dma,
@@ -703,6 +714,11 @@ static struct ata_port_operations mv6_ops = {
	.bmdma_start		= mv_bmdma_start,
	.bmdma_stop		= mv_bmdma_stop,
	.bmdma_status		= mv_bmdma_status,

	.port_start		= mv_port_start,
	.port_stop		= mv_port_stop,

	.mode_filter            = ATA_OP_NULL,  /* will be removed soon */
};

static struct ata_port_operations mv_iie_ops = {