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

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

?? atiprobe.c

?? x.org上有關ati系列顯卡最新驅動
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/atiprobe.c,v 1.62tsi 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 <string.h>#include <stdio.h>#include "ati.h"#include "atiadapter.h"#include "atiadjust.h"#include "atibus.h"#include "atichip.h"#include "aticonsole.h"#include "atifillin.h"#include "atiident.h"#include "atimach64io.h"#include "atimodule.h"#include "atipreinit.h"#include "atiprobe.h"#include "atiscreen.h"#include "ativalid.h"#include "ativersion.h"#include "atividmem.h"#include "atiwonderio.h"#include "radeon_probe.h"#include "radeon_version.h"#include "r128_probe.h"#include "r128_version.h"/* * NOTES: * * - The driver private structures (ATIRec's) are allocated here, rather than *   in ATIPreInit().  This allows ATIProbe() to pass information to later *   stages. * - A minor point, perhaps, is that XF86Config Chipset names denote functional *   levels, rather than specific graphics controller chips. * - ATIProbe() does not call xf86MatchPciInstances(), because ATIProbe() *   should be able to match a mix of PCI and non-PCI devices to XF86Config *   Device sections.  Also, PCI configuration space for Mach32's is to be *   largely ignored. *//* Used as a temporary buffer */#define Identifier ((char *)(pATI->MMIOCache))/* * An internal structure definition to facilitate the matching of detected * adapters to XF86Config Device sections. */typedef struct _ATIGDev{    GDevPtr pGDev;    int     iATIPtr;    CARD8   Chipset;} ATIGDev, *ATIGDevPtr;#ifndef AVOID_CPIO/* * Definitions for I/O conflict avoidance. */#define LongPort(_Port) GetBits(_Port, PCIGETIO(SPARSE_IO_BASE))#define DetectedVGA    (1 << 0)#define Detected8514A  (1 << 1)#define DetectedMach64 (1 << 2)#define Allowed        (1 << 3)#define DoProbe        (1 << 4)typedef struct{    IOADDRESS Base;    CARD8     Size;    CARD8     Flag;} PortRec, *PortPtr;/* * ATIScanPCIBases -- * * This function loops though a device's PCI registered bases and accumulates * a list of block I/O bases in use in the system. */static voidATIScanPCIBases(    PortPtr      *PCIPorts,    int          *nPCIPort,    const CARD32 *pBase,    const int    *pSize,    const CARD8  ProbeFlag){    IOADDRESS Base;    int       i, j;    for (i = 6;  --i >= 0;  pBase++, pSize++)    {        if (*pBase & PCI_MAP_IO)        {            Base = *pBase & ~IO_BYTE_SELECT;            for (j = 0;  ;  j++)            {                if (j >= *nPCIPort)                {                    (*nPCIPort)++;                    *PCIPorts = (PortPtr)xnfrealloc(*PCIPorts,                        *nPCIPort * SizeOf(PortRec));                    (*PCIPorts)[j].Base = Base;                    (*PCIPorts)[j].Size = (CARD8)*pSize;                    (*PCIPorts)[j].Flag = ProbeFlag;                    break;                }                if (Base == (*PCIPorts)[j].Base)                    break;            }            continue;        }        /* Allow for 64-bit addresses */        if (!PCI_MAP_IS64BITMEM(*pBase))            continue;        i--;        pBase++;        pSize++;    }}/* * ATICheckSparseIOBases -- * * This function checks whether a sparse I/O base can safely be probed. */static CARD8ATICheckSparseIOBases(    pciVideoPtr     pVideo,    CARD8           *ProbeFlags,    const IOADDRESS IOBase,    const int       Count,    const Bool      Override){    CARD32 FirstPort, LastPort;    if (!pVideo || !xf86IsPrimaryPci(pVideo))    {        FirstPort = LongPort(IOBase);        LastPort  = LongPort(IOBase + Count - 1);        for (;  FirstPort <= LastPort;  FirstPort++)        {            CARD8 ProbeFlag = ProbeFlags[FirstPort];            if (ProbeFlag & DoProbe)                continue;            if (!(ProbeFlag & Allowed))                return ProbeFlag;            if (Override)                continue;            /* User might wish to override this decision */            xf86Msg(X_WARNING,                ATI_NAME ":  Sparse I/O base 0x%04lX not probed.\n", IOBase);            return Allowed;        }    }    return DoProbe;}#ifndef AVOID_NON_PCI/* * ATIClaimSparseIOBases -- * * This function updates the sparse I/O base table with information from the * hardware probes. */static voidATIClaimSparseIOBases(    CARD8           *ProbeFlags,    const IOADDRESS IOBase,    const int       Count,    const CARD8     ProbeFlag){    CARD32 FirstPort = LongPort(IOBase),           LastPort  = LongPort(IOBase + Count - 1);    for (;  FirstPort <= LastPort;  FirstPort++)        ProbeFlags[FirstPort] = ProbeFlag;}#endif /* AVOID_NON_PCI *//* * ATIVGAProbe -- * * This function looks for an IBM standard VGA, or clone, and sets * pATI->VGAAdapter if one is found. */static ATIPtrATIVGAProbe(    ATIPtr pVGA){    CARD8 IOValue1, IOValue2, IOValue3;    if (!pVGA)        pVGA = (ATIPtr)xnfcalloc(1, SizeOf(ATIRec));    /*     * VGA has one more attribute register than EGA.  See if it can be read and     * written.  Note that the CRTC registers are not used here, so there's no     * need to unlock them.     */    ATISetVGAIOBase(pVGA, inb(R_GENMO));    (void)inb(GENS1(pVGA->CPIO_VGABase));    IOValue1 = inb(ATTRX);    (void)inb(GENS1(pVGA->CPIO_VGABase));    IOValue2 = GetReg(ATTRX, 0x14U | 0x20U);    outb(ATTRX, IOValue2 ^ 0x0FU);    IOValue3 = GetReg(ATTRX, 0x14U | 0x20U);    outb(ATTRX, IOValue2);    outb(ATTRX, IOValue1);    (void)inb(GENS1(pVGA->CPIO_VGABase));    if (IOValue3 == (IOValue2 ^ 0x0FU))    {        /* VGA device detected */        if (pVGA->Chip == ATI_CHIP_NONE)            pVGA->Chip = ATI_CHIP_VGA;        if (pVGA->VGAAdapter == ATI_ADAPTER_NONE)            pVGA->VGAAdapter = ATI_ADAPTER_VGA;        if (pVGA->Adapter == ATI_ADAPTER_NONE)            pVGA->Adapter = ATI_ADAPTER_VGA;    }    else    {        pVGA->VGAAdapter = ATI_ADAPTER_NONE;    }    return pVGA;}/* * ATIVGAWonderProbe -- * * This function determines if ATI extended VGA registers can be accessed * through the I/O port specified by pATI->CPIO_VGAWonder.  If not, the * function resets pATI->CPIO_VGAWonder to zero. */static voidATIVGAWonderProbe(    pciVideoPtr pVideo,    ATIPtr      pATI,    ATIPtr      p8514,    CARD8       *ProbeFlags){    CARD8 IOValue1, IOValue2, IOValue3, IOValue4, IOValue5, IOValue6;    switch (ATICheckSparseIOBases(pVideo, ProbeFlags,        pATI->CPIO_VGAWonder, 2, TRUE))    {        case 0:            xf86Msg(X_WARNING,                ATI_NAME ":  Expected VGA Wonder capability could not be"                " detected at I/O port 0x%04lX because it would conflict with"                " a non-video PCI/AGP device.\n", pATI->CPIO_VGAWonder);            pATI->CPIO_VGAWonder = 0;            break;        case Detected8514A:            xf86Msg(X_WARNING,                ATI_NAME ":  Expected VGA Wonder capability could not be"                " detected at I/O port 0x%04lX because it would conflict with"                " a %s %s.\n", pATI->CPIO_VGAWonder,                ATIBusNames[p8514->BusType], ATIAdapterNames[p8514->Adapter]);            pATI->CPIO_VGAWonder = 0;            break;        case DetectedMach64:            xf86Msg(X_WARNING,                ATI_NAME ":  Expected VGA Wonder capability could not be"                " detected at I/O port 0x%04lX because it would conflict with"                " a Mach64.\n", pATI->CPIO_VGAWonder);            pATI->CPIO_VGAWonder = 0;            break;        case DetectedVGA:        default:                /* Must be DoProbe */            if (pVideo && !xf86IsPrimaryPci(pVideo) &&                (pATI->Chip <= ATI_CHIP_88800GXD))            {                /* Set up extended VGA register addressing */                PutReg(GRAX, 0x50U, GetByte(pATI->CPIO_VGAWonder, 0));                PutReg(GRAX, 0x51U,                    GetByte(pATI->CPIO_VGAWonder, 1) | pATI->VGAOffset);            }            /*             * Register 0xBB is used by the BIOS to keep track of various             * things (monitor type, etc.).  Except for 18800-x's, register             * 0xBC must be zero and causes the adapter to enter a test mode             * when written to with a non-zero value.             */            IOValue1 = inb(pATI->CPIO_VGAWonder);            IOValue2 = ATIGetExtReg(IOValue1);            IOValue3 = ATIGetExtReg(0xBBU);            ATIPutExtReg(0xBBU, IOValue3 ^ 0xAAU);            IOValue4 = ATIGetExtReg(0xBBU);            ATIPutExtReg(0xBBU, IOValue3 ^ 0x55U);            IOValue5 = ATIGetExtReg(0xBBU);            ATIPutExtReg(0xBBU, IOValue3);            if (pATI->Chip <= ATI_CHIP_18800_1)                IOValue6 = 0;            else                IOValue6 = ATIGetExtReg(0xBCU);            ATIPutExtReg(IOValue1, IOValue2);            if ((IOValue4 == (IOValue3 ^ 0xAAU)) &&                (IOValue5 == (IOValue3 ^ 0x55U)) &&                (IOValue6 == 0))            {                xf86MsgVerb(X_INFO, 3,                    ATI_NAME ":  VGA Wonder at I/O port 0x%04lX detected.\n",                    pATI->CPIO_VGAWonder);            }            else            {                xf86Msg(X_WARNING,                    ATI_NAME ":  Expected VGA Wonder capability at I/O port"                    " 0x%04lX was not detected.\n", pATI->CPIO_VGAWonder);                pATI->CPIO_VGAWonder = 0;            }            break;    }}/* * ATI8514Probe -- * * This function looks for an 8514/A compatible and returns an ATIRec if one is * found.  The function also determines whether or not the detected 8514/A * compatible device is actually a Mach8 or Mach32, and sets pATI->Adapter * accordingly. */static ATIPtrATI8514Probe(    pciVideoPtr pVideo){    ATIPtr pATI = NULL;    CARD16 IOValue1, IOValue2;    /*     * Save register value to be modified, just in case there is no 8514/A     * compatible accelerator.  Note that, in more ways than one,     * SUBSYS_STAT == SUBSYS_CNTL.     */    IOValue1 = inw(SUBSYS_STAT);    IOValue2 = IOValue1 & _8PLANE;    /* Reset any 8514/A compatible adapter that might be present */    outw(SUBSYS_CNTL, IOValue2 | (GPCTRL_RESET | CHPTEST_NORMAL));    outw(SUBSYS_CNTL, IOValue2 | (GPCTRL_ENAB | CHPTEST_NORMAL |        RVBLNKFLG | RPICKFLAG | RINVALIDIO | RGPIDLE));    /* Probe for an 8514/A compatible */    IOValue2 = inw(ERR_TERM);    outw(ERR_TERM, 0x5A5AU);    ProbeWaitIdleEmpty();    if (inw(ERR_TERM) == 0x5A5AU)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日嗨av一区二区三区四区| 国产日韩精品一区二区三区| 91激情五月电影| 成人午夜视频在线观看| 成人免费观看av| 99亚偷拍自图区亚洲| 91免费版在线| 欧美日韩一区三区四区| 91精品国产91久久综合桃花| 91精品国产麻豆国产自产在线 | 国产精品青草久久| 国产精品久久久久久久久搜平片| 国产精品无人区| 亚洲欧美视频在线观看| 亚洲成av人在线观看| 蜜桃精品视频在线观看| 久久精品噜噜噜成人88aⅴ| 国产乱码字幕精品高清av| aaa亚洲精品一二三区| 欧美性videosxxxxx| 欧美精品一区二区三区高清aⅴ | 欧美放荡的少妇| 亚洲精品一区二区在线观看| 国产精品第四页| 日韩电影一区二区三区| 国产成人a级片| 欧美日韩三级一区| 久久精品一区蜜桃臀影院| 亚洲综合激情小说| 国产麻豆91精品| 欧美色图激情小说| 久久综合av免费| 亚洲一区二区在线免费观看视频| 经典三级视频一区| 精品视频在线看| 亚洲国产成人一区二区三区| 午夜精品视频一区| 不卡av免费在线观看| 在线综合亚洲欧美在线视频| 最好看的中文字幕久久| 久久精品噜噜噜成人av农村| 91福利精品视频| 久久欧美一区二区| 午夜精品久久久久久久| 成人aa视频在线观看| 欧美不卡一区二区三区四区| 亚洲少妇最新在线视频| 国产一区二区福利| 欧美一区二区在线看| 一区二区三区色| 国产91精品免费| 日韩一区二区免费高清| 一个色综合网站| 成人高清在线视频| 26uuu精品一区二区在线观看| 亚洲成人免费在线观看| 99视频一区二区三区| 久久精品欧美日韩精品| 欧美aaa在线| 欧美一区二区三区四区视频| 亚洲一区二区五区| 色综合久久久久| 亚洲欧美日韩中文字幕一区二区三区| 精品写真视频在线观看| 欧美成人在线直播| 麻豆极品一区二区三区| 欧美mv日韩mv国产| 九色porny丨国产精品| 日韩一区二区三区免费观看| 石原莉奈一区二区三区在线观看| 欧美在线高清视频| 亚洲一区影音先锋| 欧美老年两性高潮| 蜜桃av一区二区| 久久欧美一区二区| 成人中文字幕电影| 亚洲靠逼com| 在线视频国内一区二区| 亚洲午夜在线电影| 这里只有精品视频在线观看| 久久精品国产免费看久久精品| 91精品国产一区二区三区香蕉| 国产精品人成在线观看免费| 国产精品久久久久久久午夜片| 成人福利视频在线| 成人动漫一区二区三区| 中文字幕一区二区三区在线不卡| 成人a区在线观看| 亚洲精品网站在线观看| 色老汉一区二区三区| 婷婷开心久久网| 欧美日韩黄色一区二区| 久久综合色之久久综合| 99精品欧美一区二区三区小说| 麻豆91在线看| 香蕉成人伊视频在线观看| 成人欧美一区二区三区白人| 久久综合色天天久久综合图片| 欧美高清性hdvideosex| 91成人免费在线| kk眼镜猥琐国模调教系列一区二区 | 久久久91精品国产一区二区三区| 日韩一二三四区| 欧美日韩的一区二区| 在线观看欧美日本| 在线一区二区观看| 色噜噜夜夜夜综合网| 91影视在线播放| 91在线云播放| 在线观看三级视频欧美| 91精品福利视频| 欧美伊人久久久久久久久影院 | 韩国欧美国产一区| 免费观看91视频大全| 老司机免费视频一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 美女mm1313爽爽久久久蜜臀| 另类专区欧美蜜桃臀第一页| 久久成人羞羞网站| 国产精品资源网| 国产91精品免费| 色中色一区二区| 欧美日韩国产小视频| 欧美一级日韩免费不卡| 欧美videossexotv100| 久久久久久电影| 国产精品久久夜| 亚洲二区在线观看| 日本不卡一区二区三区| 紧缚奴在线一区二区三区| 国产精品一区二区不卡| 91猫先生在线| 在线播放视频一区| 久久综合成人精品亚洲另类欧美| 国产精品久久久久aaaa樱花| 一区二区三区小说| 麻豆久久久久久久| 成人黄页在线观看| 欧美日韩成人一区二区| 国产亚洲一区二区三区在线观看| 亚洲丝袜另类动漫二区| 午夜精品一区在线观看| 国产精品123| 欧美色精品在线视频| 久久久天堂av| 亚洲国产精品嫩草影院| 国产精品自拍av| 欧美中文一区二区三区| 久久网站最新地址| 亚洲国产aⅴ成人精品无吗| 久久成人免费日本黄色| 色综合天天综合网国产成人综合天| 欧美欧美午夜aⅴ在线观看| 国产欧美视频一区二区| 亚洲va欧美va国产va天堂影院| 国产另类ts人妖一区二区| 欧美日韩一区二区三区视频 | 日韩精品中文字幕一区二区三区| 国产女人18毛片水真多成人如厕 | 粉嫩13p一区二区三区| 欧美性生活大片视频| 亚洲国产成人自拍| 日韩av一区二区在线影视| 91香蕉视频污| 久久午夜羞羞影院免费观看| 亚洲图片自拍偷拍| 99综合电影在线视频| 精品国产91久久久久久久妲己| 亚洲一区视频在线观看视频| 成人黄色a**站在线观看| 欧美v亚洲v综合ⅴ国产v| 五月天中文字幕一区二区| 99在线视频精品| 中文av一区二区| 狠狠色综合日日| 日韩精品在线一区| 五月天中文字幕一区二区| 一本大道av一区二区在线播放| 日本一区二区三区久久久久久久久不| 三级欧美韩日大片在线看| 日本精品视频一区二区三区| 中文字幕av不卡| 国产精品一区二区三区99| 日韩欧美成人一区| 秋霞电影网一区二区| 欧美夫妻性生活| 日韩精品成人一区二区在线| 欧美日韩在线精品一区二区三区激情| 亚洲视频电影在线| 99久久精品国产导航| 中文字幕五月欧美| 99re视频精品| 成人免费一区二区三区在线观看| 成人自拍视频在线观看| 日本一区二区在线不卡| 国产一区二区按摩在线观看| 精品国产一区二区三区av性色 | 精品国产一区二区亚洲人成毛片| 久久er精品视频| 亚洲精品一线二线三线|