pata_hpt{37x,3x2n}: add debounce delay to cable detection methods
[safe/jmp/linux-2.6] / drivers / ata / pata_icside.c
index 52de9f9..b663b7f 100644 (file)
@@ -45,8 +45,6 @@ static const struct portinfo pata_icside_portinfo_v6_2 = {
        .stepping       = 6,
 };
 
-#define PATA_ICSIDE_MAX_SG     128
-
 struct pata_icside_state {
        void __iomem *irq_port;
        void __iomem *ioc_base;
@@ -57,7 +55,6 @@ struct pata_icside_state {
                u8 disabled;
                unsigned int speed[ATA_MAX_DEVICES];
        } port[2];
-       struct scatterlist sg[PATA_ICSIDE_MAX_SG];
 };
 
 struct pata_icside_info {
@@ -222,9 +219,7 @@ static void pata_icside_bmdma_setup(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
        struct pata_icside_state *state = ap->host->private_data;
-       struct scatterlist *sg, *rsg = state->sg;
        unsigned int write = qc->tf.flags & ATA_TFLAG_WRITE;
-       unsigned int si;
 
        /*
         * We are simplex; BUG if we try to fiddle with DMA
@@ -233,24 +228,16 @@ static void pata_icside_bmdma_setup(struct ata_queued_cmd *qc)
        BUG_ON(dma_channel_active(state->dma));
 
        /*
-        * Copy ATAs scattered sg list into a contiguous array of sg
-        */
-       for_each_sg(qc->sg, sg, qc->n_elem, si) {
-               memcpy(rsg, sg, sizeof(*sg));
-               rsg++;
-       }
-
-       /*
         * Route the DMA signals to the correct interface
         */
        writeb(state->port[ap->port_no].port_sel, state->ioc_base);
 
        set_dma_speed(state->dma, state->port[ap->port_no].speed[qc->dev->devno]);
-       set_dma_sg(state->dma, state->sg, rsg - state->sg);
+       set_dma_sg(state->dma, qc->sg, qc->n_elem);
        set_dma_mode(state->dma, write ? DMA_MODE_WRITE : DMA_MODE_READ);
 
        /* issue r/w command */
-       ap->ops->exec_command(ap, &qc->tf);
+       ap->ops->sff_exec_command(ap, &qc->tf);
 }
 
 static void pata_icside_bmdma_start(struct ata_queued_cmd *qc)
@@ -270,7 +257,7 @@ static void pata_icside_bmdma_stop(struct ata_queued_cmd *qc)
        disable_dma(state->dma);
 
        /* see ata_bmdma_stop */
-       ata_sff_altstatus(ap);
+       ata_sff_dma_pause(ap);
 }
 
 static u8 pata_icside_bmdma_status(struct ata_port *ap)
@@ -297,7 +284,7 @@ static int icside_dma_init(struct pata_icside_info *info)
 
        if (ec->dma != NO_DMA && !request_dma(ec->dma, DRV_NAME)) {
                state->dma = ec->dma;
-               info->mwdma_mask = 0x07;        /* MW0..2 */
+               info->mwdma_mask = ATA_MWDMA2;
        }
 
        return 0;
@@ -306,8 +293,8 @@ static int icside_dma_init(struct pata_icside_info *info)
 
 static struct scsi_host_template pata_icside_sht = {
        ATA_BASE_SHT(DRV_NAME),
-       .sg_tablesize           = PATA_ICSIDE_MAX_SG,
-       .dma_boundary           = ~0, /* no dma boundaries */
+       .sg_tablesize           = SCSI_MAX_SG_CHAIN_SEGMENTS,
+       .dma_boundary           = IOMD_DMA_BOUNDARY,
 };
 
 static void pata_icside_postreset(struct ata_link *link, unsigned int *classes)
@@ -336,7 +323,7 @@ static struct ata_port_operations pata_icside_port_ops = {
        .inherits               = &ata_sff_port_ops,
        /* no need to build any PRD tables for DMA */
        .qc_prep                = ata_noop_qc_prep,
-       .data_xfer              = ata_sff_data_xfer_noirq,
+       .sff_data_xfer          = ata_sff_data_xfer_noirq,
        .bmdma_setup            = pata_icside_bmdma_setup,
        .bmdma_start            = pata_icside_bmdma_start,
        .bmdma_stop             = pata_icside_bmdma_stop,
@@ -473,7 +460,7 @@ static int __devinit pata_icside_add_ports(struct pata_icside_info *info)
        for (i = 0; i < info->nr_ports; i++) {
                struct ata_port *ap = host->ports[i];
 
-               ap->pio_mask = 0x1f;
+               ap->pio_mask = ATA_PIO4;
                ap->mwdma_mask = info->mwdma_mask;
                ap->flags |= ATA_FLAG_SLAVE_POSS;
                ap->ops = &pata_icside_port_ops;