ata: libata-eh: Simplify reset operation management
authorDamien Le Moal <dlemoal@kernel.org>
Wed, 16 Jul 2025 02:03:14 +0000 (11:03 +0900)
committerNiklas Cassel <cassel@kernel.org>
Wed, 16 Jul 2025 07:31:43 +0000 (09:31 +0200)
Introduce struct ata_reset_operations to aggregate in a single structure
the definitions of the 4 reset methods (prereset, softreset, hardreset
and postreset) for a port. This new structure is used in struct ata_port
to define the reset methods for a regular port (reset field) and for a
port-multiplier port (pmp_reset field). A pointer to either of these
fields replaces the 4 reset method arguments passed to ata_eh_recover()
and ata_eh_reset().

The definition of the reset methods for all drivers is changed to use
the reset and pmp_reset fields in struct ata_port_operations.

A large number of files is modifed, but no functional changes are
introduced.

Suggested-by: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20250716020315.235457-3-dlemoal@kernel.org
Signed-off-by: Niklas Cassel <cassel@kernel.org>
58 files changed:
drivers/ata/ahci.c
drivers/ata/ahci_da850.c
drivers/ata/ahci_dm816.c
drivers/ata/ahci_imx.c
drivers/ata/ahci_qoriq.c
drivers/ata/ahci_xgene.c
drivers/ata/ata_piix.c
drivers/ata/libahci.c
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
drivers/ata/libata-pmp.c
drivers/ata/libata-sata.c
drivers/ata/libata-sff.c
drivers/ata/libata.h
drivers/ata/pata_acpi.c
drivers/ata/pata_ali.c
drivers/ata/pata_amd.c
drivers/ata/pata_artop.c
drivers/ata/pata_atiixp.c
drivers/ata/pata_efar.c
drivers/ata/pata_ep93xx.c
drivers/ata/pata_hpt366.c
drivers/ata/pata_hpt37x.c
drivers/ata/pata_hpt3x2n.c
drivers/ata/pata_icside.c
drivers/ata/pata_it8213.c
drivers/ata/pata_jmicron.c
drivers/ata/pata_marvell.c
drivers/ata/pata_mpiix.c
drivers/ata/pata_ns87410.c
drivers/ata/pata_octeon_cf.c
drivers/ata/pata_oldpiix.c
drivers/ata/pata_opti.c
drivers/ata/pata_optidma.c
drivers/ata/pata_parport/pata_parport.c
drivers/ata/pata_pdc2027x.c
drivers/ata/pata_rdc.c
drivers/ata/pata_sis.c
drivers/ata/pata_sl82c105.c
drivers/ata/pata_triflex.c
drivers/ata/pata_via.c
drivers/ata/pdc_adma.c
drivers/ata/sata_dwc_460ex.c
drivers/ata/sata_fsl.c
drivers/ata/sata_highbank.c
drivers/ata/sata_inic162x.c
drivers/ata/sata_mv.c
drivers/ata/sata_nv.c
drivers/ata/sata_promise.c
drivers/ata/sata_qstor.c
drivers/ata/sata_rcar.c
drivers/ata/sata_sil24.c
drivers/ata/sata_svw.c
drivers/ata/sata_sx4.c
drivers/ata/sata_uli.c
drivers/ata/sata_via.c
drivers/scsi/libsas/sas_ata.c
include/linux/libata.h

index 5558e9f..e1c24bb 100644 (file)
@@ -110,17 +110,17 @@ static const struct scsi_host_template ahci_sht = {
 
 static struct ata_port_operations ahci_vt8251_ops = {
        .inherits               = &ahci_ops,
-       .hardreset              = ahci_vt8251_hardreset,
+       .reset.hardreset        = ahci_vt8251_hardreset,
 };
 
 static struct ata_port_operations ahci_p5wdh_ops = {
        .inherits               = &ahci_ops,
-       .hardreset              = ahci_p5wdh_hardreset,
+       .reset.hardreset        = ahci_p5wdh_hardreset,
 };
 
 static struct ata_port_operations ahci_avn_ops = {
        .inherits               = &ahci_ops,
-       .hardreset              = ahci_avn_hardreset,
+       .reset.hardreset        = ahci_avn_hardreset,
 };
 
 static const struct ata_port_info ahci_port_info[] = {
index ca0924d..f97566c 100644 (file)
@@ -137,13 +137,13 @@ static int ahci_da850_hardreset(struct ata_link *link,
 
 static struct ata_port_operations ahci_da850_port_ops = {
        .inherits = &ahci_platform_ops,
-       .softreset = ahci_da850_softreset,
+       .reset.softreset = ahci_da850_softreset,
        /*
         * No need to override .pmp_softreset - it's only used for actual
         * PMP-enabled ports.
         */
-       .hardreset = ahci_da850_hardreset,
-       .pmp_hardreset = ahci_da850_hardreset,
+       .reset.hardreset = ahci_da850_hardreset,
+       .pmp_reset.hardreset = ahci_da850_hardreset,
 };
 
 static const struct ata_port_info ahci_da850_port_info = {
index b08547b..93faed2 100644 (file)
@@ -124,7 +124,7 @@ static int ahci_dm816_softreset(struct ata_link *link,
 
 static struct ata_port_operations ahci_dm816_port_ops = {
        .inherits = &ahci_platform_ops,
-       .softreset = ahci_dm816_softreset,
+       .reset.softreset = ahci_dm816_softreset,
 };
 
 static const struct ata_port_info ahci_dm816_port_info = {
index f01f080..86aedd5 100644 (file)
@@ -642,18 +642,19 @@ static int ahci_imx_softreset(struct ata_link *link, unsigned int *class,
        int ret;
 
        if (imxpriv->type == AHCI_IMX53)
-               ret = ahci_pmp_retry_srst_ops.softreset(link, class, deadline);
+               ret = ahci_pmp_retry_srst_ops.reset.softreset(link, class,
+                                                             deadline);
        else
-               ret = ahci_ops.softreset(link, class, deadline);
+               ret = ahci_ops.reset.softreset(link, class, deadline);
 
        return ret;
 }
 
 static struct ata_port_operations ahci_imx_ops = {
-       .inherits       = &ahci_ops,
-       .host_stop      = ahci_imx_host_stop,
-       .error_handler  = ahci_imx_error_handler,
-       .softreset      = ahci_imx_softreset,
+       .inherits               = &ahci_ops,
+       .host_stop              = ahci_imx_host_stop,
+       .error_handler          = ahci_imx_error_handler,
+       .reset.softreset        = ahci_imx_softreset,
 };
 
 static const struct ata_port_info ahci_imx_port_info = {
index 30e3988..0dec1a1 100644 (file)
@@ -146,8 +146,8 @@ static int ahci_qoriq_hardreset(struct ata_link *link, unsigned int *class,
 }
 
 static struct ata_port_operations ahci_qoriq_ops = {
-       .inherits       = &ahci_ops,
-       .hardreset      = ahci_qoriq_hardreset,
+       .inherits               = &ahci_ops,
+       .reset.hardreset        = ahci_qoriq_hardreset,
 };
 
 static const struct ata_port_info ahci_qoriq_port_info = {
index dfbd8c5..5d5a51a 100644 (file)
@@ -613,11 +613,11 @@ static irqreturn_t xgene_ahci_irq_intr(int irq, void *dev_instance)
 static struct ata_port_operations xgene_ahci_v1_ops = {
        .inherits = &ahci_ops,
        .host_stop = xgene_ahci_host_stop,
-       .hardreset = xgene_ahci_hardreset,
+       .reset.hardreset = xgene_ahci_hardreset,
+       .reset.softreset = xgene_ahci_softreset,
+       .pmp_reset.softreset = xgene_ahci_pmp_softreset,
        .read_id = xgene_ahci_read_id,
        .qc_issue = xgene_ahci_qc_issue,
-       .softreset = xgene_ahci_softreset,
-       .pmp_softreset = xgene_ahci_pmp_softreset
 };
 
 static const struct ata_port_info xgene_ahci_v1_port_info = {
@@ -630,7 +630,7 @@ static const struct ata_port_info xgene_ahci_v1_port_info = {
 static struct ata_port_operations xgene_ahci_v2_ops = {
        .inherits = &ahci_ops,
        .host_stop = xgene_ahci_host_stop,
-       .hardreset = xgene_ahci_hardreset,
+       .reset.hardreset = xgene_ahci_hardreset,
        .read_id = xgene_ahci_read_id,
 };
 
index d441246..229429b 100644 (file)
@@ -1074,7 +1074,7 @@ static struct ata_port_operations piix_pata_ops = {
        .cable_detect           = ata_cable_40wire,
        .set_piomode            = piix_set_piomode,
        .set_dmamode            = piix_set_dmamode,
-       .prereset               = piix_pata_prereset,
+       .reset.prereset         = piix_pata_prereset,
 };
 
 static struct ata_port_operations piix_vmw_ops = {
@@ -1102,7 +1102,7 @@ static const struct scsi_host_template piix_sidpr_sht = {
 
 static struct ata_port_operations piix_sidpr_sata_ops = {
        .inherits               = &piix_sata_ops,
-       .hardreset              = sata_std_hardreset,
+       .reset.hardreset        = sata_std_hardreset,
        .scr_read               = piix_sidpr_scr_read,
        .scr_write              = piix_sidpr_scr_write,
        .set_lpm                = piix_sidpr_set_lpm,
index 4e9c82f..b335fb7 100644 (file)
@@ -162,10 +162,10 @@ struct ata_port_operations ahci_ops = {
 
        .freeze                 = ahci_freeze,
        .thaw                   = ahci_thaw,
-       .softreset              = ahci_softreset,
-       .hardreset              = ahci_hardreset,
-       .postreset              = ahci_postreset,
-       .pmp_softreset          = ahci_softreset,
+       .reset.softreset        = ahci_softreset,
+       .reset.hardreset        = ahci_hardreset,
+       .reset.postreset        = ahci_postreset,
+       .pmp_reset.softreset    = ahci_softreset,
        .error_handler          = ahci_error_handler,
        .post_internal_cmd      = ahci_post_internal_cmd,
        .dev_config             = ahci_dev_config,
@@ -192,7 +192,7 @@ EXPORT_SYMBOL_GPL(ahci_ops);
 
 struct ata_port_operations ahci_pmp_retry_srst_ops = {
        .inherits               = &ahci_ops,
-       .softreset              = ahci_pmp_retry_softreset,
+       .reset.softreset        = ahci_pmp_retry_softreset,
 };
 EXPORT_SYMBOL_GPL(ahci_pmp_retry_srst_ops);
 
index bbf1318..97d9f04 100644 (file)
@@ -65,8 +65,8 @@
 #include "libata-transport.h"
 
 const struct ata_port_operations ata_base_port_ops = {
-       .prereset               = ata_std_prereset,
-       .postreset              = ata_std_postreset,
+       .reset.prereset         = ata_std_prereset,
+       .reset.postreset        = ata_std_postreset,
        .error_handler          = ata_std_error_handler,
        .sched_eh               = ata_std_sched_eh,
        .end_eh                 = ata_std_end_eh,
index 30c831e..2946ae6 100644 (file)
@@ -2793,13 +2793,16 @@ static bool ata_eh_followup_srst_needed(struct ata_link *link, int rc)
 }
 
 int ata_eh_reset(struct ata_link *link, int classify,
-                ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
-                ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
+                struct ata_reset_operations *reset_ops)
 {
        struct ata_port *ap = link->ap;
        struct ata_link *slave = ap->slave_link;
        struct ata_eh_context *ehc = &link->eh_context;
        struct ata_eh_context *sehc = slave ? &slave->eh_context : NULL;
+       ata_reset_fn_t hardreset = reset_ops->hardreset;
+       ata_reset_fn_t softreset = reset_ops->softreset;
+       ata_prereset_fn_t prereset = reset_ops->prereset;
+       ata_postreset_fn_t postreset = reset_ops->postreset;
        unsigned int *classes = ehc->classes;
        unsigned int lflags = link->flags;
        int verbose = !(ehc->i.flags & ATA_EHI_QUIET);
@@ -3756,10 +3759,7 @@ static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
 /**
  *     ata_eh_recover - recover host port after error
  *     @ap: host port to recover
- *     @prereset: prereset method (can be NULL)
- *     @softreset: softreset method (can be NULL)
- *     @hardreset: hardreset method (can be NULL)
- *     @postreset: postreset method (can be NULL)
+ *     @reset_ops: The set of reset operations to use
  *     @r_failed_link: out parameter for failed link
  *
  *     This is the alpha and omega, eum and yang, heart and soul of
@@ -3775,9 +3775,7 @@ static int ata_eh_handle_dev_fail(struct ata_device *dev, int err)
  *     RETURNS:
  *     0 on success, -errno on failure.
  */
-int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
-                  ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
-                  ata_postreset_fn_t postreset,
+int ata_eh_recover(struct ata_port *ap, struct ata_reset_operations *reset_ops,
                   struct ata_link **r_failed_link)
 {
        struct ata_link *link;
@@ -3845,8 +3843,7 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
                if (!(ehc->i.action & ATA_EH_RESET))
                        continue;
 
-               rc = ata_eh_reset(link, ata_link_nr_vacant(link),
-                                 prereset, softreset, hardreset, postreset);
+               rc = ata_eh_reset(link, ata_link_nr_vacant(link), reset_ops);
                if (rc) {
                        ata_link_err(link, "reset failed, giving up\n");
                        goto out;
@@ -4077,20 +4074,20 @@ void ata_eh_finish(struct ata_port *ap)
  */
 void ata_std_error_handler(struct ata_port *ap)
 {
-       struct ata_port_operations *ops = ap->ops;
+       struct ata_reset_operations *reset_ops = &ap->ops->reset;
        struct ata_link *link = &ap->link;
        int rc;
 
        /* Ignore built-in hardresets if SCR access is not available */
-       if ((ops->hardreset == sata_std_hardreset ||
-            ops->hardreset == sata_sff_hardreset) && !sata_scr_valid(link))
+       if ((reset_ops->hardreset == sata_std_hardreset ||
+            reset_ops->hardreset == sata_sff_hardreset) &&
+           !sata_scr_valid(link))
                link->flags |= ATA_LFLAG_NO_HRST;
 
        ata_eh_autopsy(ap);
        ata_eh_report(ap);
 
-       rc = ata_eh_recover(ap, ops->prereset, ops->softreset,
-                           ops->hardreset, ops->postreset, NULL);
+       rc = ata_eh_recover(ap, reset_ops, NULL);
        if (rc) {
                struct ata_device *dev;
 
index d5d1893..5702332 100644 (file)
@@ -15,9 +15,9 @@
 
 const struct ata_port_operations sata_pmp_port_ops = {
        .inherits               = &sata_port_ops,
-       .pmp_prereset           = ata_std_prereset,
-       .pmp_hardreset          = sata_std_hardreset,
-       .pmp_postreset          = ata_std_postreset,
+       .pmp_reset.prereset     = ata_std_prereset,
+       .pmp_reset.hardreset    = sata_std_hardreset,
+       .pmp_reset.postreset    = ata_std_postreset,
        .error_handler          = sata_pmp_error_handler,
 };
 
@@ -727,10 +727,7 @@ static int sata_pmp_revalidate_quick(struct ata_device *dev)
 /**
  *     sata_pmp_eh_recover_pmp - recover PMP
  *     @ap: ATA port PMP is attached to
- *     @prereset: prereset method (can be NULL)
- *     @softreset: softreset method
- *     @hardreset: hardreset method
- *     @postreset: postreset method (can be NULL)
+ *     @reset_ops: The set of reset operations to use
  *
  *     Recover PMP attached to @ap.  Recovery procedure is somewhat
  *     similar to that of ata_eh_recover() except that reset should
@@ -744,8 +741,7 @@ static int sata_pmp_revalidate_quick(struct ata_device *dev)
  *     0 on success, -errno on failure.
  */
 static int sata_pmp_eh_recover_pmp(struct ata_port *ap,
-               ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
-               ata_reset_fn_t hardreset, ata_postreset_fn_t postreset)
+                                  struct ata_reset_operations *reset_ops)
 {
        struct ata_link *link = &ap->link;
        struct ata_eh_context *ehc = &link->eh_context;
@@ -767,8 +763,7 @@ static int sata_pmp_eh_recover_pmp(struct ata_port *ap,
                struct ata_link *tlink;
 
                /* reset */
-               rc = ata_eh_reset(link, 0, prereset, softreset, hardreset,
-                                 postreset);
+               rc = ata_eh_reset(link, 0, reset_ops);
                if (rc) {
                        ata_link_err(link, "failed to reset PMP, giving up\n");
                        goto fail;
@@ -932,8 +927,7 @@ static int sata_pmp_eh_recover(struct ata_port *ap)
  retry:
        /* PMP attached? */
        if (!sata_pmp_attached(ap)) {
-               rc = ata_eh_recover(ap, ops->prereset, ops->softreset,
-                                   ops->hardreset, ops->postreset, NULL);
+               rc = ata_eh_recover(ap, &ops->reset, NULL);
                if (rc) {
                        ata_for_each_dev(dev, &ap->link, ALL)
                                ata_dev_disable(dev);
@@ -951,8 +945,7 @@ static int sata_pmp_eh_recover(struct ata_port *ap)
        }
 
        /* recover pmp */
-       rc = sata_pmp_eh_recover_pmp(ap, ops->prereset, ops->softreset,
-                                    ops->hardreset, ops->postreset);
+       rc = sata_pmp_eh_recover_pmp(ap, &ops->reset);
        if (rc)
                goto pmp_fail;
 
@@ -978,8 +971,7 @@ static int sata_pmp_eh_recover(struct ata_port *ap)
                goto pmp_fail;
 
        /* recover links */
-       rc = ata_eh_recover(ap, ops->pmp_prereset, ops->pmp_softreset,
-                           ops->pmp_hardreset, ops->pmp_postreset, &link);
+       rc = ata_eh_recover(ap, &ops->pmp_reset, &link);
        if (rc)
                goto link_fail;
 
index 47169c4..4734465 100644 (file)
@@ -1704,6 +1704,6 @@ const struct ata_port_operations sata_port_ops = {
        .inherits               = &ata_base_port_ops,
 
        .qc_defer               = ata_std_qc_defer,
-       .hardreset              = sata_std_hardreset,
+       .reset.hardreset        = sata_std_hardreset,
 };
 EXPORT_SYMBOL_GPL(sata_port_ops);
index e61f007..7fc4072 100644 (file)
@@ -31,10 +31,10 @@ const struct ata_port_operations ata_sff_port_ops = {
 
        .freeze                 = ata_sff_freeze,
        .thaw                   = ata_sff_thaw,
-       .prereset               = ata_sff_prereset,
-       .softreset              = ata_sff_softreset,
-       .hardreset              = sata_sff_hardreset,
-       .postreset              = ata_sff_postreset,
+       .reset.prereset         = ata_sff_prereset,
+       .reset.softreset        = ata_sff_softreset,
+       .reset.hardreset        = sata_sff_hardreset,
+       .reset.postreset        = ata_sff_postreset,
        .error_handler          = ata_sff_error_handler,
 
        .sff_dev_select         = ata_sff_dev_select,
index ca44fb7..e5b977a 100644 (file)
@@ -180,11 +180,9 @@ extern void ata_eh_autopsy(struct ata_port *ap);
 const char *ata_get_cmd_name(u8 command);
 extern void ata_eh_report(struct ata_port *ap);
 extern int ata_eh_reset(struct ata_link *link, int classify,
-                       ata_prereset_fn_t prereset, ata_reset_fn_t softreset,
-                       ata_reset_fn_t hardreset, ata_postreset_fn_t postreset);
-extern int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
-                         ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
-                         ata_postreset_fn_t postreset,
+                       struct ata_reset_operations *reset_ops);
+extern int ata_eh_recover(struct ata_port *ap,
+                         struct ata_reset_operations *reset_ops,
                          struct ata_link **r_failed_disk);
 extern void ata_eh_finish(struct ata_port *ap);
 extern int ata_ering_map(struct ata_ering *ering,
index ab38871..23fff10 100644 (file)
@@ -216,7 +216,7 @@ static struct ata_port_operations pacpi_ops = {
        .mode_filter            = pacpi_mode_filter,
        .set_piomode            = pacpi_set_piomode,
        .set_dmamode            = pacpi_set_dmamode,
-       .prereset               = pacpi_pre_reset,
+       .reset.prereset         = pacpi_pre_reset,
        .port_start             = pacpi_port_start,
 };
 
index bb790ed..9d5cb9c 100644 (file)
@@ -392,11 +392,11 @@ static struct ata_port_operations ali_20_port_ops = {
  *     Port operations for DMA capable ALi with cable detect
  */
 static struct ata_port_operations ali_c2_port_ops = {
-       .inherits       = &ali_dma_base_ops,
-       .check_atapi_dma = ali_check_atapi_dma,
-       .cable_detect   = ali_c2_cable_detect,
-       .dev_config     = ali_lock_sectors,
-       .postreset      = ali_c2_c3_postreset,
+       .inherits               = &ali_dma_base_ops,
+       .check_atapi_dma        = ali_check_atapi_dma,
+       .cable_detect           = ali_c2_cable_detect,
+       .dev_config             = ali_lock_sectors,
+       .reset.postreset        = ali_c2_c3_postreset,
 };
 
 /*
index 5b02b89..a2fecad 100644 (file)
@@ -394,7 +394,7 @@ static const struct scsi_host_template amd_sht = {
 
 static const struct ata_port_operations amd_base_port_ops = {
        .inherits       = &ata_bmdma32_port_ops,
-       .prereset       = amd_pre_reset,
+       .reset.prereset = amd_pre_reset,
 };
 
 static struct ata_port_operations amd33_port_ops = {
@@ -429,7 +429,7 @@ static const struct ata_port_operations nv_base_port_ops = {
        .inherits       = &ata_bmdma_port_ops,
        .cable_detect   = ata_cable_ignore,
        .mode_filter    = nv_mode_filter,
-       .prereset       = nv_pre_reset,
+       .reset.prereset = nv_pre_reset,
        .host_stop      = nv_host_stop,
 };
 
index 4054428..6160414 100644 (file)
@@ -301,7 +301,7 @@ static struct ata_port_operations artop6210_ops = {
        .cable_detect           = ata_cable_40wire,
        .set_piomode            = artop6210_set_piomode,
        .set_dmamode            = artop6210_set_dmamode,
-       .prereset               = artop62x0_pre_reset,
+       .reset.prereset         = artop62x0_pre_reset,
        .qc_defer               = artop6210_qc_defer,
 };
 
@@ -310,7 +310,7 @@ static struct ata_port_operations artop6260_ops = {
        .cable_detect           = artop6260_cable_detect,
        .set_piomode            = artop6260_set_piomode,
        .set_dmamode            = artop6260_set_dmamode,
-       .prereset               = artop62x0_pre_reset,
+       .reset.prereset         = artop62x0_pre_reset,
 };
 
 static void atp8xx_fixup(struct pci_dev *pdev)
index 8c5cc80..4c612f9 100644 (file)
@@ -264,7 +264,7 @@ static struct ata_port_operations atiixp_port_ops = {
        .bmdma_start    = atiixp_bmdma_start,
        .bmdma_stop     = atiixp_bmdma_stop,
 
-       .prereset       = atiixp_prereset,
+       .reset.prereset = atiixp_prereset,
        .cable_detect   = atiixp_cable_detect,
        .set_piomode    = atiixp_set_piomode,
        .set_dmamode    = atiixp_set_dmamode,
index 2e6eccf..6fe49b3 100644 (file)
@@ -243,7 +243,7 @@ static struct ata_port_operations efar_ops = {
        .cable_detect           = efar_cable_detect,
        .set_piomode            = efar_set_piomode,
        .set_dmamode            = efar_set_dmamode,
-       .prereset               = efar_pre_reset,
+       .reset.prereset         = efar_pre_reset,
 };
 
 
index e8cda98..b2b9e00 100644 (file)
@@ -879,8 +879,8 @@ static const struct scsi_host_template ep93xx_pata_sht = {
 static struct ata_port_operations ep93xx_pata_port_ops = {
        .inherits               = &ata_bmdma_port_ops,
 
-       .softreset              = ep93xx_pata_softreset,
-       .hardreset              = ATA_OP_NULL,
+       .reset.softreset        = ep93xx_pata_softreset,
+       .reset.hardreset        = ATA_OP_NULL,
 
        .sff_dev_select         = ep93xx_pata_dev_select,
        .sff_set_devctl         = ep93xx_pata_set_devctl,
index 5280e99..b96e8bd 100644 (file)
@@ -322,7 +322,7 @@ static const struct scsi_host_template hpt36x_sht = {
 
 static struct ata_port_operations hpt366_port_ops = {
        .inherits       = &ata_bmdma_port_ops,
-       .prereset       = hpt366_prereset,
+       .reset.prereset = hpt366_prereset,
        .cable_detect   = hpt36x_cable_detect,
        .mode_filter    = hpt366_filter,
        .set_piomode    = hpt366_set_piomode,
index 4af22b8..07e3a98 100644 (file)
@@ -543,7 +543,7 @@ static struct ata_port_operations hpt370_port_ops = {
        .cable_detect   = hpt37x_cable_detect,
        .set_piomode    = hpt37x_set_piomode,
        .set_dmamode    = hpt37x_set_dmamode,
-       .prereset       = hpt37x_pre_reset,
+       .reset.prereset = hpt37x_pre_reset,
 };
 
 /*
@@ -567,7 +567,7 @@ static struct ata_port_operations hpt302_port_ops = {
        .cable_detect   = hpt37x_cable_detect,
        .set_piomode    = hpt37x_set_piomode,
        .set_dmamode    = hpt37x_set_dmamode,
-       .prereset       = hpt37x_pre_reset,
+       .reset.prereset = hpt37x_pre_reset,
 };
 
 /*
index 5b1eccc..2cc57fc 100644 (file)
@@ -356,7 +356,7 @@ static struct ata_port_operations hpt3xxn_port_ops = {
        .cable_detect   = hpt3x2n_cable_detect,
        .set_piomode    = hpt3x2n_set_piomode,
        .set_dmamode    = hpt3x2n_set_dmamode,
-       .prereset       = hpt3x2n_pre_reset,
+       .reset.prereset = hpt3x2n_pre_reset,
 };
 
 /*
index 61d8760..70f056e 100644 (file)
@@ -336,7 +336,7 @@ static struct ata_port_operations pata_icside_port_ops = {
 
        .cable_detect           = ata_cable_40wire,
        .set_dmamode            = pata_icside_set_dmamode,
-       .postreset              = pata_icside_postreset,
+       .reset.postreset        = pata_icside_postreset,
 
        .port_start             = ATA_OP_NULL,  /* don't need PRD table */
 };
index 9cbe213..a6f2cfc 100644 (file)
@@ -238,7 +238,7 @@ static struct ata_port_operations it8213_ops = {
        .cable_detect           = it8213_cable_detect,
        .set_piomode            = it8213_set_piomode,
        .set_dmamode            = it8213_set_dmamode,
-       .prereset               = it8213_pre_reset,
+       .reset.prereset         = it8213_pre_reset,
 };
 
 
index f51fb82..b885f33 100644 (file)
@@ -113,7 +113,7 @@ static const struct scsi_host_template jmicron_sht = {
 
 static struct ata_port_operations jmicron_ops = {
        .inherits               = &ata_bmdma_port_ops,
-       .prereset               = jmicron_pre_reset,
+       .reset.prereset         = jmicron_pre_reset,
 };
 
 
index 8119caa..deab673 100644 (file)
@@ -99,7 +99,7 @@ static const struct scsi_host_template marvell_sht = {
 static struct ata_port_operations marvell_ops = {
        .inherits               = &ata_bmdma_port_ops,
        .cable_detect           = marvell_cable_detect,
-       .prereset               = marvell_pre_reset,
+       .reset.prereset         = marvell_pre_reset,
 };
 
 
index 69e4baf..ce310ae 100644 (file)
@@ -145,7 +145,7 @@ static struct ata_port_operations mpiix_port_ops = {
        .qc_issue       = mpiix_qc_issue,
        .cable_detect   = ata_cable_40wire,
        .set_piomode    = mpiix_set_piomode,
-       .prereset       = mpiix_pre_reset,
+       .reset.prereset = mpiix_pre_reset,
        .sff_data_xfer  = ata_sff_data_xfer32,
 };
 
index 44cc24d..bdb55c1 100644 (file)
@@ -123,7 +123,7 @@ static struct ata_port_operations ns87410_port_ops = {
        .qc_issue       = ns87410_qc_issue,
        .cable_detect   = ata_cable_40wire,
        .set_piomode    = ns87410_set_piomode,
-       .prereset       = ns87410_pre_reset,
+       .reset.prereset = ns87410_pre_reset,
 };
 
 static int ns87410_init_one(struct pci_dev *dev, const struct pci_device_id *id)
index 2d32125..df42ebe 100644 (file)
@@ -941,7 +941,7 @@ static int octeon_cf_probe(struct platform_device *pdev)
                /* 16 bit but not True IDE */
                base = cs0 + 0x800;
                octeon_cf_ops.sff_data_xfer     = octeon_cf_data_xfer16;
-               octeon_cf_ops.softreset         = octeon_cf_softreset16;
+               octeon_cf_ops.reset.softreset   = octeon_cf_softreset16;
                octeon_cf_ops.sff_check_status  = octeon_cf_check_status16;
                octeon_cf_ops.sff_tf_read       = octeon_cf_tf_read16;
                octeon_cf_ops.sff_tf_load       = octeon_cf_tf_load16;
index 3d01b70..81a7f3e 100644 (file)
@@ -214,7 +214,7 @@ static struct ata_port_operations oldpiix_pata_ops = {
        .cable_detect           = ata_cable_40wire,
        .set_piomode            = oldpiix_set_piomode,
        .set_dmamode            = oldpiix_set_dmamode,
-       .prereset               = oldpiix_pre_reset,
+       .reset.prereset         = oldpiix_pre_reset,
 };
 
 
index 3d23f57..3db1b95 100644 (file)
@@ -156,7 +156,7 @@ static struct ata_port_operations opti_port_ops = {
        .inherits       = &ata_sff_port_ops,
        .cable_detect   = ata_cable_40wire,
        .set_piomode    = opti_set_piomode,
-       .prereset       = opti_pre_reset,
+       .reset.prereset = opti_pre_reset,
 };
 
 static int opti_init_one(struct pci_dev *dev, const struct pci_device_id *id)
index cc876dc..b42dba5 100644 (file)
@@ -346,7 +346,7 @@ static struct ata_port_operations optidma_port_ops = {
        .set_piomode    = optidma_set_pio_mode,
        .set_dmamode    = optidma_set_dma_mode,
        .set_mode       = optidma_set_mode,
-       .prereset       = optidma_pre_reset,
+       .reset.prereset = optidma_pre_reset,
 };
 
 static struct ata_port_operations optiplus_port_ops = {
index 93ebf56..22bd3ff 100644 (file)
@@ -321,8 +321,8 @@ static void pata_parport_drain_fifo(struct ata_queued_cmd *qc)
 static struct ata_port_operations pata_parport_port_ops = {
        .inherits               = &ata_sff_port_ops,
 
-       .softreset              = pata_parport_softreset,
-       .hardreset              = NULL,
+       .reset.softreset        = pata_parport_softreset,
+       .reset.hardreset        = NULL,
 
        .sff_dev_select         = pata_parport_dev_select,
        .sff_set_devctl         = pata_parport_set_devctl,
index a4ee3b9..d792ce6 100644 (file)
@@ -130,7 +130,7 @@ static struct ata_port_operations pdc2027x_pata100_ops = {
        .inherits               = &ata_bmdma_port_ops,
        .check_atapi_dma        = pdc2027x_check_atapi_dma,
        .cable_detect           = pdc2027x_cable_detect,
-       .prereset               = pdc2027x_prereset,
+       .reset.prereset         = pdc2027x_prereset,
 };
 
 static struct ata_port_operations pdc2027x_pata133_ops = {
index 19cbb5c..6ff4c11 100644 (file)
@@ -276,7 +276,7 @@ static struct ata_port_operations rdc_pata_ops = {
        .cable_detect           = rdc_pata_cable_detect,
        .set_piomode            = rdc_set_piomode,
        .set_dmamode            = rdc_set_dmamode,
-       .prereset               = rdc_pata_prereset,
+       .reset.prereset         = rdc_pata_prereset,
 };
 
 static const struct ata_port_info rdc_port_info = {
index 31de06b..2b751e3 100644 (file)
@@ -552,7 +552,7 @@ static struct ata_port_operations sis_133_for_sata_ops = {
 
 static struct ata_port_operations sis_base_ops = {
        .inherits               = &ata_bmdma_port_ops,
-       .prereset               = sis_pre_reset,
+       .reset.prereset         = sis_pre_reset,
 };
 
 static struct ata_port_operations sis_133_ops = {
index 93882e9..2d24c6b 100644 (file)
@@ -248,7 +248,7 @@ static struct ata_port_operations sl82c105_port_ops = {
        .bmdma_stop     = sl82c105_bmdma_stop,
        .cable_detect   = ata_cable_40wire,
        .set_piomode    = sl82c105_set_piomode,
-       .prereset       = sl82c105_pre_reset,
+       .reset.prereset = sl82c105_pre_reset,
        .sff_irq_check  = sl82c105_sff_irq_check,
 };
 
index 26d448a..596e86a 100644 (file)
@@ -170,7 +170,7 @@ static struct ata_port_operations triflex_port_ops = {
        .bmdma_stop     = triflex_bmdma_stop,
        .cable_detect   = ata_cable_40wire,
        .set_piomode    = triflex_set_piomode,
-       .prereset       = triflex_prereset,
+       .reset.prereset = triflex_prereset,
 };
 
 static int triflex_init_one(struct pci_dev *dev, const struct pci_device_id *id)
index bb80e78..a8c9cf6 100644 (file)
@@ -451,7 +451,7 @@ static struct ata_port_operations via_port_ops = {
        .cable_detect   = via_cable_detect,
        .set_piomode    = via_set_piomode,
        .set_dmamode    = via_set_dmamode,
-       .prereset       = via_pre_reset,
+       .reset.prereset = via_pre_reset,
        .sff_tf_load    = via_tf_load,
        .port_start     = via_port_start,
        .mode_filter    = via_mode_filter,
index 8e6b259..17a5a59 100644 (file)
@@ -140,7 +140,7 @@ static struct ata_port_operations adma_ata_ops = {
 
        .freeze                 = adma_freeze,
        .thaw                   = adma_thaw,
-       .prereset               = adma_prereset,
+       .reset.prereset         = adma_prereset,
 
        .port_start             = adma_port_start,
        .port_stop              = adma_port_stop,
index 6e1dd0d..7a4f592 100644 (file)
@@ -1097,7 +1097,7 @@ static struct ata_port_operations sata_dwc_ops = {
        .inherits               = &ata_sff_port_ops,
 
        .error_handler          = sata_dwc_error_handler,
-       .hardreset              = sata_dwc_hardreset,
+       .reset.hardreset        = sata_dwc_hardreset,
 
        .qc_issue               = sata_dwc_qc_issue,
 
index 87e91a9..84da8d6 100644 (file)
@@ -1395,9 +1395,9 @@ static struct ata_port_operations sata_fsl_ops = {
 
        .freeze = sata_fsl_freeze,
        .thaw = sata_fsl_thaw,
-       .softreset = sata_fsl_softreset,
-       .hardreset = sata_fsl_hardreset,
-       .pmp_softreset = sata_fsl_softreset,
+       .reset.softreset = sata_fsl_softreset,
+       .reset.hardreset = sata_fsl_hardreset,
+       .pmp_reset.softreset = sata_fsl_softreset,
        .error_handler = sata_fsl_error_handler,
        .post_internal_cmd = sata_fsl_post_internal_cmd,
 
index c8c817c..3421039 100644 (file)
@@ -428,7 +428,7 @@ static int ahci_highbank_hardreset(struct ata_link *link, unsigned int *class,
 
 static struct ata_port_operations ahci_highbank_ops = {
        .inherits               = &ahci_ops,
-       .hardreset              = ahci_highbank_hardreset,
+       .reset.hardreset        = ahci_highbank_hardreset,
        .transmit_led_message   = ecx_transmit_led_message,
 };
 
index db9c255..46a8c20 100644 (file)
@@ -730,7 +730,7 @@ static struct ata_port_operations inic_port_ops = {
 
        .freeze                 = inic_freeze,
        .thaw                   = inic_thaw,
-       .hardreset              = inic_hardreset,
+       .reset.hardreset        = inic_hardreset,
        .error_handler          = inic_error_handler,
        .post_internal_cmd      = inic_post_internal_cmd,
 
index bcbf968..ffb396f 100644 (file)
@@ -687,7 +687,7 @@ static struct ata_port_operations mv5_ops = {
 
        .freeze                 = mv_eh_freeze,
        .thaw                   = mv_eh_thaw,
-       .hardreset              = mv_hardreset,
+       .reset.hardreset        = mv_hardreset,
 
        .scr_read               = mv5_scr_read,
        .scr_write              = mv5_scr_write,
@@ -709,10 +709,10 @@ static struct ata_port_operations mv6_ops = {
 
        .freeze                 = mv_eh_freeze,
        .thaw                   = mv_eh_thaw,
-       .hardreset              = mv_hardreset,
-       .softreset              = mv_softreset,
-       .pmp_hardreset          = mv_pmp_hardreset,
-       .pmp_softreset          = mv_softreset,
+       .reset.hardreset        = mv_hardreset,
+       .reset.softreset        = mv_softreset,
+       .pmp_reset.hardreset    = mv_pmp_hardreset,
+       .pmp_reset.softreset    = mv_softreset,
        .error_handler          = mv_pmp_error_handler,
 
        .scr_read               = mv_scr_read,
index f36e291..841e7de 100644 (file)
@@ -462,7 +462,7 @@ static struct ata_port_operations nv_generic_ops = {
        .lost_interrupt         = ATA_OP_NULL,
        .scr_read               = nv_scr_read,
        .scr_write              = nv_scr_write,
-       .hardreset              = nv_hardreset,
+       .reset.hardreset        = nv_hardreset,
 };
 
 static struct ata_port_operations nv_nf2_ops = {
index 2df1a07..2a005ae 100644 (file)
@@ -188,7 +188,7 @@ static struct ata_port_operations pdc_sata_ops = {
        .scr_read               = pdc_sata_scr_read,
        .scr_write              = pdc_sata_scr_write,
        .port_start             = pdc_sata_port_start,
-       .hardreset              = pdc_sata_hardreset,
+       .reset.hardreset        = pdc_sata_hardreset,
 };
 
 /* First-generation chips need a more restrictive ->check_atapi_dma op,
@@ -206,7 +206,7 @@ static struct ata_port_operations pdc_pata_ops = {
        .freeze                 = pdc_freeze,
        .thaw                   = pdc_thaw,
        .port_start             = pdc_common_port_start,
-       .softreset              = pdc_pata_softreset,
+       .reset.softreset        = pdc_pata_softreset,
 };
 
 static const struct ata_port_info pdc_port_info[] = {
index 8a62861..cfb9b5b 100644 (file)
@@ -123,8 +123,8 @@ static struct ata_port_operations qs_ata_ops = {
 
        .freeze                 = qs_freeze,
        .thaw                   = qs_thaw,
-       .prereset               = qs_prereset,
-       .softreset              = ATA_OP_NULL,
+       .reset.prereset         = qs_prereset,
+       .reset.softreset        = ATA_OP_NULL,
        .error_handler          = qs_error_handler,
        .lost_interrupt         = ATA_OP_NULL,
 
index 22820a0..487eadd 100644 (file)
@@ -624,7 +624,7 @@ static struct ata_port_operations sata_rcar_port_ops = {
 
        .freeze                 = sata_rcar_freeze,
        .thaw                   = sata_rcar_thaw,
-       .softreset              = sata_rcar_softreset,
+       .reset.softreset        = sata_rcar_softreset,
 
        .scr_read               = sata_rcar_scr_read,
        .scr_write              = sata_rcar_scr_write,
index 87f4cde..d642ece 100644 (file)
@@ -393,10 +393,10 @@ static struct ata_port_operations sil24_ops = {
 
        .freeze                 = sil24_freeze,
        .thaw                   = sil24_thaw,
-       .softreset              = sil24_softreset,
-       .hardreset              = sil24_hardreset,
-       .pmp_softreset          = sil24_softreset,
-       .pmp_hardreset          = sil24_pmp_hardreset,
+       .reset.softreset        = sil24_softreset,
+       .reset.hardreset        = sil24_hardreset,
+       .pmp_reset.softreset    = sil24_softreset,
+       .pmp_reset.hardreset    = sil24_pmp_hardreset,
        .error_handler          = sil24_error_handler,
        .post_internal_cmd      = sil24_post_internal_cmd,
        .dev_config             = sil24_dev_config,
index 598a872..c5d6aa3 100644 (file)
@@ -340,8 +340,8 @@ static const struct scsi_host_template k2_sata_sht = {
 
 static struct ata_port_operations k2_sata_ops = {
        .inherits               = &ata_bmdma_port_ops,
-       .softreset              = k2_sata_softreset,
-       .hardreset              = k2_sata_hardreset,
+       .reset.softreset        = k2_sata_softreset,
+       .reset.hardreset        = k2_sata_hardreset,
        .sff_tf_load            = k2_sata_tf_load,
        .sff_tf_read            = k2_sata_tf_read,
        .sff_check_status       = k2_stat_check_status,
index f7f5131..0986ebd 100644 (file)
@@ -241,7 +241,7 @@ static struct ata_port_operations pdc_20621_ops = {
 
        .freeze                 = pdc_freeze,
        .thaw                   = pdc_thaw,
-       .softreset              = pdc_softreset,
+       .reset.softreset        = pdc_softreset,
        .error_handler          = pdc_error_handler,
        .lost_interrupt         = ATA_OP_NULL,
        .post_internal_cmd      = pdc_post_internal_cmd,
index 52894ff..4498579 100644 (file)
@@ -67,7 +67,7 @@ static struct ata_port_operations uli_ops = {
        .inherits               = &ata_bmdma_port_ops,
        .scr_read               = uli_scr_read,
        .scr_write              = uli_scr_write,
-       .hardreset              = ATA_OP_NULL,
+       .reset.hardreset        = ATA_OP_NULL,
 };
 
 static const struct ata_port_info uli_port_info = {
index 4ecd8f3..68e9003 100644 (file)
@@ -120,7 +120,7 @@ static struct ata_port_operations svia_base_ops = {
 static struct ata_port_operations vt6420_sata_ops = {
        .inherits               = &svia_base_ops,
        .freeze                 = svia_noop_freeze,
-       .prereset               = vt6420_prereset,
+       .reset.prereset         = vt6420_prereset,
        .bmdma_start            = vt6420_bmdma_start,
 };
 
@@ -140,7 +140,7 @@ static struct ata_port_operations vt6421_sata_ops = {
 
 static struct ata_port_operations vt8251_ops = {
        .inherits               = &svia_base_ops,
-       .hardreset              = sata_std_hardreset,
+       .reset.hardreset        = sata_std_hardreset,
        .scr_read               = vt8251_scr_read,
        .scr_write              = vt8251_scr_write,
 };
index 7b4e7a6..adb9e7a 100644 (file)
@@ -559,8 +559,8 @@ static int sas_ata_prereset(struct ata_link *link, unsigned long deadline)
 }
 
 static struct ata_port_operations sas_sata_ops = {
-       .prereset               = sas_ata_prereset,
-       .hardreset              = sas_ata_hard_reset,
+       .reset.prereset         = sas_ata_prereset,
+       .reset.hardreset        = sas_ata_hard_reset,
        .error_handler          = ata_std_error_handler,
        .post_internal_cmd      = sas_ata_post_internal,
        .qc_defer               = ata_std_qc_defer,
index cf0b3ff..912ace5 100644 (file)
@@ -944,6 +944,13 @@ struct ata_port {
  */
 #define ATA_OP_NULL            (void *)(unsigned long)(-ENOENT)
 
+struct ata_reset_operations {
+       ata_prereset_fn_t       prereset;
+       ata_reset_fn_t          softreset;
+       ata_reset_fn_t          hardreset;
+       ata_postreset_fn_t      postreset;
+};
+
 struct ata_port_operations {
        /*
         * Command execution
@@ -970,14 +977,8 @@ struct ata_port_operations {
 
        void (*freeze)(struct ata_port *ap);
        void (*thaw)(struct ata_port *ap);
-       ata_prereset_fn_t       prereset;
-       ata_reset_fn_t          softreset;
-       ata_reset_fn_t          hardreset;
-       ata_postreset_fn_t      postreset;
-       ata_prereset_fn_t       pmp_prereset;
-       ata_reset_fn_t          pmp_softreset;
-       ata_reset_fn_t          pmp_hardreset;
-       ata_postreset_fn_t      pmp_postreset;
+       struct ata_reset_operations reset;
+       struct ata_reset_operations pmp_reset;
        void (*error_handler)(struct ata_port *ap);
        void (*lost_interrupt)(struct ata_port *ap);
        void (*post_internal_cmd)(struct ata_queued_cmd *qc);