]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ata/pata_legacy.c
libata: rename SFF port ops
[linux-2.6-omap-h63xx.git] / drivers / ata / pata_legacy.c
index d2177f75078adf540f05c835b22fa4b6df0e852d..7af4b29cc4220af1aecef92e1bfd9b0c9d079cc9 100644 (file)
@@ -208,21 +208,12 @@ static int legacy_set_mode(struct ata_link *link, struct ata_device **unused)
 }
 
 static struct scsi_host_template legacy_sht = {
-       .module                 = THIS_MODULE,
-       .name                   = DRV_NAME,
-       .ioctl                  = ata_scsi_ioctl,
-       .queuecommand           = ata_scsi_queuecmd,
-       .can_queue              = ATA_DEF_QUEUE,
-       .this_id                = ATA_SHT_THIS_ID,
-       .sg_tablesize           = LIBATA_MAX_PRD,
-       .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
-       .emulated               = ATA_SHT_EMULATED,
-       .use_clustering         = ATA_SHT_USE_CLUSTERING,
-       .proc_name              = DRV_NAME,
-       .dma_boundary           = ATA_DMA_BOUNDARY,
-       .slave_configure        = ata_scsi_slave_config,
-       .slave_destroy          = ata_scsi_slave_destroy,
-       .bios_param             = ata_std_bios_param,
+       ATA_PIO_SHT(DRV_NAME),
+};
+
+static const struct ata_port_operations legacy_base_port_ops = {
+       .inherits       = &ata_sff_port_ops,
+       .cable_detect   = ata_cable_40wire,
 };
 
 /*
@@ -234,55 +225,14 @@ static struct scsi_host_template legacy_sht = {
  */
 
 static struct ata_port_operations simple_port_ops = {
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = ata_data_xfer_noirq,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .inherits       = &legacy_base_port_ops,
+       .sff_data_xfer  = ata_sff_data_xfer_noirq,
 };
 
 static struct ata_port_operations legacy_port_ops = {
+       .inherits       = &legacy_base_port_ops,
+       .sff_data_xfer  = ata_sff_data_xfer_noirq,
        .set_mode       = legacy_set_mode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-       .cable_detect   = ata_cable_40wire,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = ata_data_xfer_noirq,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
 };
 
 /*
@@ -367,36 +317,15 @@ static unsigned int pdc_data_xfer_vlb(struct ata_device *dev,
                }
                local_irq_restore(flags);
        } else
-               buflen = ata_data_xfer_noirq(dev, buf, buflen, rw);
+               buflen = ata_sff_data_xfer_noirq(dev, buf, buflen, rw);
 
        return buflen;
 }
 
 static struct ata_port_operations pdc20230_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = pdc20230_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = pdc_data_xfer_vlb,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .sff_data_xfer  = pdc_data_xfer_vlb,
 };
 
 /*
@@ -427,30 +356,8 @@ static void ht6560a_set_piomode(struct ata_port *ap, struct ata_device *adev)
 }
 
 static struct ata_port_operations ht6560a_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = ht6560a_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = ata_data_xfer,        /* Check vlb/noirq */
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
 };
 
 /*
@@ -492,30 +399,8 @@ static void ht6560b_set_piomode(struct ata_port *ap, struct ata_device *adev)
 }
 
 static struct ata_port_operations ht6560b_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = ht6560b_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = ata_data_xfer,    /* FIXME: Check 32bit and noirq */
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
 };
 
 /*
@@ -613,30 +498,8 @@ static void opti82c611a_set_piomode(struct ata_port *ap,
 
 
 static struct ata_port_operations opti82c611a_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = opti82c611a_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = ata_data_xfer,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
 };
 
 /*
@@ -716,7 +579,7 @@ static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
 }
 
 /**
- *     opt82c465mv_qc_issue_prot       -       command issue
+ *     opt82c465mv_qc_issue            -       command issue
  *     @qc: command pending
  *
  *     Called when the libata layer is about to issue a command. We wrap
@@ -730,7 +593,7 @@ static void opti82c46x_set_piomode(struct ata_port *ap, struct ata_device *adev)
  *     FIXME: dual channel needs ->serialize support
  */
 
-static unsigned int opti82c46x_qc_issue_prot(struct ata_queued_cmd *qc)
+static unsigned int opti82c46x_qc_issue(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
        struct ata_device *adev = qc->dev;
@@ -741,47 +604,26 @@ static unsigned int opti82c46x_qc_issue_prot(struct ata_queued_cmd *qc)
            && ap->host->private_data != NULL)
                opti82c46x_set_piomode(ap, adev);
 
-       return ata_qc_issue_prot(qc);
+       return ata_sff_qc_issue(qc);
 }
 
 static struct ata_port_operations opti82c46x_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = opti82c46x_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = opti82c46x_qc_issue_prot,
-
-       .data_xfer      = ata_data_xfer,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .qc_issue       = opti82c46x_qc_issue,
 };
 
 static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
        int active, recovery;
        u8 timing;
 
        /* Get the timing data in cycles */
        ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
 
-       if (qdi->fast) {
+       if (ld_qdi->fast) {
                active = 8 - FIT(t.active, 1, 8);
                recovery = 18 - FIT(t.recover, 3, 18);
        } else {
@@ -790,9 +632,9 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
        }
        timing = (recovery << 4) | active | 0x08;
 
-       qdi->clock[adev->devno] = timing;
+       ld_qdi->clock[adev->devno] = timing;
 
-       outb(timing, qdi->timing);
+       outb(timing, ld_qdi->timing);
 }
 
 /**
@@ -802,20 +644,20 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
  *     @irq: interrupt line
  *
  *     In dual channel mode the 6580 has one clock per channel and we have
- *     to software clockswitch in qc_issue_prot.
+ *     to software clockswitch in qc_issue.
  */
 
 static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
        int active, recovery;
        u8 timing;
 
        /* Get the timing data in cycles */
        ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
 
-       if (qdi->fast) {
+       if (ld_qdi->fast) {
                active = 8 - FIT(t.active, 1, 8);
                recovery = 18 - FIT(t.recover, 3, 18);
        } else {
@@ -824,12 +666,12 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
        }
        timing = (recovery << 4) | active | 0x08;
 
-       qdi->clock[adev->devno] = timing;
+       ld_qdi->clock[adev->devno] = timing;
 
-       outb(timing, qdi->timing + 2 * ap->port_no);
+       outb(timing, ld_qdi->timing + 2 * ap->port_no);
        /* Clear the FIFO */
        if (adev->class != ATA_DEV_ATA)
-               outb(0x5F, qdi->timing + 3);
+               outb(0x5F, ld_qdi->timing + 3);
 }
 
 /**
@@ -845,14 +687,14 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
 static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
        int active, recovery;
        u8 timing;
 
        /* Get the timing data in cycles */
        ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
 
-       if (qdi->fast) {
+       if (ld_qdi->fast) {
                active = 8 - FIT(t.active, 1, 8);
                recovery = 18 - FIT(t.recover, 3, 18);
        } else {
@@ -860,35 +702,35 @@ static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
                recovery = 15 - FIT(t.recover, 0, 15);
        }
        timing = (recovery << 4) | active | 0x08;
-       qdi->clock[adev->devno] = timing;
-       outb(timing, qdi->timing + 2 * adev->devno);
+       ld_qdi->clock[adev->devno] = timing;
+       outb(timing, ld_qdi->timing + 2 * adev->devno);
        /* Clear the FIFO */
        if (adev->class != ATA_DEV_ATA)
-               outb(0x5F, qdi->timing + 3);
+               outb(0x5F, ld_qdi->timing + 3);
 }
 
 /**
- *     qdi_qc_issue_prot       -       command issue
+ *     qdi_qc_issue            -       command issue
  *     @qc: command pending
  *
  *     Called when the libata layer is about to issue a command. We wrap
  *     this interface so that we can load the correct ATA timings.
  */
 
-static unsigned int qdi_qc_issue_prot(struct ata_queued_cmd *qc)
+static unsigned int qdi_qc_issue(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
        struct ata_device *adev = qc->dev;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
 
-       if (qdi->clock[adev->devno] != qdi->last) {
+       if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
                if (adev->pio_mode) {
-                       qdi->last = qdi->clock[adev->devno];
-                       outb(qdi->clock[adev->devno], qdi->timing +
+                       ld_qdi->last = ld_qdi->clock[adev->devno];
+                       outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
                                                        2 * ap->port_no);
                }
        }
-       return ata_qc_issue_prot(qc);
+       return ata_sff_qc_issue(qc);
 }
 
 static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
@@ -917,7 +759,7 @@ static unsigned int vlb32_data_xfer(struct ata_device *adev, unsigned char *buf,
                }
                return (buflen + 3) & ~3;
        } else
-               return ata_data_xfer(adev, buf, buflen, rw);
+               return ata_sff_data_xfer(adev, buf, buflen, rw);
 }
 
 static int qdi_port(struct platform_device *dev,
@@ -930,84 +772,22 @@ static int qdi_port(struct platform_device *dev,
 }
 
 static struct ata_port_operations qdi6500_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = qdi6500_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = qdi_qc_issue_prot,
-
-       .data_xfer      = vlb32_data_xfer,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .qc_issue       = qdi_qc_issue,
+       .sff_data_xfer  = vlb32_data_xfer,
 };
 
 static struct ata_port_operations qdi6580_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = qdi6580_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = vlb32_data_xfer,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .sff_data_xfer  = vlb32_data_xfer,
 };
 
 static struct ata_port_operations qdi6580dp_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = qdi6580dp_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = qdi_qc_issue_prot,
-
-       .data_xfer      = vlb32_data_xfer,
-
-       .irq_handler    = ata_interrupt,
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .sff_data_xfer  = vlb32_data_xfer,
 };
 
 static DEFINE_SPINLOCK(winbond_lock);
@@ -1037,12 +817,12 @@ static u8 winbond_readcfg(unsigned long port, u8 reg)
 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *winbond = ap->host->private_data;
+       struct legacy_data *ld_winbond = ap->host->private_data;
        int active, recovery;
        u8 reg;
        int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
 
-       reg = winbond_readcfg(winbond->timing, 0x81);
+       reg = winbond_readcfg(ld_winbond->timing, 0x81);
 
        /* Get the timing data in cycles */
        if (reg & 0x40)         /* Fast VLB bus, assume 50MHz */
@@ -1053,7 +833,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
        active = (FIT(t.active, 3, 17) - 1) & 0x0F;
        recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F;
        timing = (active << 4) | recovery;
-       winbond_writecfg(winbond->timing, timing, reg);
+       winbond_writecfg(ld_winbond->timing, timing, reg);
 
        /* Load the setup timing */
 
@@ -1063,7 +843,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
        if (!ata_pio_need_iordy(adev))
                reg |= 0x02;    /* IORDY off */
        reg |= (FIT(t.setup, 0, 3) << 6);
-       winbond_writecfg(winbond->timing, timing + 1, reg);
+       winbond_writecfg(ld_winbond->timing, timing + 1, reg);
 }
 
 static int winbond_port(struct platform_device *dev,
@@ -1076,29 +856,9 @@ static int winbond_port(struct platform_device *dev,
 }
 
 static struct ata_port_operations winbond_port_ops = {
+       .inherits       = &legacy_base_port_ops,
        .set_piomode    = winbond_set_piomode,
-
-       .tf_load        = ata_tf_load,
-       .tf_read        = ata_tf_read,
-       .check_status   = ata_check_status,
-       .exec_command   = ata_exec_command,
-       .dev_select     = ata_std_dev_select,
-
-       .freeze         = ata_bmdma_freeze,
-       .thaw           = ata_bmdma_thaw,
-       .error_handler  = ata_bmdma_error_handler,
-       .post_internal_cmd = ata_bmdma_post_internal_cmd,
-       .cable_detect   = ata_cable_40wire,
-
-       .qc_prep        = ata_qc_prep,
-       .qc_issue       = ata_qc_issue_prot,
-
-       .data_xfer      = vlb32_data_xfer,
-
-       .irq_clear      = ata_bmdma_irq_clear,
-       .irq_on         = ata_irq_on,
-
-       .port_start     = ata_sff_port_start,
+       .sff_data_xfer  = vlb32_data_xfer,
 };
 
 static struct legacy_controller controllers[] = {
@@ -1256,13 +1016,13 @@ static __init int legacy_init_one(struct legacy_probe *probe)
        ap->ioaddr.cmd_addr = io_addr;
        ap->ioaddr.altstatus_addr = ctrl_addr;
        ap->ioaddr.ctl_addr = ctrl_addr;
-       ata_std_ports(&ap->ioaddr);
+       ata_sff_std_ports(&ap->ioaddr);
        ap->host->private_data = ld;
 
        ata_port_desc(ap, "cmd 0x%lx ctl 0x%lx", io, io + 0x0206);
 
-       ret = ata_host_activate(host, probe->irq, ata_interrupt, 0,
-                                                               &legacy_sht);
+       ret = ata_host_activate(host, probe->irq, ata_sff_interrupt, 0,
+                               &legacy_sht);
        if (ret)
                goto fail;
        ld->platform_dev = pdev;