Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/jdolecek-ncq]: src/sys/dev/ic use xfer->c_slot instead of slot = 0



details:   https://anonhg.NetBSD.org/src/rev/11a750e1d784
branches:  jdolecek-ncq
changeset: 822880:11a750e1d784
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Sat Apr 15 23:58:31 2017 +0000

description:
use xfer->c_slot instead of slot = 0

fix ahci_bio_complete() calls - last param is reason, not slot

diffstat:

 sys/dev/ic/ahcisata_core.c |  93 +++++++++++++++++++++------------------------
 1 files changed, 44 insertions(+), 49 deletions(-)

diffs (truncated from 351 to 300 lines):

diff -r e3223eca37d6 -r 11a750e1d784 sys/dev/ic/ahcisata_core.c
--- a/sys/dev/ic/ahcisata_core.c        Sat Apr 15 23:54:41 2017 +0000
+++ b/sys/dev/ic/ahcisata_core.c        Sat Apr 15 23:58:31 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ahcisata_core.c,v 1.57.6.5 2017/04/15 23:54:41 jdolecek Exp $  */
+/*     $NetBSD: ahcisata_core.c,v 1.57.6.6 2017/04/15 23:58:31 jdolecek Exp $  */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.57.6.5 2017/04/15 23:54:41 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ahcisata_core.c,v 1.57.6.6 2017/04/15 23:58:31 jdolecek Exp $");
 
 #include <sys/types.h>
 #include <sys/malloc.h>
@@ -68,8 +68,8 @@
 
 static void ahci_cmd_start(struct ata_channel *, struct ata_xfer *);
 static int  ahci_cmd_complete(struct ata_channel *, struct ata_xfer *, int);
-static void ahci_cmd_done(struct ata_channel *, struct ata_xfer *, int);
-static void ahci_cmd_kill_xfer(struct ata_channel *, struct ata_xfer *, int) ;
+static void ahci_cmd_done(struct ata_channel *, struct ata_xfer *);
+static void ahci_cmd_kill_xfer(struct ata_channel *, struct ata_xfer *, int);
 static void ahci_bio_start(struct ata_channel *, struct ata_xfer *);
 static int  ahci_bio_complete(struct ata_channel *, struct ata_xfer *, int);
 static void ahci_bio_kill_xfer(struct ata_channel *, struct ata_xfer *, int) ;
@@ -365,7 +365,7 @@
                sc->sc_chanarray[i] = chp;
                chp->ch_channel = i;
                chp->ch_atac = &sc->sc_atac;
-               chp->ch_queue = ata_queue_alloc(1); // XXX
+               chp->ch_queue = ata_queue_alloc(1); // XXX sc_ncmds
                if (chp->ch_queue == NULL) {
                        aprint_error("%s port %d: can't allocate memory for "
                            "command queue", AHCINAME(sc), i);
@@ -1063,13 +1063,12 @@
                printf("ahci_cmd_kill_xfer: unknown reason %d\n", reason);
                panic("ahci_cmd_kill_xfer");
        }
-       ahci_cmd_done(chp, xfer, 0 /* XXX slot */);
+       ahci_cmd_done(chp, xfer);
 }
 
 static int
 ahci_cmd_complete(struct ata_channel *chp, struct ata_xfer *xfer, int is)
 {
-       int slot = 0; /* XXX slot */
        struct ata_command *ata_c = &xfer->c_ata_c;
        struct ahci_softc *sc = (struct ahci_softc *)chp->ch_atac;
        struct ahci_channel *achp = (struct ahci_channel *)chp;
@@ -1099,12 +1098,12 @@
        if (ata_c->flags & AT_READREG)
                satafis_rdh_cmd_readreg(ata_c, achp->ahcic_rfis->rfis_rfis);
 
-       ahci_cmd_done(chp, xfer, slot);
+       ahci_cmd_done(chp, xfer);
        return 0;
 }
 
 static void
-ahci_cmd_done(struct ata_channel *chp, struct ata_xfer *xfer, int slot)
+ahci_cmd_done(struct ata_channel *chp, struct ata_xfer *xfer)
 {
        struct ahci_softc *sc = (struct ahci_softc *)chp->ch_atac;
        struct ahci_channel *achp = (struct ahci_channel *)chp;
@@ -1116,17 +1115,17 @@
            chp->ch_channel, chp->ch_status, xfer->c_flags, ata_c->flags), DEBUG_FUNCS);
 
        /* this comamnd is not active any more */
-       achp->ahcic_cmds_active &= ~(1 << slot);
+       achp->ahcic_cmds_active &= ~(1 << xfer->c_slot);
 
        if (ata_c->flags & (AT_READ|AT_WRITE) && ata_c->bcount > 0) {
-               bus_dmamap_t map = achp->ahcic_datad[slot];
+               bus_dmamap_t map = achp->ahcic_datad[xfer->c_slot];
                bus_dmamap_sync(sc->sc_dmat, map, 0, map->dm_mapsize,
                    (ata_c->flags & AT_READ) ? BUS_DMASYNC_POSTREAD :
                    BUS_DMASYNC_POSTWRITE);
                bus_dmamap_unload(sc->sc_dmat, map);
        }
 
-       AHCI_CMDH_SYNC(sc, achp, slot,
+       AHCI_CMDH_SYNC(sc, achp, xfer->c_slot,
            BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
        /* ata(4) expects IDENTIFY data to be in host endianess */
@@ -1139,7 +1138,7 @@
        }
 
        ata_c->flags |= AT_DONE;
-       if (achp->ahcic_cmdh[slot].cmdh_prdbc)
+       if (achp->ahcic_cmdh[xfer->c_slot].cmdh_prdbc)
                ata_c->flags |= AT_XFDONE;
 
        if (ata_c->flags & AT_WAIT)
@@ -1178,7 +1177,6 @@
        struct ahci_softc *sc = (struct ahci_softc *)chp->ch_atac;
        struct ahci_channel *achp = (struct ahci_channel *)chp;
        struct ata_bio *ata_bio = &xfer->c_bio;
-       int slot = 0 /* XXX slot */;
        struct ahci_cmd_tbl *cmd_tbl;
        struct ahci_cmd_header *cmd_h;
        int i;
@@ -1187,28 +1185,28 @@
        AHCIDEBUG_PRINT(("ahci_bio_start CI 0x%x\n",
            AHCI_READ(sc, AHCI_P_CI(chp->ch_channel))), DEBUG_XFERS);
 
-       cmd_tbl = achp->ahcic_cmd_tbl[slot];
+       cmd_tbl = achp->ahcic_cmd_tbl[xfer->c_slot];
        AHCIDEBUG_PRINT(("%s port %d tbl %p\n", AHCINAME(sc), chp->ch_channel,
              cmd_tbl), DEBUG_XFERS);
 
        satafis_rhd_construct_bio(xfer, cmd_tbl->cmdt_cfis);
        cmd_tbl->cmdt_cfis[rhd_c] |= xfer->c_drive;
 
-       cmd_h = &achp->ahcic_cmdh[slot];
+       cmd_h = &achp->ahcic_cmdh[xfer->c_slot];
        AHCIDEBUG_PRINT(("%s port %d header %p\n", AHCINAME(sc),
            chp->ch_channel, cmd_h), DEBUG_XFERS);
-       if (ahci_dma_setup(chp, slot, ata_bio->databuf, ata_bio->bcount,
+       if (ahci_dma_setup(chp, xfer->c_slot, ata_bio->databuf, ata_bio->bcount,
            (ata_bio->flags & ATA_READ) ? BUS_DMA_READ : BUS_DMA_WRITE)) {
                ata_bio->error = ERR_DMA;
                ata_bio->r_error = 0;
-               ahci_bio_complete(chp, xfer, slot);
+               ahci_bio_complete(chp, xfer, 0);
                return;
        }
        cmd_h->cmdh_flags = htole16(
            ((ata_bio->flags & ATA_READ) ? 0 :  AHCI_CMDH_F_WR) |
            RHD_FISLEN / 4 | (xfer->c_drive << AHCI_CMDH_F_PMP_SHIFT));
        cmd_h->cmdh_prdbc = 0;
-       AHCI_CMDH_SYNC(sc, achp, slot,
+       AHCI_CMDH_SYNC(sc, achp, xfer->c_slot,
            BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
        if (xfer->c_flags & C_POLL) {
@@ -1219,9 +1217,9 @@
        chp->ch_flags |= ATACH_IRQ_WAIT;
        chp->ch_status = 0;
        /* start command */
-       AHCI_WRITE(sc, AHCI_P_CI(chp->ch_channel), 1 << slot);
+       AHCI_WRITE(sc, AHCI_P_CI(chp->ch_channel), 1 << xfer->c_slot);
        /* and says we started this command */
-       achp->ahcic_cmds_active |= 1 << slot;
+       achp->ahcic_cmds_active |= 1 << xfer->c_slot;
 
        if ((xfer->c_flags & C_POLL) == 0) {
                chp->ch_flags |= ATACH_IRQ_WAIT; /* wait for interrupt */
@@ -1246,7 +1244,7 @@
            DEBUG_XFERS);
        if ((ata_bio->flags & ATA_ITSDONE) == 0) {
                ata_bio->error = TIMEOUT;
-               ahci_bio_complete(chp, xfer, slot);
+               ahci_bio_complete(chp, xfer, 0);
        }
        /* reenable interrupts */
        AHCI_WRITE(sc, AHCI_GHC, AHCI_READ(sc, AHCI_GHC) | AHCI_GHC_IE);
@@ -1255,14 +1253,13 @@
 static void
 ahci_bio_kill_xfer(struct ata_channel *chp, struct ata_xfer *xfer, int reason)
 {
-       int slot = 0;  /* XXX slot */
        int drive = xfer->c_drive;
        struct ata_bio *ata_bio = &xfer->c_bio;
        struct ahci_channel *achp = (struct ahci_channel *)chp;
        AHCIDEBUG_PRINT(("ahci_bio_kill_xfer channel %d\n", chp->ch_channel),
            DEBUG_FUNCS);
 
-       achp->ahcic_cmds_active &= ~(1 << slot);
+       achp->ahcic_cmds_active &= ~(1 << xfer->c_slot);
        ata_bio->flags |= ATA_ITSDONE;
        switch (reason) {
        case KILL_GONE:
@@ -1282,7 +1279,6 @@
 static int
 ahci_bio_complete(struct ata_channel *chp, struct ata_xfer *xfer, int is)
 {
-       int slot = 0; /* XXX slot */
        struct ata_bio *ata_bio = &xfer->c_bio;
        int drive = xfer->c_drive;
        struct ahci_channel *achp = (struct ahci_channel *)chp;
@@ -1291,7 +1287,7 @@
        AHCIDEBUG_PRINT(("ahci_bio_complete channel %d\n", chp->ch_channel),
            DEBUG_FUNCS);
 
-       achp->ahcic_cmds_active &= ~(1 << slot);
+       achp->ahcic_cmds_active &= ~(1 << xfer->c_slot);
        chp->ch_flags &= ~ATACH_IRQ_WAIT;
        if (xfer->c_flags & C_TIMEOU) {
                ata_bio->error = TIMEOUT;
@@ -1301,11 +1297,11 @@
 
        ata_deactivate_xfer(chp, xfer);
 
-       bus_dmamap_sync(sc->sc_dmat, achp->ahcic_datad[slot], 0,
-           achp->ahcic_datad[slot]->dm_mapsize,
+       bus_dmamap_sync(sc->sc_dmat, achp->ahcic_datad[xfer->c_slot], 0,
+           achp->ahcic_datad[xfer->c_slot]->dm_mapsize,
            (ata_bio->flags & ATA_READ) ? BUS_DMASYNC_POSTREAD :
            BUS_DMASYNC_POSTWRITE);
-       bus_dmamap_unload(sc->sc_dmat, achp->ahcic_datad[slot]);
+       bus_dmamap_unload(sc->sc_dmat, achp->ahcic_datad[xfer->c_slot]);
 
        if (ata_waitdrain_xfer_check(chp, xfer)) {
                return 0;
@@ -1319,7 +1315,7 @@
        } else if (chp->ch_status & WDCS_CORR)
                ata_bio->flags |= ATA_CORR;
 
-       AHCI_CMDH_SYNC(sc, achp, slot,
+       AHCI_CMDH_SYNC(sc, achp, xfer->c_slot,
            BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
        AHCIDEBUG_PRINT(("ahci_bio_complete bcount %ld",
            ata_bio->bcount), DEBUG_XFERS);
@@ -1330,7 +1326,8 @@
         * was transfered and leave bcount as-is.
         */
        if ((ata_bio->flags & ATA_READ) || ata_bio->error == NOERROR)
-               ata_bio->bcount -= le32toh(achp->ahcic_cmdh[slot].cmdh_prdbc);
+               ata_bio->bcount -=
+                   le32toh(achp->ahcic_cmdh[xfer->c_slot].cmdh_prdbc);
        AHCIDEBUG_PRINT((" now %ld\n", ata_bio->bcount), DEBUG_XFERS);
        (*chp->ch_drive[drive].drv_done)(chp->ch_drive[drive].drv_softc, xfer);
        atastart(chp);
@@ -1589,7 +1586,6 @@
        struct ahci_softc *sc = (struct ahci_softc *)chp->ch_atac;
        struct ahci_channel *achp = (struct ahci_channel *)chp;
        struct scsipi_xfer *sc_xfer = xfer->c_scsipi;
-       int slot = 0 /* XXX slot */;
        struct ahci_cmd_tbl *cmd_tbl;
        struct ahci_cmd_header *cmd_h;
        int i;
@@ -1598,7 +1594,7 @@
        AHCIDEBUG_PRINT(("ahci_atapi_start CI 0x%x\n",
            AHCI_READ(sc, AHCI_P_CI(chp->ch_channel))), DEBUG_XFERS);
 
-       cmd_tbl = achp->ahcic_cmd_tbl[slot];
+       cmd_tbl = achp->ahcic_cmd_tbl[xfer->c_slot];
        AHCIDEBUG_PRINT(("%s port %d tbl %p\n", AHCINAME(sc), chp->ch_channel,
              cmd_tbl), DEBUG_XFERS);
 
@@ -1607,15 +1603,16 @@
        memset(&cmd_tbl->cmdt_acmd, 0, sizeof(cmd_tbl->cmdt_acmd));
        memcpy(cmd_tbl->cmdt_acmd, sc_xfer->cmd, sc_xfer->cmdlen);
 
-       cmd_h = &achp->ahcic_cmdh[slot];
+       cmd_h = &achp->ahcic_cmdh[xfer->c_slot];
        AHCIDEBUG_PRINT(("%s port %d header %p\n", AHCINAME(sc),
            chp->ch_channel, cmd_h), DEBUG_XFERS);
-       if (ahci_dma_setup(chp, slot, sc_xfer->datalen ? sc_xfer->data : NULL,
+       if (ahci_dma_setup(chp, xfer->c_slot,
+           sc_xfer->datalen ? sc_xfer->data : NULL,
            sc_xfer->datalen,
            (sc_xfer->xs_control & XS_CTL_DATA_IN) ?
            BUS_DMA_READ : BUS_DMA_WRITE)) {
                sc_xfer->error = XS_DRIVER_STUFFUP;
-               ahci_atapi_complete(chp, xfer, slot);
+               ahci_atapi_complete(chp, xfer, 0);
                return;
        }
        cmd_h->cmdh_flags = htole16(
@@ -1623,7 +1620,7 @@
            RHD_FISLEN / 4 | AHCI_CMDH_F_A |
            (xfer->c_drive << AHCI_CMDH_F_PMP_SHIFT));
        cmd_h->cmdh_prdbc = 0;
-       AHCI_CMDH_SYNC(sc, achp, slot,
+       AHCI_CMDH_SYNC(sc, achp, xfer->c_slot,
            BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
        if (xfer->c_flags & C_POLL) {
@@ -1634,9 +1631,9 @@
        chp->ch_flags |= ATACH_IRQ_WAIT;
        chp->ch_status = 0;
        /* start command */
-       AHCI_WRITE(sc, AHCI_P_CI(chp->ch_channel), 1 << slot);
+       AHCI_WRITE(sc, AHCI_P_CI(chp->ch_channel), 1 << xfer->c_slot);
        /* and says we started this command */
-       achp->ahcic_cmds_active |= 1 << slot;
+       achp->ahcic_cmds_active |= 1 << xfer->c_slot;
 
        if ((xfer->c_flags & C_POLL) == 0) {
                chp->ch_flags |= ATACH_IRQ_WAIT; /* wait for interrupt */
@@ -1661,7 +1658,7 @@
            DEBUG_XFERS);
        if ((sc_xfer->xs_status & XS_STS_DONE) == 0) {
                sc_xfer->error = XS_TIMEOUT;
-               ahci_atapi_complete(chp, xfer, slot);
+               ahci_atapi_complete(chp, xfer, 0);
        }
        /* reenable interrupts */
        AHCI_WRITE(sc, AHCI_GHC, AHCI_READ(sc, AHCI_GHC) | AHCI_GHC_IE);
@@ -1670,7 +1667,6 @@
 static int
 ahci_atapi_complete(struct ata_channel *chp, struct ata_xfer *xfer, int irq)
 {
-       int slot = xfer->c_slot; /* XXX slot */



Home | Main Index | Thread Index | Old Index