⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atimode.c

📁 x.org上有关ati系列显卡最新驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
                        pATI->LCDHorizontal, HORZ_STRETCH_BLEND);        } while (0);        if (!pATI->OptionPanelDisplay || (VDisplay >= pATI->LCDVertical))        {            pATIHW->vert_stretching = 0;        }        else        {            pATIHW->vert_stretching = (VERT_STRETCH_USE0 | VERT_STRETCH_EN) |                SetBits((VDisplay * (MaxBits(VERT_STRETCH_RATIO0) + 1)) /                        pATI->LCDVertical, VERT_STRETCH_RATIO0);        }#ifndef AVOID_CPIO        /* Copy non-shadow CRTC register values to the shadow set */        for (Index = 0;  Index < NumberOf(pATIHW->shadow_vga);  Index++)            pATIHW->shadow_vga[Index] = pATIHW->crt[Index];#endif /* AVOID_CPIO */        pATIHW->shadow_h_total_disp = pATIHW->crtc_h_total_disp;        pATIHW->shadow_h_sync_strt_wid = pATIHW->crtc_h_sync_strt_wid;        pATIHW->shadow_v_total_disp = pATIHW->crtc_v_total_disp;        pATIHW->shadow_v_sync_strt_wid = pATIHW->crtc_v_sync_strt_wid;    }    /* Fill in clock data */    if (!ATIClockCalculate(iScreen, pATI, pATIHW, pMode))        return FALSE;    /* Setup ECP clock divider */    if (pATI->Chip >= ATI_CHIP_264VT)    {        if (pATI->Chip <= ATI_CHIP_264VT3)            MaxScalerClock = 80000;        else if (pATI->Chip <= ATI_CHIP_264GT2C)            MaxScalerClock = 100000;        else if (pATI->Chip == ATI_CHIP_264GTPRO)            MaxScalerClock = 125000;        else if (pATI->Chip <= ATI_CHIP_MOBILITY)            MaxScalerClock = 135000;        else            MaxScalerClock = 80000;     /* Conservative */        pATIHW->pll_vclk_cntl &= ~PLL_ECP_DIV;#ifdef TV_OUT	if (!pATI->OptionTvOut) {#endif /* TV_OUT */	   /* XXX Don't do this for TVOut! */	   ECPClock = pMode->SynthClock;	   for (Index = 0;  (ECPClock > MaxScalerClock) && (Index < 2);  Index++)	      ECPClock >>= 1;	   pATIHW->pll_vclk_cntl |= SetBits(Index, PLL_ECP_DIV);#ifdef TV_OUT	}#endif /* TV_OUT */    }    else if (pATI->DAC == ATI_DAC_IBMRGB514)    {        ATIRGB514Calculate(pATI, pATIHW, pMode);    }    return TRUE;}#ifdef TV_OUTstatic voidATISetVBEMode(    ScrnInfoPtr pScreenInfo,    ATIPtr      pATI,    ATIHWPtr    pATIHW){    xf86LoaderRefSymLists(vbeSymbols, NULL);    if (pATIHW->crtc == ATI_CRTC_MACH64) {	int vbemode, modekey;	/* Find a suitable VESA VBE mode, if one exists */	modekey = (pScreenInfo->depth << 16) | 	    (pScreenInfo->currentMode->HDisplay);	switch (modekey) {	case (15<<16)|(640):	    vbemode = 0x110;	    break;	case (16<<16)|(640):	    vbemode = 0x111;	    break;#if 0	case (24<<16)|(640):	    vbemode = 0x112;	    break;#endif	case (15<<16)|(800):	    vbemode = 0x113;	    break;	case (16<<16)|(800):	    vbemode = 0x114;	    break;#if 0	case (24<<16)|(800):	    vbemode = 0x115;	    break;#endif	case (15<<16)|(1024):	    vbemode = 0x116;	    break;	case (16<<16)|(1024):	    vbemode = 0x117;	    break;#if 0	case (24<<16)|(1024):	    vbemode = 0x118;	    break;#endif	default:	    xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 		       "Mode not supported for TV-Out: depth: %d HDisplay: %d\n", 		       modekey>>16, modekey & 0xffff);	    return;	}	if (pATI->pVBE) {            /* Preserve video memory contents */            vbemode |= (1<<15);	    if (VBESetVBEMode(pATI->pVBE, vbemode, NULL)) {		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, 			   "VBESetMode: 0x%X (width: %d, pitch: %d, depth: %d)\n",			   vbemode, 			   pScreenInfo->currentMode->HDisplay,     			   pScreenInfo->displayWidth,			   pScreenInfo->depth);		outr(CRTC_OFF_PITCH,		     SetBits(pScreenInfo->displayWidth>>3, CRTC_PITCH));	    } else {		xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBESetMode failed.\n");	    }	} else {	    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBE module not loaded.\n");	}    } else {	/* restore text mode with VBESetMode */	if (pATI->pVBE) {	    if (VBESetVBEMode(pATI->pVBE, pATI->vbemode, NULL)) {		xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Restoring VESA mode: 0x%x\n", 			   pATI->vbemode);	    } else {	        xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBESetMode failed.\n");	    }	} else {	    xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBE module not loaded.\n");	}    }    if (xf86ServerIsExiting()) {	if (pATI->pVBE) vbeFree(pATI->pVBE);	if (pATI->pInt10) xf86FreeInt10(pATI->pInt10);    }}#endif /* TV_OUT *//* * ATIModeSet -- * * This function sets a video mode.  It writes out all video state data that * has been previously calculated or saved. */voidATIModeSet(    ScrnInfoPtr pScreenInfo,    ATIPtr      pATI,    ATIHWPtr    pATIHW){#ifndef AVOID_CPIO    int Index;    /* Get back to bank 0 */    (*pATIHW->SetBank)(pATI, 0);#endif /* AVOID_CPIO */    if (pATI->Chip >= ATI_CHIP_88800GXC)    {        /* Stop CRTC */        outr(CRTC_GEN_CNTL,            pATIHW->crtc_gen_cntl & ~(CRTC_EXT_DISP_EN | CRTC_EN));        if (pATI->Chip >= ATI_CHIP_264CT)        {            ATIMach64PutPLLReg(PLL_VCLK_CNTL, pATIHW->pll_vclk_cntl);            ATIMach64PutPLLReg(PLL_VCLK_POST_DIV, pATIHW->pll_vclk_post_div);            ATIMach64PutPLLReg(PLL_VCLK0_FB_DIV, pATIHW->pll_vclk0_fb_div);            ATIMach64PutPLLReg(PLL_VCLK1_FB_DIV, pATIHW->pll_vclk1_fb_div);            ATIMach64PutPLLReg(PLL_VCLK2_FB_DIV, pATIHW->pll_vclk2_fb_div);            ATIMach64PutPLLReg(PLL_VCLK3_FB_DIV, pATIHW->pll_vclk3_fb_div);            ATIMach64PutPLLReg(PLL_XCLK_CNTL, pATIHW->pll_xclk_cntl);            if (pATI->Chip >= ATI_CHIP_264LT)                ATIMach64PutPLLReg(PLL_EXT_VPLL_CNTL,                    pATIHW->pll_ext_vpll_cntl);            ATIMach64PutPLLReg(PLL_VCLK_CNTL,                pATIHW->pll_vclk_cntl & ~PLL_VCLK_RESET);            /* Load LCD registers */            if (pATI->LCDPanelID >= 0)            {                if (pATI->Chip == ATI_CHIP_264LT)                {                    /* Update non-shadow registers first */                    outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl & ~SHADOW_RW_EN);                    /* Temporarily disable stretching */                    outr(HORZ_STRETCHING, pATIHW->horz_stretching &                        ~(HORZ_STRETCH_MODE | HORZ_STRETCH_EN));                    outr(VERT_STRETCHING, pATIHW->vert_stretching &                        ~(VERT_STRETCH_RATIO1 | VERT_STRETCH_RATIO2 |                          VERT_STRETCH_USE0 | VERT_STRETCH_EN));                }                else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||                            (pATI->Chip == ATI_CHIP_264XL) ||                            (pATI->Chip == ATI_CHIP_MOBILITY)) */                {                    /* Update non-shadow registers first */                    ATIMach64PutLCDReg(LCD_CONFIG_PANEL, pATIHW->config_panel);                    ATIMach64PutLCDReg(LCD_GEN_CNTL, pATIHW->lcd_gen_ctrl &                        ~(CRTC_RW_SELECT | SHADOW_RW_EN));                    /* Temporarily disable stretching */                    ATIMach64PutLCDReg(LCD_HORZ_STRETCHING,                        pATIHW->horz_stretching &                        ~(HORZ_STRETCH_MODE | HORZ_STRETCH_EN));                    ATIMach64PutLCDReg(LCD_VERT_STRETCHING,                        pATIHW->vert_stretching &                        ~(VERT_STRETCH_RATIO1 | VERT_STRETCH_RATIO2 |                          VERT_STRETCH_USE0 | VERT_STRETCH_EN));                }            }        }    }    switch (pATIHW->crtc)    {#ifndef AVOID_CPIO        case ATI_CRTC_VGA:            /* Start sequencer reset */            PutReg(SEQX, 0x00U, 0x00U);            /* Set pixel clock */            if ((pATIHW->FeedbackDivider > 0) &&                (pATI->ProgrammableClock > ATI_CLOCK_FIXED))                ATIClockSet(pATI, pATIHW);            /* Set up RAMDAC */            if (pATI->DAC == ATI_DAC_IBMRGB514)                ATIRGB514Set(pATI, pATIHW);            /* Load VGA Wonder */            if (pATI->CPIO_VGAWonder)                ATIVGAWonderSet(pATI, pATIHW);            /* Load VGA device */            ATIVGASet(pATI, pATIHW);            /* Load Mach64 registers */            if (pATI->Chip >= ATI_CHIP_88800GXC)            {                /* Load MMIO registers */                if (pATI->Block0Base)                    ATIMach64Set(pATI, pATIHW);                outr(CRTC_GEN_CNTL, pATIHW->crtc_gen_cntl);                outr(CUR_CLR0, pATIHW->cur_clr0);                outr(CUR_CLR1, pATIHW->cur_clr1);                outr(CUR_OFFSET, pATIHW->cur_offset);                outr(CUR_HORZ_VERT_POSN, pATIHW->cur_horz_vert_posn);                outr(CUR_HORZ_VERT_OFF, pATIHW->cur_horz_vert_off);                outr(BUS_CNTL, pATIHW->bus_cntl);                outr(MEM_VGA_WP_SEL, pATIHW->mem_vga_wp_sel);                outr(MEM_VGA_RP_SEL, pATIHW->mem_vga_rp_sel);                outr(DAC_CNTL, pATIHW->dac_cntl);                outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);                outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl);                outr(GEN_TEST_CNTL, pATIHW->gen_test_cntl | GEN_GUI_EN);                outr(CONFIG_CNTL, pATIHW->config_cntl);                if (pATI->Chip >= ATI_CHIP_264CT)                {                    outr(CRTC_H_TOTAL_DISP, pATIHW->crtc_h_total_disp);                    outr(CRTC_H_SYNC_STRT_WID, pATIHW->crtc_h_sync_strt_wid);                    outr(CRTC_V_TOTAL_DISP, pATIHW->crtc_v_total_disp);                    outr(CRTC_V_SYNC_STRT_WID, pATIHW->crtc_v_sync_strt_wid);                    outr(CRTC_OFF_PITCH, pATIHW->crtc_off_pitch);                    if (pATI->Chip >= ATI_CHIP_264VTB)                    {                        outr(MEM_CNTL, pATIHW->mem_cntl);                        outr(MPP_CONFIG, pATIHW->mpp_config);                        outr(MPP_STROBE_SEQ, pATIHW->mpp_strobe_seq);                        outr(TVO_CNTL, pATIHW->tvo_cntl);                    }                }            }            break;#endif /* AVOID_CPIO */        case ATI_CRTC_MACH64:            /* Load Mach64 CRTC registers */            ATIMach64Set(pATI, pATIHW);#ifndef AVOID_CPIO            if (pATI->UseSmallApertures)            {                /* Oddly enough, these need to be set also, maybe others */                PutReg(SEQX, 0x02U, pATIHW->seq[2]);                PutReg(SEQX, 0x04U, pATIHW->seq[4]);                PutReg(GRAX, 0x06U, pATIHW->gra[6]);                if (pATI->CPIO_VGAWonder)                    ATIModifyExtReg(pATI, 0xB6U, -1, 0x00U, pATIHW->b6);            }#endif /* AVOID_CPIO */            break;        default:            break;    }    if (pATI->LCDPanelID >= 0)    {        /* Switch to shadow registers */        if (pATI->Chip == ATI_CHIP_264LT)            outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl | SHADOW_RW_EN);        else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||                    (pATI->Chip == ATI_CHIP_264XL) ||                    (pATI->Chip == ATI_CHIP_MOBILITY)) */            ATIMach64PutLCDReg(LCD_GEN_CNTL,                (pATIHW->lcd_gen_ctrl & ~CRTC_RW_SELECT) | SHADOW_RW_EN);        /* Restore shadow registers */        switch (pATIHW->crtc)        {#ifndef AVOID_CPIO            case ATI_CRTC_VGA:                for (Index = 0;                     Index < NumberOf(pATIHW->shadow_vga);                     Index++)                    PutReg(CRTX(pATI->CPIO_VGABase), Index,                        pATIHW->shadow_vga[Index]);                /* Fall through */#endif /* AVOID_CPIO */            case ATI_CRTC_MACH64:                outr(CRTC_H_TOTAL_DISP, pATIHW->shadow_h_total_disp);                outr(CRTC_H_SYNC_STRT_WID, pATIHW->shadow_h_sync_strt_wid);                outr(CRTC_V_TOTAL_DISP, pATIHW->shadow_v_total_disp);                outr(CRTC_V_SYNC_STRT_WID, pATIHW->shadow_v_sync_strt_wid);                break;            default:                break;        }        /* Restore CRTC selection & shadow state and enable stretching */        if (pATI->Chip == ATI_CHIP_264LT)        {            outr(LCD_GEN_CTRL, pATIHW->lcd_gen_ctrl);            outr(HORZ_STRETCHING, pATIHW->horz_stretching);            outr(VERT_STRETCHING, pATIHW->vert_stretching);        }        else /* if ((pATI->Chip == ATI_CHIP_264LTPRO) ||                    (pATI->Chip == ATI_CHIP_264XL) ||                    (pATI->Chip == ATI_CHIP_MOBILITY)) */        {            ATIMach64PutLCDReg(LCD_GEN_CNTL, pATIHW->lcd_gen_ctrl);            ATIMach64PutLCDReg(LCD_HORZ_STRETCHING, pATIHW->horz_stretching);            ATIMach64PutLCDReg(LCD_VERT_STRETCHING, pATIHW->vert_stretching);            ATIMach64PutLCDReg(LCD_EXT_VERT_STRETCH, pATIHW->ext_vert_stretch);            outr(LCD_INDEX, pATIHW->lcd_index);        }    }    /*     * Set DSP registers.  Note that, for some reason, sequencer resets clear     * the DSP_CONFIG register on early integrated controllers.     */    if (pATI->Chip >= ATI_CHIP_264VTB)        ATIDSPSet(pATI, pATIHW);    /* Load RAMDAC */    ATIDACSet(pATI, pATIHW);    /* Reset hardware cursor caching */    pATI->CursorXOffset = pATI->CursorYOffset = (CARD16)(-1);#ifdef TV_OUT    /* Set VBE mode for TV-Out */    if (pATI->OptionTvOut /* && pATI->tvActive */)	ATISetVBEMode(pScreenInfo, pATI, pATIHW);#endif /* TV_OUT */#ifndef AVOID_CPIO    /* Restore video memory */    ATISwap(pScreenInfo->scrnIndex, pATI, pATIHW, TRUE);    if (pATI->VGAAdapter != ATI_ADAPTER_NONE)        ATIVGASaveScreen(pATI, SCREEN_SAVER_OFF);       /* Turn on screen */#endif /* AVOID_CPIO */    if ((xf86GetVerbosity() > 3) && (pATIHW == &pATI->NewHW))    {        xf86ErrorFVerb(4, "\n After setting mode \"%s\":\n\n",            pScreenInfo->currentMode->name);        ATIPrintMode(pScreenInfo->currentMode);        ATIPrintRegisters(pATI);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -