亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? atidsp.c

?? x.org上有關ati系列顯卡最新驅動
?? C
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atidsp.c,v 1.21 2003/09/24 02:43:18 dawes Exp $ *//* * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting documentation, and * that the name of Marc Aurele La France not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission.  Marc Aurele La France makes no representations * about the suitability of this software for any purpose.  It is provided * "as-is" without express or implied warranty. * * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.  IN NO * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "ati.h"#include "atichip.h"#include "aticrtc.h"#include "atidsp.h"#include "atimach64io.h"#include "atividmem.h"/* * ATIDSPPreInit -- * * This function initialises global variables used to set DSP registers on a * VT-B or later. */BoolATIDSPPreInit(    int    iScreen,    ATIPtr pATI){    CARD32 IOValue, dsp_config, dsp_on_off, vga_dsp_config, vga_dsp_on_off;    int trp;    /*     * VT-B's and later have additional post-dividers that are not powers of     * two.     */    pATI->ClockDescriptor.NumD = 8;    /* Retrieve XCLK settings */    IOValue = ATIMach64GetPLLReg(PLL_XCLK_CNTL);    pATI->XCLKPostDivider = GetBits(IOValue, PLL_XCLK_SRC_SEL);    pATI->XCLKReferenceDivider = 1;    switch (pATI->XCLKPostDivider)    {        case 0:  case 1:  case 2:  case 3:            break;        case 4:            pATI->XCLKReferenceDivider = 3;            pATI->XCLKPostDivider = 0;            break;        default:            xf86DrvMsg(iScreen, X_ERROR,                "Unsupported XCLK source:  %d.\n", pATI->XCLKPostDivider);            return FALSE;    }    pATI->XCLKPostDivider -= GetBits(IOValue, PLL_MFB_TIMES_4_2B);    pATI->XCLKFeedbackDivider = ATIMach64GetPLLReg(PLL_MCLK_FB_DIV);    xf86DrvMsgVerb(iScreen, X_INFO, 2,        "Engine XCLK %.3f MHz;  Refresh rate code %ld.\n",        ATIDivide(pATI->XCLKFeedbackDivider * pATI->ReferenceNumerator,                  pATI->XCLKReferenceDivider * pATI->ClockDescriptor.MaxM *                  pATI->ReferenceDenominator, 1 - pATI->XCLKPostDivider, 0) /        (double)1000.0,        GetBits(pATI->LockData.mem_cntl, CTL_MEM_REFRESH_RATE_B));    /* Compute maximum RAS delay and friends */    trp = GetBits(pATI->LockData.mem_cntl, CTL_MEM_TRP);    pATI->XCLKPageFaultDelay = GetBits(pATI->LockData.mem_cntl, CTL_MEM_TRCD) +        GetBits(pATI->LockData.mem_cntl, CTL_MEM_TCRD) + trp + 2;    pATI->XCLKMaxRASDelay = GetBits(pATI->LockData.mem_cntl, CTL_MEM_TRAS) +        trp + 2;    pATI->DisplayFIFODepth = 32;    if (pATI->Chip < ATI_CHIP_264VT4)    {        pATI->XCLKPageFaultDelay += 2;        pATI->XCLKMaxRASDelay += 3;        pATI->DisplayFIFODepth = 24;    }    switch (pATI->MemoryType)    {        case MEM_264_DRAM:            if (pATI->VideoRAM <= 1024)            {                pATI->DisplayLoopLatency = 10;            }            else            {                pATI->DisplayLoopLatency = 8;                pATI->XCLKPageFaultDelay += 2;            }            break;        case MEM_264_EDO:        case MEM_264_PSEUDO_EDO:            if (pATI->VideoRAM <= 1024)            {                pATI->DisplayLoopLatency = 9;            }            else            {                pATI->DisplayLoopLatency = 8;                pATI->XCLKPageFaultDelay++;            }            break;        case MEM_264_SDRAM:            if (pATI->VideoRAM <= 1024)            {                pATI->DisplayLoopLatency = 11;            }            else            {                pATI->DisplayLoopLatency = 10;                pATI->XCLKPageFaultDelay++;            }            break;        case MEM_264_SGRAM:            pATI->DisplayLoopLatency = 8;            pATI->XCLKPageFaultDelay += 3;            break;        default:                /* Set maximums */            pATI->DisplayLoopLatency = 11;            pATI->XCLKPageFaultDelay += 3;            break;    }    if (pATI->XCLKMaxRASDelay <= pATI->XCLKPageFaultDelay)        pATI->XCLKMaxRASDelay = pATI->XCLKPageFaultDelay + 1;    /* Allow BIOS to override */    dsp_config = inr(DSP_CONFIG);    dsp_on_off = inr(DSP_ON_OFF);    vga_dsp_config = inr(VGA_DSP_CONFIG);    vga_dsp_on_off = inr(VGA_DSP_ON_OFF);    if (dsp_config)        pATI->DisplayLoopLatency = GetBits(dsp_config, DSP_LOOP_LATENCY);    if ((!dsp_on_off && (pATI->Chip < ATI_CHIP_264GTPRO)) ||        ((dsp_on_off == vga_dsp_on_off) &&         (!dsp_config || !((dsp_config ^ vga_dsp_config) & DSP_XCLKS_PER_QW))))    {        if (ATIDivide(GetBits(vga_dsp_on_off, VGA_DSP_OFF),                      GetBits(vga_dsp_config, VGA_DSP_XCLKS_PER_QW), 5, 1) > 24)            pATI->DisplayFIFODepth = 32;        else            pATI->DisplayFIFODepth = 24;    }    return TRUE;}/* * ATIDSPSave -- * * This function is called to remember DSP register values on VT-B and later * controllers. */voidATIDSPSave(    ATIPtr   pATI,    ATIHWPtr pATIHW){    pATIHW->dsp_on_off = inr(DSP_ON_OFF);    pATIHW->dsp_config = inr(DSP_CONFIG);}/* * ATIDSPCalculate -- * * This function sets up DSP register values for a VTB or later.  Note that * this would be slightly different if VCLK 0 or 1 were used for the mode * instead.  In that case, this function would set VGA_DSP_CONFIG and * VGA_DSP_ON_OFF, would have to zero out DSP_CONFIG and DSP_ON_OFF, and would * have to consider that VGA_DSP_CONFIG is partitioned slightly differently * than DSP_CONFIG. */voidATIDSPCalculate(    ATIPtr         pATI,    ATIHWPtr       pATIHW,    DisplayModePtr pMode){    int Multiplier, Divider;    int RASMultiplier = pATI->XCLKMaxRASDelay, RASDivider = 1;    int dsp_precision, dsp_on, dsp_off, dsp_xclks;    int tmp, vshift, xshift;#   define Maximum_DSP_PRECISION ((int)MaxBits(DSP_PRECISION))    /* Compute a memory-to-screen bandwidth ratio */    Multiplier = pATI->XCLKFeedbackDivider *        pATI->ClockDescriptor.PostDividers[pATIHW->PostDivider];    Divider = pATIHW->FeedbackDivider * pATI->XCLKReferenceDivider;#ifndef AVOID_CPIO    if (pATI->depth >= 8)#endif /* AVOID_CPIO */    {        Divider *= pATI->bitsPerPixel / 4;    }    /* Start by assuming a display FIFO width of 64 bits */    vshift = (6 - 2) - pATI->XCLKPostDivider;#ifndef AVOID_CPIO    if (pATIHW->crtc == ATI_CRTC_VGA)        vshift--;               /* Nope, it's 32 bits wide */#endif /* AVOID_CPIO */    if (pATI->OptionPanelDisplay && (pATI->LCDPanelID >= 0))    {        /* Compensate for horizontal stretching */        Multiplier *= pATI->LCDHorizontal;        Divider *= pMode->HDisplay & ~7;        RASMultiplier *= pATI->LCDHorizontal;        RASDivider *= pMode->HDisplay & ~7;    }    /* Determine dsp_precision first */    tmp = ATIDivide(Multiplier * pATI->DisplayFIFODepth, Divider, vshift, -1);    for (dsp_precision = -5;  tmp;  dsp_precision++)        tmp >>= 1;    if (dsp_precision < 0)        dsp_precision = 0;    else if (dsp_precision > Maximum_DSP_PRECISION)        dsp_precision = Maximum_DSP_PRECISION;    xshift = 6 - dsp_precision;    vshift += xshift;    /* Move on to dsp_off */    dsp_off = ATIDivide(Multiplier * (pATI->DisplayFIFODepth - 1), Divider,        vshift, -1) - ATIDivide(1, 1, vshift - xshift, 1);    /* Next is dsp_on */#ifndef AVOID_CPIO    if ((pATIHW->crtc == ATI_CRTC_VGA) /* && (dsp_precision < 3) */)    {        /*         * TODO:  I don't yet know why something like this appears necessary.         *        But I don't have time to explore this right now.         */        dsp_on = ATIDivide(Multiplier * 5, Divider, vshift + 2, 1);    }    else#endif /* AVOID_CPIO */    {        dsp_on = ATIDivide(Multiplier, Divider, vshift, 1);        tmp = ATIDivide(RASMultiplier, RASDivider, xshift, 1);        if (dsp_on < tmp)            dsp_on = tmp;        dsp_on += (tmp * 2) +            ATIDivide(pATI->XCLKPageFaultDelay, 1, xshift, 1);    }    /* Calculate rounding factor and apply it to dsp_on */    tmp = ((1 << (Maximum_DSP_PRECISION - dsp_precision)) - 1) >> 1;    dsp_on = ((dsp_on + tmp) / (tmp + 1)) * (tmp + 1);    if (dsp_on >= ((dsp_off / (tmp + 1)) * (tmp + 1)))    {        dsp_on = dsp_off - ATIDivide(Multiplier, Divider, vshift, -1);        dsp_on = (dsp_on / (tmp + 1)) * (tmp + 1);    }    /* Last but not least:  dsp_xclks */    dsp_xclks = ATIDivide(Multiplier, Divider, vshift + 5, 1);    /* Build DSP register contents */    pATIHW->dsp_on_off = SetBits(dsp_on, DSP_ON) |        SetBits(dsp_off, DSP_OFF);    pATIHW->dsp_config = SetBits(dsp_precision, DSP_PRECISION) |        SetBits(dsp_xclks, DSP_XCLKS_PER_QW) |        SetBits(pATI->DisplayLoopLatency, DSP_LOOP_LATENCY);}/* * ATIDSPSet -- * * This function is called to set DSP registers on VT-B and later controllers. */voidATIDSPSet(    ATIPtr   pATI,    ATIHWPtr pATIHW){    outr(DSP_ON_OFF, pATIHW->dsp_on_off);    outr(DSP_CONFIG, pATIHW->dsp_config);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人久久久精品乱码一区二区三区| 91麻豆.com| 色狠狠一区二区| 精品国产亚洲在线| 亚洲人吸女人奶水| 精品一区二区三区的国产在线播放| 91蝌蚪porny九色| 久久久99精品久久| 日本美女视频一区二区| 91福利资源站| 17c精品麻豆一区二区免费| 国产一区欧美二区| 日韩欧美123| 日韩国产精品大片| 欧美日韩中文国产| 亚洲黄色尤物视频| 99久久99久久精品国产片果冻| 日韩精品在线网站| 青青草原综合久久大伊人精品| 色婷婷精品大在线视频| 国产精品日产欧美久久久久| 国产成人综合在线观看| 久久久美女艺术照精彩视频福利播放| 亚洲mv在线观看| 欧美无砖专区一中文字| 亚洲自拍偷拍欧美| 91欧美激情一区二区三区成人| 国产日韩一级二级三级| 经典一区二区三区| 精品乱人伦一区二区三区| 日韩av在线播放中文字幕| 8v天堂国产在线一区二区| 亚洲成人激情综合网| 精品视频全国免费看| 首页欧美精品中文字幕| 在线播放欧美女士性生活| 午夜精品久久久久| 日韩一区二区三区在线视频| 青草国产精品久久久久久| 欧美一区日本一区韩国一区| 日本欧美大码aⅴ在线播放| 日韩精品中文字幕一区二区三区| 激情成人综合网| 国产欧美日韩中文久久| 91小视频免费观看| 亚洲国产成人av网| 欧美一区二区三区公司| 日韩av不卡一区二区| 国产福利一区二区| 亚洲色图在线播放| 欧美色图免费看| 亚洲一二三专区| 欧美日韩视频在线观看一区二区三区| 亚洲中国最大av网站| 欧美色国产精品| 日韩高清在线不卡| 日韩精品一区二区在线| 国产一区二区精品久久99| 久久久久久电影| 成人免费看视频| 亚洲成人激情综合网| 欧美一区二区三区在线看| 久久精品国产第一区二区三区| 精品国产免费视频| 国产剧情在线观看一区二区| 日本一区二区免费在线| 99re视频精品| 亚洲地区一二三色| 欧美成人福利视频| 国产成人亚洲综合a∨婷婷| 国产精品动漫网站| 欧美精三区欧美精三区| 久久精品久久99精品久久| 国产日韩综合av| 日本福利一区二区| 久久精品国产99| 国产精品福利av| 欧美日韩国产另类一区| 国内欧美视频一区二区| 亚洲图片激情小说| 91精品久久久久久蜜臀| 国产成人免费9x9x人网站视频| 亚洲青青青在线视频| 欧美在线影院一区二区| 国产不卡视频在线观看| 洋洋成人永久网站入口| 久久先锋资源网| 91捆绑美女网站| 韩国女主播一区二区三区| 亚洲欧美福利一区二区| 日韩欧美一卡二卡| 日本韩国精品在线| 国产一区欧美一区| 亚洲一区在线电影| 欧美一区二区三区色| 欧美日韩一级视频| 成人av网址在线| 精品写真视频在线观看| 亚洲一区av在线| 日本一区二区免费在线| 欧美日韩精品一区二区三区四区| 狠狠v欧美v日韩v亚洲ⅴ| 一区二区三区中文字幕在线观看| 26uuu精品一区二区三区四区在线| 色哟哟亚洲精品| 成人网男人的天堂| 久久99日本精品| √…a在线天堂一区| 国产精品毛片a∨一区二区三区| 欧美一区二区精美| 在线观看国产91| 成人h动漫精品一区二区| 韩国精品主播一区二区在线观看| 午夜久久久久久| 亚洲影视在线播放| 国产欧美综合色| 久久亚洲精品小早川怜子| 欧美一级免费观看| 91麻豆精品国产自产在线观看一区 | 精品乱人伦小说| 欧美区在线观看| 欧美精品丝袜久久久中文字幕| 一本久道久久综合中文字幕 | 色呦呦一区二区三区| 成人精品视频一区二区三区尤物| 亚洲国产中文字幕在线视频综合| 亚洲色图欧美偷拍| 亚洲美女视频在线| 久久综合九色欧美综合狠狠| 欧美一级欧美三级| 日韩欧美第一区| 日韩精品一区二区三区视频在线观看 | 欧美放荡的少妇| 欧美日韩国产首页| 欧美无砖专区一中文字| 欧美男男青年gay1069videost| 在线精品国精品国产尤物884a| 欧美伊人精品成人久久综合97| 在线免费精品视频| 91传媒视频在线播放| 欧美三级韩国三级日本三斤| 欧美日韩高清一区| 欧美日韩一区二区在线观看 | 欧美另类一区二区三区| 欧美一区2区视频在线观看| 日韩一区二区免费高清| 精品国产成人在线影院| 国产视频911| 亚洲美女屁股眼交| 香蕉成人伊视频在线观看| 麻豆一区二区三区| 风间由美一区二区av101| 91麻豆免费视频| 91在线视频观看| 欧美精品v国产精品v日韩精品| 欧美一区二区三区在线观看视频| 2021久久国产精品不只是精品| 国产日韩欧美综合在线| 亚洲天堂免费在线观看视频| 亚洲综合激情网| 国内精品视频666| 色综合久久中文字幕综合网| 欧美吞精做爰啪啪高潮| 精品少妇一区二区三区| 国产精品毛片高清在线完整版| 亚洲国产一区二区三区青草影视| 日本vs亚洲vs韩国一区三区二区| 国产剧情一区在线| 欧美精品在线视频| 欧美极品另类videosde| 午夜国产精品一区| 国产精品996| 日韩欧美中文字幕公布| 亚洲欧洲精品一区二区三区| 午夜精品久久久久久不卡8050| 国产成人精品影视| 欧美精品亚洲一区二区在线播放| 国产偷国产偷精品高清尤物| 亚洲五月六月丁香激情| 国产91丝袜在线播放九色| 日韩一区二区三区四区| 亚洲精品日韩一| 国产成人综合在线观看| 在线综合亚洲欧美在线视频 | 久久亚洲欧美国产精品乐播| 亚洲第一狼人社区| 成人一级片网址| 日韩一级高清毛片| 亚洲一卡二卡三卡四卡| 成人成人成人在线视频| 欧美精品1区2区3区| 亚洲色图制服诱惑| 国产ts人妖一区二区| 欧美草草影院在线视频| 香蕉久久一区二区不卡无毒影院 | 一区二区三区欧美日韩| 成人三级在线视频| 26uuu亚洲综合色| 美国十次了思思久久精品导航| 波多野结衣在线一区|