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

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

?? radeon_bios.c

?? x.org上有關ati系列顯卡最新驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_bios.c,v 1.0 Exp $ *//* * Copyright 2004 ATI Technologies Inc., Markham, Ontario * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation on the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <string.h>#include "xf86.h"#include "xf86_OSproc.h"#include "radeon.h"#include "radeon_reg.h"#include "radeon_macros.h"#include "radeon_probe.h"#include "vbe.h"/* Read the Video BIOS block and the FP registers (if applicable). */Bool RADEONGetBIOSInfo(ScrnInfoPtr pScrn, xf86Int10InfoPtr  pInt10){    RADEONInfoPtr info     = RADEONPTR(pScrn);    int tmp;    unsigned short dptr;    if (!(info->VBIOS = xalloc(RADEON_VBIOS_SIZE))) {	xf86DrvMsg(pScrn->scrnIndex, X_ERROR,		   "Cannot allocate space for hold Video BIOS!\n");	return FALSE;    } else {	if (pInt10) {	    info->BIOSAddr = pInt10->BIOSseg << 4;	    (void)memcpy(info->VBIOS, xf86int10Addr(pInt10, info->BIOSAddr),			 RADEON_VBIOS_SIZE);	} else {	    xf86ReadPciBIOS(0, info->PciTag, 0, info->VBIOS, RADEON_VBIOS_SIZE);	    if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,			   "Video BIOS not detected in PCI space!\n");		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,			   "Attempting to read Video BIOS from "			   "legacy ISA space!\n");		info->BIOSAddr = 0x000c0000;		xf86ReadDomainMemory(info->PciTag, info->BIOSAddr,				     RADEON_VBIOS_SIZE, info->VBIOS);	    }	}    }    if (info->VBIOS[0] != 0x55 || info->VBIOS[1] != 0xaa) {	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,		   "Unrecognized BIOS signature, BIOS data will not be used\n");	xfree (info->VBIOS);	info->VBIOS = NULL;	return FALSE;    }    /* Verify it's an x86 BIOS not OF firmware, copied from radeonfb */    dptr = RADEON_BIOS16(0x18);    /* If PCI data signature is wrong assume x86 video BIOS anyway */    if (RADEON_BIOS32(dptr) != (('R' << 24) | ('I' << 16) | ('C' << 8) | 'P')) {       xf86DrvMsg(pScrn->scrnIndex, X_WARNING,		   "ROM PCI data signature incorrect, ignoring\n");    }    else if (info->VBIOS[dptr + 0x14] != 0x0) {	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,		   "Not an x86 BIOS ROM image, BIOS data will not be used\n");	xfree (info->VBIOS);	info->VBIOS = NULL;	return FALSE;    }    if (info->VBIOS) info->ROMHeaderStart = RADEON_BIOS16(0x48);    if(!info->ROMHeaderStart) {	xf86DrvMsg(pScrn->scrnIndex, X_WARNING,		   "Invalid ROM pointer, BIOS data will not be used\n");	xfree (info->VBIOS);	info->VBIOS = NULL;	return FALSE;    }     tmp = info->ROMHeaderStart + 4;    if ((RADEON_BIOS8(tmp)   == 'A' &&	 RADEON_BIOS8(tmp+1) == 'T' &&	 RADEON_BIOS8(tmp+2) == 'O' &&	 RADEON_BIOS8(tmp+3) == 'M') ||	(RADEON_BIOS8(tmp)   == 'M' &&	 RADEON_BIOS8(tmp+1) == 'O' &&	 RADEON_BIOS8(tmp+2) == 'T' &&	 RADEON_BIOS8(tmp+3) == 'A'))	info->IsAtomBios = TRUE;    else	info->IsAtomBios = FALSE;    if (info->IsAtomBios) 	info->MasterDataStart = RADEON_BIOS16 (info->ROMHeaderStart + 32);    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "%s BIOS detected\n",	       info->IsAtomBios ? "ATOM":"Legacy");    return TRUE;}Bool RADEONGetConnectorInfoFromBIOS (ScrnInfoPtr pScrn){    RADEONInfoPtr info = RADEONPTR (pScrn);    RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);    int i = 0, j, tmp, tmp0=0, tmp1=0;    if(!info->VBIOS) return FALSE;    if (info->IsAtomBios) {	if((tmp = RADEON_BIOS16 (info->MasterDataStart + 22))) {	    int crtc = 0, id[2];	    tmp1 = RADEON_BIOS16 (tmp + 4);	    for (i=0; i<8; i++) {		if(tmp1 & (1<<i)) {		    CARD16 portinfo = RADEON_BIOS16(tmp+6+i*2);		    if (crtc < 2) {			if ((i==2) || (i==6)) continue; /* ignore TV here */			if (crtc == 1) {			    /* sharing same port with id[0] */			    if (((portinfo>>8) & 0xf) == id[0]) {				if (i == 3) 				    pRADEONEnt->PortInfo[0].TMDSType = TMDS_INT;				else if (i == 7)				    pRADEONEnt->PortInfo[0].TMDSType = TMDS_EXT;				if (pRADEONEnt->PortInfo[0].DACType == DAC_UNKNOWN)				    pRADEONEnt->PortInfo[0].DACType = (portinfo & 0xf) - 1;				continue;			    }			}			id[crtc] = (portinfo>>8) & 0xf; 			pRADEONEnt->PortInfo[crtc].DACType = (portinfo & 0xf) - 1;			pRADEONEnt->PortInfo[crtc].ConnectorType = (portinfo>>4) & 0xf;			if (i == 3) 			    pRADEONEnt->PortInfo[crtc].TMDSType = TMDS_INT;			else if (i == 7)			    pRADEONEnt->PortInfo[crtc].TMDSType = TMDS_EXT;						if((tmp0 = RADEON_BIOS16 (info->MasterDataStart + 24)) && id[crtc]) {			    switch (RADEON_BIOS16 (tmp0 + 4 + 27 * id[crtc]) * 4) 			    {			    case RADEON_GPIO_MONID:				pRADEONEnt->PortInfo[crtc].DDCType = DDC_MONID;				break;			    case RADEON_GPIO_DVI_DDC:				pRADEONEnt->PortInfo[crtc].DDCType = DDC_DVI;				break;			    case RADEON_GPIO_VGA_DDC:				pRADEONEnt->PortInfo[crtc].DDCType = DDC_VGA;				break;			    case RADEON_GPIO_CRT2_DDC:				pRADEONEnt->PortInfo[crtc].DDCType = DDC_CRT2;				break;			    default:				pRADEONEnt->PortInfo[crtc].DDCType = DDC_NONE_DETECTED;				break;			    }			} else {			    pRADEONEnt->PortInfo[crtc].DDCType = DDC_NONE_DETECTED;			}			crtc++;		    } else {			/* we have already had two CRTCs assigned. the rest may share the same			 * port with the existing connector, fill in them accordingly.			 */			for (j=0; j<2; j++) {			    if (((portinfo>>8) & 0xf) == id[j]) {				if (i == 3) 				    pRADEONEnt->PortInfo[j].TMDSType = TMDS_INT;				else if (i == 7)				    pRADEONEnt->PortInfo[j].TMDSType = TMDS_EXT;				if (pRADEONEnt->PortInfo[j].DACType == DAC_UNKNOWN)				    pRADEONEnt->PortInfo[j].DACType = (portinfo & 0xf) - 1;			    }			}		    }		}	    }	    for (i=0; i<2; i++) {		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Port%d: DDCType-%d, DACType-%d, TMDSType-%d, ConnectorType-%d\n",			   i, pRADEONEnt->PortInfo[i].DDCType, pRADEONEnt->PortInfo[i].DACType,			   pRADEONEnt->PortInfo[i].TMDSType, pRADEONEnt->PortInfo[i].ConnectorType);	    }	    	} else {	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No Device Info Table found!\n");	    return FALSE;	}    } else {	/* Some laptops only have one connector (VGA) listed in the connector table, 	 * we need to add LVDS in as a non-DDC display. 	 * Note, we can't assume the listed VGA will be filled in PortInfo[0],	 * when walking through connector table. connector_found has following meaning: 	 * 0 -- nothing found, 	 * 1 -- only PortInfo[0] filled, 	 * 2 -- only PortInfo[1] filled,	 * 3 -- both are filled.	 */	int connector_found = 0;	if ((tmp = RADEON_BIOS16(info->ROMHeaderStart + 0x50))) {	    for (i = 1; i < 4; i++) {		if (!RADEON_BIOS16(tmp + i*2))			break; /* end of table */				tmp0 = RADEON_BIOS16(tmp + i*2);		if (((tmp0 >> 12) & 0x0f) == 0) continue;     /* no connector */		if (connector_found > 0) {		    if (pRADEONEnt->PortInfo[tmp1].DDCType == ((tmp0 >> 8) & 0x0f))			continue;                             /* same connector */		}		/* internal DDC_DVI port will get assigned to PortInfo[0], or if there is no DDC_DVI (like in some IGPs). */		tmp1 = ((((tmp0 >> 8) & 0xf) == DDC_DVI) || (tmp1 == 1)) ? 0 : 1; /* determine port info index */				pRADEONEnt->PortInfo[tmp1].DDCType        = (tmp0 >> 8) & 0x0f;		if (pRADEONEnt->PortInfo[tmp1].DDCType > DDC_CRT2) pRADEONEnt->PortInfo[tmp1].DDCType = DDC_NONE_DETECTED;		pRADEONEnt->PortInfo[tmp1].DACType        = (tmp0 & 0x01) ? DAC_TVDAC : DAC_PRIMARY;		pRADEONEnt->PortInfo[tmp1].ConnectorType  = (tmp0 >> 12) & 0x0f;		if (pRADEONEnt->PortInfo[tmp1].ConnectorType > CONNECTOR_UNSUPPORTED) pRADEONEnt->PortInfo[tmp1].ConnectorType = CONNECTOR_UNSUPPORTED;		pRADEONEnt->PortInfo[tmp1].TMDSType       = ((tmp0 >> 4) & 0x01) ? TMDS_EXT : TMDS_INT;		/* some sanity checks */		if (((pRADEONEnt->PortInfo[tmp1].ConnectorType != CONNECTOR_DVI_D) &&		     (pRADEONEnt->PortInfo[tmp1].ConnectorType != CONNECTOR_DVI_I)) &&		    pRADEONEnt->PortInfo[tmp1].TMDSType == TMDS_INT)		    pRADEONEnt->PortInfo[tmp1].TMDSType = TMDS_UNKNOWN;				connector_found += (tmp1 + 1);	    }	} else {	    xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "No Connector Info Table found!\n");	    return FALSE;	}	if (info->IsMobility) {	    /* For the cases where only one VGA connector is found, 	       we assume LVDS is not listed in the connector table, 	       add it in here as the first port.	    */	    if ((connector_found < 3) && (pRADEONEnt->PortInfo[tmp1].ConnectorType == CONNECTOR_CRT)) {		if (connector_found == 1) {		    memcpy (&pRADEONEnt->PortInfo[1], &pRADEONEnt->PortInfo[0], 			    sizeof (pRADEONEnt->PortInfo[0]));		}		pRADEONEnt->PortInfo[0].DACType = DAC_TVDAC;		pRADEONEnt->PortInfo[0].TMDSType = TMDS_UNKNOWN;		pRADEONEnt->PortInfo[0].DDCType = DDC_NONE_DETECTED;		pRADEONEnt->PortInfo[0].ConnectorType = CONNECTOR_PROPRIETARY;		xf86DrvMsg(pScrn->scrnIndex, X_INFO, "LVDS port is not in connector table, added in.\n");		if (connector_found == 0) connector_found = 1;		else connector_found = 3;	    }	    if ((tmp = RADEON_BIOS16(info->ROMHeaderStart + 0x42))) {	        if ((tmp0 = RADEON_BIOS16(tmp + 0x15))) {		    if ((tmp1 = RADEON_BIOS8(tmp0+2) & 0x07)) {	    			pRADEONEnt->PortInfo[0].DDCType	= tmp1;      			if (pRADEONEnt->PortInfo[0].DDCType > DDC_CRT2) {			    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,				       "Unknown DDCType %d found\n",				       pRADEONEnt->PortInfo[0].DDCType);			    pRADEONEnt->PortInfo[0].DDCType = DDC_NONE_DETECTED;			}			xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "LCD DDC Info Table found!\n");		    }		}	    } 	} else if (connector_found == 2) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲另类激情小说| 成人黄色电影在线| 在线播放91灌醉迷j高跟美女 | 成人av动漫在线| 国产精品素人视频| www.成人在线| 亚洲综合区在线| 日韩一区二区免费在线观看| 韩国视频一区二区| 国产女人水真多18毛片18精品视频 | 激情综合五月婷婷| 久久尤物电影视频在线观看| 国产精品18久久久久久久久| 亚洲天堂中文字幕| 在线观看亚洲一区| 免费在线观看成人| 久久女同互慰一区二区三区| 99久久精品国产精品久久| 亚洲男人都懂的| 欧美成人bangbros| 不卡av免费在线观看| 亚洲电影一区二区三区| 精品国产一区二区三区久久久蜜月| 国产成人在线视频网站| 亚洲精品国产无天堂网2021 | 日韩精品亚洲一区二区三区免费| 精品国产亚洲在线| 色婷婷亚洲综合| 久久国产尿小便嘘嘘| 国产精品久久久久影视| 欧美巨大另类极品videosbest | 国产一区二区三区在线观看精品| 最新高清无码专区| 欧美一级日韩一级| www.欧美亚洲| 韩国一区二区三区| 亚洲国产日韩av| 国产人成一区二区三区影院| 欧美亚洲丝袜传媒另类| 国产麻豆精品theporn| 亚洲夂夂婷婷色拍ww47| 久久久综合九色合综国产精品| 91视频www| 国产精品18久久久久久久久| 午夜欧美大尺度福利影院在线看| 国产三级精品视频| 日韩欧美精品在线视频| 在线视频你懂得一区二区三区| 国产一区视频在线看| 首页综合国产亚洲丝袜| 日韩理论电影院| 日本一区二区三区在线观看| 日韩一级黄色片| 欧美午夜影院一区| 色诱视频网站一区| 成人激情电影免费在线观看| 国产一区二区三区综合| 美女视频黄免费的久久 | 337p亚洲精品色噜噜狠狠| 91色综合久久久久婷婷| 成人永久免费视频| 国产激情一区二区三区| 国内精品久久久久影院薰衣草| 天堂在线亚洲视频| 亚洲国产日韩精品| 亚洲一区二区欧美| 一区二区三区日韩欧美| 日韩伦理电影网| 亚洲欧洲国产日韩| 国产精品久久二区二区| 国产欧美中文在线| 国产欧美精品区一区二区三区| 久久久久久久综合| 久久久午夜精品| 久久久www成人免费无遮挡大片| 日韩午夜精品视频| 精品少妇一区二区三区| 日韩欧美亚洲国产另类| 欧美一区二区高清| 日韩欧美123| 欧美va天堂va视频va在线| 精品免费一区二区三区| 久久久久久99久久久精品网站| 2024国产精品| 国产婷婷色一区二区三区四区| 久久久久久久久岛国免费| 国产欧美精品区一区二区三区| 欧美韩国一区二区| 亚洲欧美日韩久久| 亚洲国产成人porn| 蜜桃视频一区二区三区| 极品少妇xxxx精品少妇偷拍| 国产精品一二一区| 成人的网站免费观看| 97久久精品人人做人人爽50路| 色婷婷久久久亚洲一区二区三区| 欧美在线色视频| 欧美猛男男办公室激情| 精品精品欲导航| 国产精品美日韩| 一区二区免费看| 婷婷丁香激情综合| 国产成人精品在线看| 色综合久久88色综合天天6| 精品视频在线免费观看| 精品999在线播放| 中文字幕一区二区三区不卡在线| 亚洲午夜电影网| 黄色日韩三级电影| 91一区二区在线观看| 欧美一区二区啪啪| 国产精品免费aⅴ片在线观看| 亚洲国产中文字幕在线视频综合| 蜜臀av一区二区在线免费观看 | 综合网在线视频| 日韩精品一区第一页| 国产成a人无v码亚洲福利| 在线观看成人小视频| 久久亚洲春色中文字幕久久久| 国产精品你懂的在线欣赏| 日韩电影在线免费| 成人精品gif动图一区| 欧美精品99久久久**| 中文字幕欧美激情| 日韩av中文字幕一区二区| 972aa.com艺术欧美| 日韩美女一区二区三区| 亚洲乱码国产乱码精品精小说| 久久国产视频网| 色香蕉成人二区免费| 久久综合久久综合九色| 午夜精品福利在线| 97精品国产97久久久久久久久久久久| 91精品中文字幕一区二区三区| 国产精品婷婷午夜在线观看| 久久爱www久久做| 欧美视频一区二区三区四区| 久久蜜桃av一区二区天堂 | 91无套直看片红桃| 亚洲精品一区二区三区四区高清| 亚洲一区二区三区四区在线| 成人福利视频在线看| 精品福利av导航| 天天综合天天做天天综合| 一本大道久久a久久精品综合| 国产欧美日韩精品a在线观看| 裸体一区二区三区| 欧美日韩夫妻久久| 亚洲一区视频在线观看视频| 99精品国产99久久久久久白柏| 国产欧美一区二区精品忘忧草 | 国产精品中文字幕欧美| 欧美一区二区三区日韩视频| 亚洲午夜精品在线| 在线观看91视频| 亚洲狠狠丁香婷婷综合久久久| 99国产精品一区| 中文字幕一区日韩精品欧美| 国产.精品.日韩.另类.中文.在线.播放| 欧美一区二区福利在线| 日本视频在线一区| 51精品国自产在线| 三级一区在线视频先锋 | 成人av网站在线| 国产精品视频一二三| 国产999精品久久久久久绿帽| 精品国产乱码久久久久久牛牛 | 亚洲一二三四在线观看| 色美美综合视频| 亚洲免费观看在线视频| 日本韩国一区二区三区视频| 亚洲综合久久av| 欧美日本一区二区在线观看| 日日夜夜免费精品| 欧美一级片在线| 久久成人精品无人区| 欧美videos大乳护士334| 国产在线视视频有精品| 欧美国产日韩精品免费观看| k8久久久一区二区三区| 亚洲免费在线观看| 欧美日韩精品一区二区天天拍小说| 亚洲成人综合网站| 日韩美女视频在线| 国产sm精品调教视频网站| 国产精品久久久久久久第一福利| 色综合久久88色综合天天免费| 亚洲成人免费av| 日韩欧美一区二区免费| 国产精华液一区二区三区| 亚洲欧美国产77777| 欧美色图免费看| 久久国产乱子精品免费女| 中文成人综合网| 欧美色电影在线| 国产一区二区电影| 一区二区三区四区蜜桃| 日韩午夜三级在线| av色综合久久天堂av综合| 日韩av午夜在线观看|