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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? atiwonder.c

?? x.org上有關(guān)ati系列顯卡最新驅(qū)動
?? C
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atiwonder.c,v 1.14 2003/01/01 19:16:35 tsi 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/* * The ATI x8800 chips use special registers for their extended VGA features. * These registers are accessible through an index I/O port and a data I/O * port.  BIOS initialisation stores the index port number in the Graphics * register bank (0x03CE), indices 0x50 and 0x51.  Unfortunately, for all but * the 18800-x series of adapters, these registers are write-only (a.k.a. black * holes).  On all but 88800's, the index port number can be found in the short * integer at offset 0x10 in the BIOS.  For 88800's, this driver will use * 0x01CE or 0x03CE as the index port number, depending on the I/O port * decoding used.  The data port number is one more than the index port number * (i.e. 0x01CF).  These ports differ slightly in their I/O behaviour from the * normal VGA ones: * *    write:  outw(0x01CE, (data << 8) | index);        (16-bit, not used) *            outb(0x01CE, index);  outb(0x01CF, data); (8-bit) *    read:   outb(0x01CE, index);  data = inb(0x01CF); * * Two consecutive byte-writes to the data port will not work.  Furthermore an * index written to 0x01CE is usable only once.  Note also that the setting of * ATI extended registers (especially those with clock selection bits) should * be bracketed by a sequencer reset. * * The number of these extended VGA registers varies by chipset.  The 18800 * series have 16, the 28800 series have 32, while 68800's and 88800's have 64. * The last 16 on each have almost identical definitions.  Thus, the BIOS sets * up an indexing scheme whereby the last 16 extended VGA registers are * accessed at indices 0xB0 through 0xBF on all chipsets. */#include "ati.h"#include "atichip.h"#include "atiwonder.h"#include "atiwonderio.h"#ifndef AVOID_CPIO/* * ATIVGAWonderPreInit -- * * This function is called to initialise the VGA Wonder part of an ATIHWRec * that is common to all modes generated by the driver. */voidATIVGAWonderPreInit(    ATIPtr      pATI,    ATIHWPtr    pATIHW){    pATIHW->b3 = ATIGetExtReg(0xB3U) & 0x20U;    if (pATI->depth <= 4)        pATIHW->b6 = 0x40U;    else        pATIHW->b6 = 0x04U;    if (pATI->Chip <= ATI_CHIP_18800)        pATIHW->ba = 0x08U;    else if (pATI->Chip >= ATI_CHIP_28800_2)    {        if (pATI->VideoRAM > 256)            pATIHW->b6 |= 0x01U;        pATIHW->bf = ATIGetExtReg(0xBFU) & 0x5FU;        pATIHW->a3 = ATIGetExtReg(0xA3U) & 0x67U;        pATIHW->ab = ATIGetExtReg(0xABU) & 0xE7U;        pATIHW->ae = ATIGetExtReg(0xAEU) & 0xE0U;    }}/* * ATIVGAWonderSave -- * * This function is called to save the VGA Wonder portion of the current video * state. */voidATIVGAWonderSave(    ATIPtr      pATI,    ATIHWPtr    pATIHW){    pATIHW->b0 = ATIGetExtReg(0xB0U);    pATIHW->b1 = ATIGetExtReg(0xB1U);    pATIHW->b2 = ATIGetExtReg(0xB2U);    pATIHW->b3 = ATIGetExtReg(0xB3U);    pATIHW->b5 = ATIGetExtReg(0xB5U);    pATIHW->b6 = ATIGetExtReg(0xB6U);    pATIHW->b8 = ATIGetExtReg(0xB8U);    pATIHW->b9 = ATIGetExtReg(0xB9U);    pATIHW->ba = ATIGetExtReg(0xBAU);    pATIHW->bd = ATIGetExtReg(0xBDU);    if (pATI->Chip > ATI_CHIP_18800)    {        pATIHW->be = ATIGetExtReg(0xBEU);        if (pATI->Chip >= ATI_CHIP_28800_2)        {            pATIHW->bf = ATIGetExtReg(0xBFU);            pATIHW->a3 = ATIGetExtReg(0xA3U);            pATIHW->a6 = ATIGetExtReg(0xA6U);            pATIHW->a7 = ATIGetExtReg(0xA7U);            pATIHW->ab = ATIGetExtReg(0xABU);            pATIHW->ac = ATIGetExtReg(0xACU);            pATIHW->ad = ATIGetExtReg(0xADU);            pATIHW->ae = ATIGetExtReg(0xAEU);        }    }}/* * ATIVGAWonderCalculate -- * * This function fills in the VGA Wonder portion of an ATIHWRec structure * occurrence. */voidATIVGAWonderCalculate(    ATIPtr         pATI,    ATIHWPtr       pATIHW,    DisplayModePtr pMode){    /* Set up the default horizontal display enable skew */    if ((pATI->Chip >= ATI_CHIP_28800_2) && (pATI->Chip <= ATI_CHIP_28800_6) &&        !(pMode->Flags & V_HSKEW))    {        /*         * Modes using the higher clock frequencies need a non-zero Display         * Enable Skew.  The following number has been empirically determined         * to be somewhere between 4.2 and 4.7 MHz.         */#       define DisplayEnableSkewThreshold 4500        /* Set a reasonable default Display Enable Skew */        pMode->HSkew = pMode->CrtcHSkew =            ATIDivide(pMode->SynthClock, DisplayEnableSkewThreshold, 0, 0);    }    pMode->Flags |= V_HSKEW;    /*     * Fill in mode-specific VGA Wonder data.     */    pATIHW->b0 = 0x00U;    if (pATI->depth >= 8)        pATIHW->b0 = 0x20U;    if (pATI->Chip >= ATI_CHIP_28800_2)    {        if (pATI->VideoRAM > 512)            pATIHW->b0 |= 0x08U;        else if (pATI->VideoRAM > 256)            pATIHW->b0 |= 0x10U;    }    else if (pATI->depth <= 4)    {        if (pATI->VideoRAM > 256)            pATIHW->b0 |= 0x08U;    }    else    {        if (pATI->VideoRAM > 256)            pATIHW->b0 |= 0x18U;        else            pATIHW->b0 |= 0x06U;    }    pATIHW->b1 = ATIGetExtReg(0xB1U) & 0x04U;    /*     * Setting the following bit causes hangs on return to text mode from     * packed modes on 18800-1's.  The hang occurs because the adapter's I/O     * response is completely disabled when the register is rewritten.  The     * adapter can then only be re-enabled with a powerdown.  The bit, when on,     * blanks out the overscan.     */    if ((pATI->Chip == ATI_CHIP_18800_1) && (pATI->depth >= 8))        pATIHW->b5 = 0x00U;    else        pATIHW->b5 = 0x01U;    pATIHW->b8 = ATIGetExtReg(0xB8U) & 0xC0U;    pATIHW->b9 = ATIGetExtReg(0xB9U) & 0x7FU;    pATIHW->bd = ATIGetExtReg(0xBDU) & 0x02U;    if (pATI->Chip <= ATI_CHIP_18800)        pATIHW->b2 = ATIGetExtReg(0xB2U) & 0xC0U;    else    {        pATIHW->b2 = 0x00U;        pATIHW->be = (ATIGetExtReg(0xBEU) & 0x30U) | 0x09U;        if (pATI->Chip >= ATI_CHIP_28800_2)        {            pATIHW->a6 = (ATIGetExtReg(0xA6U) & 0x38U) | 0x04U;            pATIHW->a7 = (ATIGetExtReg(0xA7U) & 0xBEU)        ;            pATIHW->ac = (ATIGetExtReg(0xACU) & 0x8EU)        ;        }    }    if (pMode->Flags & V_INTERLACE)    {                                   /* Enable interlace */        if (pATI->Chip <= ATI_CHIP_18800)            pATIHW->b2 |= 0x01U;        else            pATIHW->be |= 0x02U;    }#if 0   /* This is no longer needed but is left in for reference */    if (pMode->Flags & V_DBLSCAN)       /* Enable doublescan */        pATIHW->b1 |= 0x08U;#endif    if (pATI->OptionCSync || (pMode->Flags & (V_CSYNC | V_PCSYNC)))        pATIHW->bd |= 0x08U;            /* Enable composite sync */    if (pMode->Flags & V_NCSYNC)        pATIHW->bd |= 0x09U;            /* Invert composite sync */    if (pMode->HSkew > 0)    {        if (pMode->HSkew <= 3)            pATIHW->b5 |= 0x04U;        else if (pATI->Chip >= ATI_CHIP_28800_2)            switch ((pMode->HSkew + 4) >> 3)            {                case 1:         /* Use ATI override */                    pATIHW->crt[3] &= ~0x60U;                    pATIHW->b0 |= 0x01U;                    break;                case 2:         /* Use ATI override */                    pATIHW->crt[3] &= ~0x60U;                    pATIHW->a6 |= 0x01U;                    break;                case 3:                    pATIHW->crt[3] |= 0x60U;                    break;                case 4:                    pATIHW->a7 |= 0x40U;                    break;                case 5:                    pATIHW->ac |= 0x10U;                    break;                case 6:                    pATIHW->ac |= 0x20U;                    break;                default:                    break;            }    }}/* * ATIVGAWonderSet -- * * This function loads the VGA Wonder portion of a video state. */voidATIVGAWonderSet(    ATIPtr      pATI,    ATIHWPtr    pATIHW){    if (pATI->Chip <= ATI_CHIP_18800)        ATIModifyExtReg(pATI, 0xB2U, -1, 0x00U, pATIHW->b2);    else    {        ATIModifyExtReg(pATI, 0xBEU, -1, 0x00U, pATIHW->be);        if (pATI->Chip >= ATI_CHIP_28800_2)        {            ATIModifyExtReg(pATI, 0xBFU, -1, 0x00U, pATIHW->bf);            ATIModifyExtReg(pATI, 0xA3U, -1, 0x00U, pATIHW->a3);            ATIModifyExtReg(pATI, 0xA6U, -1, 0x00U, pATIHW->a6);            ATIModifyExtReg(pATI, 0xA7U, -1, 0x00U, pATIHW->a7);            ATIModifyExtReg(pATI, 0xABU, -1, 0x00U, pATIHW->ab);            ATIModifyExtReg(pATI, 0xACU, -1, 0x00U, pATIHW->ac);            ATIModifyExtReg(pATI, 0xADU, -1, 0x00U, pATIHW->ad);            ATIModifyExtReg(pATI, 0xAEU, -1, 0x00U, pATIHW->ae);        }    }    ATIModifyExtReg(pATI, 0xB0U, -1, 0x00U, pATIHW->b0);    ATIModifyExtReg(pATI, 0xB1U, -1, 0x00U, pATIHW->b1);    ATIModifyExtReg(pATI, 0xB3U, -1, 0x00U, pATIHW->b3);    ATIModifyExtReg(pATI, 0xB5U, -1, 0x00U, pATIHW->b5);    ATIModifyExtReg(pATI, 0xB6U, -1, 0x00U, pATIHW->b6);    ATIModifyExtReg(pATI, 0xB8U, -1, 0x00U, pATIHW->b8);    ATIModifyExtReg(pATI, 0xB9U, -1, 0x00U, pATIHW->b9);    ATIModifyExtReg(pATI, 0xBAU, -1, 0x00U, pATIHW->ba);    ATIModifyExtReg(pATI, 0xBDU, -1, 0x00U, pATIHW->bd);}#endif /* AVOID_CPIO */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利在线播放| av一区二区三区在线| 欧美中文字幕一二三区视频| 国产精品乱码一区二区三区软件| 成人中文字幕电影| 亚洲人成在线播放网站岛国| 91免费国产在线观看| 一区二区欧美国产| 欧美日本一区二区在线观看| 毛片av一区二区| 国产亚洲精品7777| 91视频xxxx| 日韩电影免费在线看| 欧美精品一区在线观看| 欧美无砖专区一中文字| 亚洲一区在线观看视频| 欧美一级午夜免费电影| 国产成人精品一区二区三区四区| 中文字幕亚洲在| 欧美精品丝袜中出| 国内精品伊人久久久久影院对白| 中文字幕视频一区| 91精品国产综合久久久久久久久久| 国精品**一区二区三区在线蜜桃| 国产精品第一页第二页第三页| 欧美日韩黄视频| 国产**成人网毛片九色| 亚洲国产综合人成综合网站| 亚洲综合男人的天堂| 91精品国产高清一区二区三区 | 风间由美一区二区av101| 亚洲婷婷国产精品电影人久久| 欧美精品v日韩精品v韩国精品v| 国产综合色视频| 亚洲一区二区三区在线看| 久久久久亚洲蜜桃| 在线观看国产一区二区| 国内外精品视频| 粉嫩欧美一区二区三区高清影视| 一区二区免费在线播放| 2023国产精品自拍| 欧美人妇做爰xxxⅹ性高电影| 国产福利91精品一区| 日本不卡一二三| 一区二区三区日韩欧美| 国产欧美视频在线观看| 884aa四虎影成人精品一区| 色综合久久中文字幕| 国产一区不卡精品| 偷拍一区二区三区| 一区二区三区91| 成人欧美一区二区三区小说| 久久久91精品国产一区二区精品 | 精品国产sm最大网站| 在线观看国产一区二区| av成人动漫在线观看| 国产一区二区0| 麻豆freexxxx性91精品| 爽好多水快深点欧美视频| 亚洲综合在线五月| 自拍偷在线精品自拍偷无码专区| 久久色成人在线| 精品成人一区二区| 国产亚洲一区二区三区四区| 欧美群妇大交群中文字幕| 91精品1区2区| 色香蕉久久蜜桃| 97精品久久久午夜一区二区三区| 粉嫩av一区二区三区在线播放| 久久国产精品色| 韩国欧美一区二区| 久久精品国产一区二区三| 老司机一区二区| 韩国一区二区在线观看| 狠狠色丁香久久婷婷综| 国产在线观看一区二区| 国产一区 二区| 高清shemale亚洲人妖| 欧美久久久一区| 欧美日韩五月天| 欧美精品在线观看播放| 91精品国产综合久久国产大片| 91精品国产色综合久久| 日韩久久久久久| 国产无一区二区| 国产精品国产三级国产| 日韩毛片视频在线看| 一区二区三区在线免费| 亚洲香肠在线观看| 午夜欧美2019年伦理| 麻豆精品精品国产自在97香蕉| 久久99久久99精品免视看婷婷 | 亚洲国产另类精品专区| 国产一区二区中文字幕| 国产成人精品免费在线| av在线不卡免费看| 在线观看视频91| 在线播放91灌醉迷j高跟美女| 欧美第一区第二区| 久久伊人蜜桃av一区二区| 国产精品九色蝌蚪自拍| 一区二区国产盗摄色噜噜| 日韩成人免费电影| 国产精品一卡二| 色婷婷综合久久久中文字幕| 欧美乱妇23p| 中文字幕精品—区二区四季| 亚洲图片欧美视频| 韩国三级中文字幕hd久久精品| 日韩视频免费观看高清完整版 | 91美女精品福利| 在线不卡欧美精品一区二区三区| 精品久久人人做人人爽| 亚洲情趣在线观看| 日韩精品电影在线观看| 国产+成+人+亚洲欧洲自线| 91精品91久久久中77777| 欧美精品一区二区三区视频| 亚洲欧洲av另类| 老司机免费视频一区二区三区| 成人精品视频.| 69av一区二区三区| 国产精品国产精品国产专区不蜜 | 日韩高清不卡一区| 福利视频网站一区二区三区| 欧美老肥妇做.爰bbww| 国产精品美女久久久久久| 日韩精品免费专区| 国产98色在线|日韩| 欧美一区日本一区韩国一区| 成人免费一区二区三区视频| 精品在线一区二区三区| 欧美性色欧美a在线播放| 国产欧美一区二区精品性| 青青草一区二区三区| 在线中文字幕一区| 亚洲国产精品t66y| 国模套图日韩精品一区二区| 欧美日韩综合在线| 日日夜夜精品视频免费| 99精品国产一区二区三区不卡| 日韩视频一区二区在线观看| 亚洲亚洲人成综合网络| 成人av电影在线网| 久久品道一品道久久精品| 日韩精品91亚洲二区在线观看| 99久久国产综合精品女不卡| 久久久久久久久岛国免费| 日韩vs国产vs欧美| 欧美视频中文一区二区三区在线观看 | 日韩精品一区二区三区在线观看| 亚洲乱码国产乱码精品精可以看| 高清不卡一区二区在线| 国产亚洲一区二区三区在线观看 | 亚洲国产成人午夜在线一区| 免费xxxx性欧美18vr| 欧美日韩国产一级片| 亚洲国产欧美在线| 在线免费不卡视频| 亚洲人成精品久久久久久| av一区二区三区黑人| 国产精品国产自产拍高清av | 欧美日韩免费在线视频| 亚洲色欲色欲www| 成人精品免费视频| 国产精品欧美久久久久无广告| 欧美精品久久一区二区三区| 一区二区三区波多野结衣在线观看| 91欧美激情一区二区三区成人| 中文字幕中文字幕在线一区| 99在线视频精品| 中文字幕一区二区三区不卡 | 国产精品久久久久久久浪潮网站| 国产乱理伦片在线观看夜一区| 久久在线免费观看| 精品一区二区免费在线观看| 精品久久久久久久久久久久久久久久久 | 国产成人综合亚洲91猫咪| 欧美一区三区二区| 国内成+人亚洲+欧美+综合在线| 久久久久久黄色| 波多野结衣中文一区| 亚洲精品免费播放| 欧美理论电影在线| 极品瑜伽女神91| 国产精品视频免费| 色呦呦国产精品| 日韩中文字幕麻豆| 精品国产91乱码一区二区三区 | 极品瑜伽女神91| 欧美精彩视频一区二区三区| 成人免费高清在线观看| 免费欧美高清视频| 精品av综合导航| 99久久夜色精品国产网站| 一区二区三区影院| 日韩午夜激情av| 丁香啪啪综合成人亚洲小说| 一区二区免费视频| 精品国产伦理网|