Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 May 2013 17:29:33 +0000 (UTC)
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r250779 - in projects/pmac_pmu/sys/powerpc: include powermac
Message-ID:  <201305181729.r4IHTXck048404@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jhibbits
Date: Sat May 18 17:29:32 2013
New Revision: 250779
URL: http://svnweb.freebsd.org/changeset/base/250779

Log:
  Add routines to save and restore DBDMA channels.

Modified:
  projects/pmac_pmu/sys/powerpc/include/dbdma.h
  projects/pmac_pmu/sys/powerpc/powermac/dbdma.c
  projects/pmac_pmu/sys/powerpc/powermac/dbdmavar.h

Modified: projects/pmac_pmu/sys/powerpc/include/dbdma.h
==============================================================================
--- projects/pmac_pmu/sys/powerpc/include/dbdma.h	Sat May 18 14:05:32 2013	(r250778)
+++ projects/pmac_pmu/sys/powerpc/include/dbdma.h	Sat May 18 17:29:32 2013	(r250779)
@@ -147,4 +147,7 @@ void dbdma_insert_branch(dbdma_channel_t
 
 void dbdma_sync_commands(dbdma_channel_t *chan, bus_dmasync_op_t op);
 
+void dbdma_save_state(dbdma_channel_t *chan);
+void dbdma_restore_state(dbdma_channel_t *chan);
+
 #endif /* _MACHINE_DBDMA_H_ */

Modified: projects/pmac_pmu/sys/powerpc/powermac/dbdma.c
==============================================================================
--- projects/pmac_pmu/sys/powerpc/powermac/dbdma.c	Sat May 18 14:05:32 2013	(r250778)
+++ projects/pmac_pmu/sys/powerpc/powermac/dbdma.c	Sat May 18 17:29:32 2013	(r250779)
@@ -343,6 +343,31 @@ dbdma_sync_commands(dbdma_channel_t *cha
 	bus_dmamap_sync(chan->sc_dmatag, chan->sc_dmamap, op);
 }
 
+void
+dbdma_save_state(dbdma_channel_t *chan)
+{
+
+	chan->sc_saved_regs[0] = dbdma_read_reg(chan, CHAN_CMDPTR);
+	chan->sc_saved_regs[1] = dbdma_read_reg(chan, CHAN_CMDPTR_HI);
+	chan->sc_saved_regs[2] = dbdma_read_reg(chan, CHAN_INTR_SELECT);
+	chan->sc_saved_regs[3] = dbdma_read_reg(chan, CHAN_BRANCH_SELECT);
+	chan->sc_saved_regs[4] = dbdma_read_reg(chan, CHAN_WAIT_SELECT);
+
+	dbdma_stop(chan);
+}
+
+void
+dbdma_restore_state(dbdma_channel_t *chan)
+{
+
+	dbdma_wake(chan);
+	dbdma_write_reg(chan, CHAN_CMDPTR, chan->sc_saved_regs[0]);
+	dbdma_write_reg(chan, CHAN_CMDPTR_HI, chan->sc_saved_regs[1]);
+	dbdma_write_reg(chan, CHAN_INTR_SELECT, chan->sc_saved_regs[2]);
+	dbdma_write_reg(chan, CHAN_BRANCH_SELECT, chan->sc_saved_regs[3]);
+	dbdma_write_reg(chan, CHAN_WAIT_SELECT, chan->sc_saved_regs[4]);
+}
+
 static uint32_t
 dbdma_read_reg(dbdma_channel_t *chan, u_int offset)
 {

Modified: projects/pmac_pmu/sys/powerpc/powermac/dbdmavar.h
==============================================================================
--- projects/pmac_pmu/sys/powerpc/powermac/dbdmavar.h	Sat May 18 14:05:32 2013	(r250778)
+++ projects/pmac_pmu/sys/powerpc/powermac/dbdmavar.h	Sat May 18 17:29:32 2013	(r250779)
@@ -60,6 +60,7 @@ struct dbdma_channel {
 
 	bus_dma_tag_t		sc_dmatag;
 	bus_dmamap_t		sc_dmamap;
+	uint32_t		sc_saved_regs[5];
 };
 	
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305181729.r4IHTXck048404>