]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/ata/sata_mv.c
Merge tag 'pci-v5.5-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
[linux.git] / drivers / ata / sata_mv.c
index ad385a113391ea95279f65d117890c590b75dbd9..277f11909fc1ab37338f3390781db00814104a6a 100644 (file)
@@ -592,8 +592,8 @@ static int mv5_scr_write(struct ata_link *link, unsigned int sc_reg_in, u32 val)
 static int mv_port_start(struct ata_port *ap);
 static void mv_port_stop(struct ata_port *ap);
 static int mv_qc_defer(struct ata_queued_cmd *qc);
-static void mv_qc_prep(struct ata_queued_cmd *qc);
-static void mv_qc_prep_iie(struct ata_queued_cmd *qc);
+static enum ata_completion_errors mv_qc_prep(struct ata_queued_cmd *qc);
+static enum ata_completion_errors mv_qc_prep_iie(struct ata_queued_cmd *qc);
 static unsigned int mv_qc_issue(struct ata_queued_cmd *qc);
 static int mv_hardreset(struct ata_link *link, unsigned int *class,
                        unsigned long deadline);
@@ -2031,7 +2031,7 @@ static void mv_rw_multi_errata_sata24(struct ata_queued_cmd *qc)
  *      LOCKING:
  *      Inherited from caller.
  */
-static void mv_qc_prep(struct ata_queued_cmd *qc)
+static enum ata_completion_errors mv_qc_prep(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
        struct mv_port_priv *pp = ap->private_data;
@@ -2043,15 +2043,15 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
        switch (tf->protocol) {
        case ATA_PROT_DMA:
                if (tf->command == ATA_CMD_DSM)
-                       return;
+                       return AC_ERR_OK;
                /* fall-thru */
        case ATA_PROT_NCQ:
                break;  /* continue below */
        case ATA_PROT_PIO:
                mv_rw_multi_errata_sata24(qc);
-               return;
+               return AC_ERR_OK;
        default:
-               return;
+               return AC_ERR_OK;
        }
 
        /* Fill in command request block
@@ -2098,12 +2098,10 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
                 * non-NCQ mode are: [RW] STREAM DMA and W DMA FUA EXT, none
                 * of which are defined/used by Linux.  If we get here, this
                 * driver needs work.
-                *
-                * FIXME: modify libata to give qc_prep a return value and
-                * return error here.
                 */
-               BUG_ON(tf->command);
-               break;
+               ata_port_err(ap, "%s: unsupported command: %.2x\n", __func__,
+                               tf->command);
+               return AC_ERR_INVALID;
        }
        mv_crqb_pack_cmd(cw++, tf->nsect, ATA_REG_NSECT, 0);
        mv_crqb_pack_cmd(cw++, tf->hob_lbal, ATA_REG_LBAL, 0);
@@ -2116,8 +2114,10 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
        mv_crqb_pack_cmd(cw++, tf->command, ATA_REG_CMD, 1);    /* last */
 
        if (!(qc->flags & ATA_QCFLAG_DMAMAP))
-               return;
+               return AC_ERR_OK;
        mv_fill_sg(qc);
+
+       return AC_ERR_OK;
 }
 
 /**
@@ -2132,7 +2132,7 @@ static void mv_qc_prep(struct ata_queued_cmd *qc)
  *      LOCKING:
  *      Inherited from caller.
  */
-static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
+static enum ata_completion_errors mv_qc_prep_iie(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
        struct mv_port_priv *pp = ap->private_data;
@@ -2143,9 +2143,9 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
 
        if ((tf->protocol != ATA_PROT_DMA) &&
            (tf->protocol != ATA_PROT_NCQ))
-               return;
+               return AC_ERR_OK;
        if (tf->command == ATA_CMD_DSM)
-               return;  /* use bmdma for this */
+               return AC_ERR_OK;  /* use bmdma for this */
 
        /* Fill in Gen IIE command request block */
        if (!(tf->flags & ATA_TFLAG_WRITE))
@@ -2186,8 +2186,10 @@ static void mv_qc_prep_iie(struct ata_queued_cmd *qc)
                );
 
        if (!(qc->flags & ATA_QCFLAG_DMAMAP))
-               return;
+               return AC_ERR_OK;
        mv_fill_sg(qc);
+
+       return AC_ERR_OK;
 }
 
 /**