]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/ata/sata_inic162x.c
libata: make reset related methods proper port operations
[mirror_ubuntu-bionic-kernel.git] / drivers / ata / sata_inic162x.c
index 323c087e8cc122bb04189ee361952147c6b8faa8..ba1c09953517c5273ffa23a47477b8043ed8b5fd 100644 (file)
@@ -108,33 +108,8 @@ struct inic_port_priv {
        u8      cached_pirq_mask;
 };
 
-static int inic_slave_config(struct scsi_device *sdev)
-{
-       /* This controller is braindamaged.  dma_boundary is 0xffff
-        * like others but it will lock up the whole machine HARD if
-        * 65536 byte PRD entry is fed.  Reduce maximum segment size.
-        */
-       blk_queue_max_segment_size(sdev->request_queue, 65536 - 512);
-
-       return ata_scsi_slave_config(sdev);
-}
-
 static struct scsi_host_template inic_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        = inic_slave_config,
-       .slave_destroy          = ata_scsi_slave_destroy,
-       .bios_param             = ata_std_bios_param,
+       ATA_BMDMA_SHT(DRV_NAME),
 };
 
 static const int scr_map[] = {
@@ -277,11 +252,6 @@ static u8 inic_bmdma_status(struct ata_port *ap)
        return ATA_DMA_INTR;
 }
 
-static void inic_irq_clear(struct ata_port *ap)
-{
-       /* noop */
-}
-
 static void inic_host_intr(struct ata_port *ap)
 {
        void __iomem *port_base = inic_port_base(ap);
@@ -482,8 +452,7 @@ static void inic_error_handler(struct ata_port *ap)
        spin_unlock_irqrestore(ap->lock, flags);
 
        /* PIO and DMA engines have been stopped, perform recovery */
-       ata_do_eh(ap, ata_std_prereset, NULL, inic_hardreset,
-                 ata_std_postreset);
+       ata_std_error_handler(ap);
 }
 
 static void inic_post_internal_cmd(struct ata_queued_cmd *qc)
@@ -552,40 +521,31 @@ static int inic_port_start(struct ata_port *ap)
 }
 
 static struct ata_port_operations inic_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,
-
-       .scr_read               = inic_scr_read,
-       .scr_write              = inic_scr_write,
+       .inherits               = &ata_sff_port_ops,
 
        .bmdma_setup            = inic_bmdma_setup,
        .bmdma_start            = inic_bmdma_start,
        .bmdma_stop             = inic_bmdma_stop,
        .bmdma_status           = inic_bmdma_status,
-
-       .irq_clear              = inic_irq_clear,
-       .irq_on                 = ata_irq_on,
-
-       .qc_prep                = ata_qc_prep,
        .qc_issue               = inic_qc_issue,
-       .data_xfer              = ata_data_xfer,
 
        .freeze                 = inic_freeze,
        .thaw                   = inic_thaw,
+       .softreset              = ATA_OP_NULL,  /* softreset is broken */
+       .hardreset              = inic_hardreset,
        .error_handler          = inic_error_handler,
        .post_internal_cmd      = inic_post_internal_cmd,
        .dev_config             = inic_dev_config,
 
-       .port_resume            = inic_port_resume,
+       .scr_read               = inic_scr_read,
+       .scr_write              = inic_scr_write,
 
+       .port_resume            = inic_port_resume,
        .port_start             = inic_port_start,
 };
 
 static struct ata_port_info inic_port_info = {
-       /* For some reason, ATA_PROT_ATAPI is broken on this
+       /* For some reason, ATAPI_PROT_PIO is broken on this
         * controller, and no, PIO_POLLING does't fix it.  It somehow
         * manages to report the wrong ireason and ignoring ireason
         * results in machine lock up.  Tell libata to always prefer
@@ -730,6 +690,18 @@ static int inic_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                return rc;
        }
 
+       /*
+        * This controller is braindamaged.  dma_boundary is 0xffff
+        * like others but it will lock up the whole machine HARD if
+        * 65536 byte PRD entry is fed. Reduce maximum segment size.
+        */
+       rc = pci_set_dma_max_seg_size(pdev, 65536 - 512);
+       if (rc) {
+               dev_printk(KERN_ERR, &pdev->dev,
+                          "failed to set the maximum segment size.\n");
+               return rc;
+       }
+
        rc = init_controller(iomap[MMIO_BAR], hpriv->cached_hctl);
        if (rc) {
                dev_printk(KERN_ERR, &pdev->dev,