svn commit: r250779 - in projects/pmac_pmu/sys/powerpc: include powermac
Justin Hibbits
jhibbits at FreeBSD.org
Sat May 18 17:29:34 UTC 2013
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];
};
More information about the svn-src-projects
mailing list