summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/i830_debug.c100
-rw-r--r--src/i830_debug.h2
3 files changed, 104 insertions, 0 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 16e9812b..f0f6691e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -46,6 +46,8 @@ i810_drv_la_SOURCES = \
i830_accel.c \
i830_common.h \
i830_cursor.c \
+ i830_debug.c \
+ i830_debug.h \
i830_dga.c \
i830_display.c \
i830_display.h \
diff --git a/src/i830_debug.c b/src/i830_debug.c
new file mode 100644
index 00000000..37c0e049
--- /dev/null
+++ b/src/i830_debug.c
@@ -0,0 +1,100 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "xf86.h"
+#include "xf86_ansic.h"
+#include "i830.h"
+
+/* XXX: What was the syntax for sticking quotes around the "reg" argument? */
+#define DEFINEREG(reg) \
+ { reg, NULL, 0 }
+
+static struct i830SnapshotRec {
+ int reg;
+ char *name;
+ CARD32 regval;
+} i830_snapshot[] = {
+ DEFINEREG(ADPA),
+ DEFINEREG(LVDS),
+ DEFINEREG(DVOA),
+ DEFINEREG(DVOB),
+ DEFINEREG(DVOC),
+ DEFINEREG(DVO_ENABLE),
+ DEFINEREG(DVOA_SRCDIM),
+ DEFINEREG(DVOB_SRCDIM),
+ DEFINEREG(DVOC_SRCDIM),
+
+ DEFINEREG(PP_CONTROL),
+ DEFINEREG(PP_STATUS),
+ DEFINEREG(PFIT_CONTROL),
+ DEFINEREG(PFIT_PGM_RATIOS),
+ DEFINEREG(PORT_HOTPLUG_EN),
+ DEFINEREG(PORT_HOTPLUG_STAT),
+
+ DEFINEREG(DSPACNTR),
+ DEFINEREG(DSPASTRIDE),
+ DEFINEREG(DSPAPOS),
+ DEFINEREG(DSPASIZE),
+ DEFINEREG(DSPABASE),
+ DEFINEREG(PIPEACONF),
+ DEFINEREG(PIPEASRC),
+
+ DEFINEREG(FPA0),
+ DEFINEREG(FPA1),
+ DEFINEREG(DPLL_A),
+ DEFINEREG(HTOTAL_A),
+ DEFINEREG(HBLANK_A),
+ DEFINEREG(HSYNC_A),
+ DEFINEREG(VTOTAL_A),
+ DEFINEREG(VBLANK_A),
+ DEFINEREG(VSYNC_A),
+
+ DEFINEREG(DSPBCNTR),
+ DEFINEREG(DSPBSTRIDE),
+ DEFINEREG(DSPBPOS),
+ DEFINEREG(DSPBSIZE),
+ DEFINEREG(DSPBBASE),
+ DEFINEREG(PIPEBCONF),
+ DEFINEREG(PIPEBSRC),
+
+ DEFINEREG(FPB0),
+ DEFINEREG(FPB1),
+ DEFINEREG(DPLL_B),
+ DEFINEREG(HTOTAL_B),
+ DEFINEREG(HBLANK_B),
+ DEFINEREG(HSYNC_B),
+ DEFINEREG(VTOTAL_B),
+ DEFINEREG(VBLANK_B),
+ DEFINEREG(VSYNC_B),
+
+ { 0, NULL, 0}
+};
+#undef DEFINEREG
+#define NUM_I830_SNAPSHOTREGS (sizeof(i830_snapshot) / sizeof(i830_snapshot[0]))
+
+void i830TakeRegSnapshot(ScrnInfoPtr pScrn)
+{
+ I830Ptr pI830 = I830PTR(pScrn);
+ int i;
+
+ for (i = 0; i < NUM_I830_SNAPSHOTREGS; i++) {
+ i830_snapshot[i].regval = INREG(i830_snapshot[i].reg);
+ }
+}
+
+void i830CompareRegsToSnapshot(ScrnInfoPtr pScrn)
+{
+ I830Ptr pI830 = I830PTR(pScrn);
+ int i;
+
+ for (i = 0; i < NUM_I830_SNAPSHOTREGS; i++) {
+ CARD32 val = INREG(i830_snapshot[i].reg);
+ if (i830_snapshot[i].regval != val) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Register 0x%x (%s) changed from 0x%08x to 0x%08x\n",
+ i830_snapshot[i].reg, i830_snapshot[i].name,
+ (int)i830_snapshot[i].regval, (int)val);
+ }
+ }
+}
diff --git a/src/i830_debug.h b/src/i830_debug.h
new file mode 100644
index 00000000..c02ff256
--- /dev/null
+++ b/src/i830_debug.h
@@ -0,0 +1,2 @@
+void i830TakeRegSnapshot(ScrnInfoPtr pScrn);
+void i830CompareRegsToSnapshot(ScrnInfoPtr pScrn);