svn commit: r219338 - head/sys/dev/ata/chipsets

Marius Strobl marius at FreeBSD.org
Sun Mar 6 13:08:25 UTC 2011


Author: marius
Date: Sun Mar  6 13:08:25 2011
New Revision: 219338
URL: http://svn.freebsd.org/changeset/base/219338

Log:
  Add missing bus_dmamap_sync() calls for the work DMA map.
  
  MFC after:	2 weeks

Modified:
  head/sys/dev/ata/chipsets/ata-siliconimage.c

Modified: head/sys/dev/ata/chipsets/ata-siliconimage.c
==============================================================================
--- head/sys/dev/ata/chipsets/ata-siliconimage.c	Sun Mar  6 13:06:41 2011	(r219337)
+++ head/sys/dev/ata/chipsets/ata-siliconimage.c	Sun Mar  6 13:08:25 2011	(r219338)
@@ -494,7 +494,11 @@ ata_siiprb_ch_attach(device_t dev)
 static int
 ata_siiprb_ch_detach(device_t dev)
 {
+    struct ata_channel *ch = device_get_softc(dev);
 
+    if (ch->dma.work_tag && ch->dma.work_map)
+	bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map,
+	    BUS_DMASYNC_POSTWRITE);
     ata_dmafini(dev);
     return 0;
 }
@@ -576,6 +580,8 @@ ata_siiprb_begin_transaction(struct ata_
 	}
     }
 
+    bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, BUS_DMASYNC_PREWRITE);
+
     /* activate the prb */
     prb_bus = ch->dma.work_bus;
     ATA_OUTL(ctlr->r_res2, 0x1c00 + offset, prb_bus);
@@ -598,7 +604,9 @@ ata_siiprb_end_transaction(struct ata_re
 
     /* kill the timeout */
     callout_stop(&request->callout);
-    
+
+    bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, BUS_DMASYNC_POSTWRITE);
+
     prb = (struct ata_siiprb_command *)
 	((u_int8_t *)rman_get_virtual(ctlr->r_res2) + offset);
 
@@ -671,6 +679,8 @@ ata_siiprb_issue_cmd(device_t dev)
     int offset = ch->unit * 0x2000;
     int timeout;
 
+    bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, BUS_DMASYNC_PREWRITE);
+
     /* issue command to chip */
     ATA_OUTL(ctlr->r_res2, 0x1c00 + offset, prb_bus);
     ATA_OUTL(ctlr->r_res2, 0x1c04 + offset, prb_bus >> 32);
@@ -681,6 +691,9 @@ ata_siiprb_issue_cmd(device_t dev)
         if ((status = ATA_INL(ctlr->r_res2, 0x1008 + offset)) & 0x00010000)
             break;
     }
+
+    bus_dmamap_sync(ch->dma.work_tag, ch->dma.work_map, BUS_DMASYNC_POSTWRITE);
+
     // SOS XXX ATA_OUTL(ctlr->r_res2, 0x1008 + offset, 0x00010000);
     ATA_OUTL(ctlr->r_res2, 0x1008 + offset, 0x08ff08ff);
 


More information about the svn-src-head mailing list