Index: vidix/drivers/mach64_vid.c =================================================================== RCS file: /cvsroot/mplayer/main/vidix/drivers/mach64_vid.c,v retrieving revision 1.27 diff -u -r1.27 mach64_vid.c --- vidix/drivers/mach64_vid.c 21 Oct 2002 16:57:02 -0000 1.27 +++ vidix/drivers/mach64_vid.c 21 Oct 2002 22:11:47 -0000 @@ -116,7 +116,48 @@ DECLARE_VREG(VIDEO_FORMAT), DECLARE_VREG(VIDEO_CONFIG), DECLARE_VREG(VIDEO_SYNC_TEST), - DECLARE_VREG(VIDEO_SYNC_TEST_B) + DECLARE_VREG(VIDEO_SYNC_TEST_B), + DECLARE_VREG(CLOCK_CNTL), + DECLARE_VREG(SCALER_COLOUR_CNTL), + DECLARE_VREG(OVERLAY_GRAPHICS_KEY_MSK), + DECLARE_VREG(OVERLAY_GRAPHICS_KEY_CLR), + DECLARE_VREG(OVERLAY_KEY_CNTL) +}; + +/* saved registers */ +static video_registers_t saved_regs[] = +{ + DECLARE_VREG(OVERLAY_SCALE_INC), + DECLARE_VREG(OVERLAY_Y_X_START), + DECLARE_VREG(OVERLAY_Y_X_END), + DECLARE_VREG(OVERLAY_SCALE_CNTL), + DECLARE_VREG(OVERLAY_EXCLUSIVE_HORZ), + DECLARE_VREG(OVERLAY_EXCLUSIVE_VERT), + DECLARE_VREG(OVERLAY_TEST), + DECLARE_VREG(SCALER_BUF_PITCH), + DECLARE_VREG(SCALER_HEIGHT_WIDTH), + DECLARE_VREG(SCALER_BUF0_OFFSET), + DECLARE_VREG(SCALER_BUF0_OFFSET_U), + DECLARE_VREG(SCALER_BUF0_OFFSET_V), + DECLARE_VREG(SCALER_BUF1_OFFSET), + DECLARE_VREG(SCALER_BUF1_OFFSET_U), + DECLARE_VREG(SCALER_BUF1_OFFSET_V), + DECLARE_VREG(SCALER_H_COEFF0), + DECLARE_VREG(SCALER_H_COEFF1), + DECLARE_VREG(SCALER_H_COEFF2), + DECLARE_VREG(SCALER_H_COEFF3), + DECLARE_VREG(SCALER_H_COEFF4), + DECLARE_VREG(SCALER_COLOUR_CNTL), + DECLARE_VREG(SCALER_THRESHOLD), + DECLARE_VREG(VIDEO_FORMAT), + DECLARE_VREG(VIDEO_CONFIG), + DECLARE_VREG(VIDEO_SYNC_TEST), + DECLARE_VREG(VIDEO_SYNC_TEST_B), + DECLARE_VREG(CLOCK_CNTL), + DECLARE_VREG(SCALER_COLOUR_CNTL), + DECLARE_VREG(OVERLAY_GRAPHICS_KEY_MSK), + DECLARE_VREG(OVERLAY_GRAPHICS_KEY_CLR), + DECLARE_VREG(OVERLAY_KEY_CNTL) }; /* VIDIX exports */ @@ -330,6 +371,32 @@ printf("[mach64] *** End of OV0 registers dump ***\n"); } +static void mach64_vid_save_regs( void ) +{ + size_t i; + for(i=0;i 1) printf("saving %s=%x\n",vregs[i].sname, value); + saved_regs[i].name=vregs[i].name; + saved_regs[i].value=value; + } + if(__verbose > 0) printf("[mach64] *** OV0 registers saved ***\n"); +} + +static void mach64_vid_restore_regs( void ) +{ + size_t i; + for(i=0;i 1) printf("restoring %s=%x\n",vregs[i].sname, saved_regs[i].value); + OUTREG(vregs[i].name, saved_regs[i].value); + } + if(__verbose > 0) printf("[mach64] *** OV0 registers restored ***\n"); +} unsigned int vixGetVersion(void) { @@ -466,6 +533,8 @@ err = mtrr_set_type(pci_info.base0,mach64_ram_size,MTRR_TYPE_WRCOMB); if(!err) printf("[mach64] Set write-combining type of video memory\n"); + mach64_vid_save_regs(); + /* check if planar formats are supported */ supports_planar=0; mach64_wait_for_idle(); @@ -501,6 +570,7 @@ void vixDestroy(void) { + mach64_vid_restore_regs(); unmap_phys_mem(mach64_mem_base,mach64_ram_size); unmap_phys_mem(mach64_mmio_base,0x4000); }