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

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

?? pci.c

?? 針對yassylcd的uboot源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * (C) Copyright 2000 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * *//* PCI.c - PCI functions */#include <common.h>#include <pci.h>#include "../include/pci.h"#undef DEBUG#undef IDE_SET_NATIVE_MODEstatic unsigned int local_buses[] = { 0, 0 };static const unsigned char pci_irq_swizzle[2][PCI_MAX_DEVICES] = {	{0, 0, 0, 0, 0, 0, 0, 27, 27, [9 ... PCI_MAX_DEVICES - 1] = 0 },	{0, 0, 0, 0, 0, 0, 0, 29, 29, [9 ... PCI_MAX_DEVICES - 1] = 0 },};#ifdef DEBUGstatic const unsigned int pci_bus_list[] = { PCI_0_MODE, PCI_1_MODE };static void gt_pci_bus_mode_display (PCI_HOST host){	unsigned int mode;	mode = (GTREGREAD (pci_bus_list[host]) & (BIT4 | BIT5)) >> 4;	switch (mode) {	case 0:		printf ("PCI %d bus mode: Conventional PCI\n", host);		break;	case 1:		printf ("PCI %d bus mode: 66 Mhz PCIX\n", host);		break;	case 2:		printf ("PCI %d bus mode: 100 Mhz PCIX\n", host);		break;	case 3:		printf ("PCI %d bus mode: 133 Mhz PCIX\n", host);		break;	default:		printf ("Unknown BUS %d\n", mode);	}}#endifstatic const unsigned int pci_p2p_configuration_reg[] = {	PCI_0P2P_CONFIGURATION, PCI_1P2P_CONFIGURATION};static const unsigned int pci_configuration_address[] = {	PCI_0CONFIGURATION_ADDRESS, PCI_1CONFIGURATION_ADDRESS};static const unsigned int pci_configuration_data[] = {	PCI_0CONFIGURATION_DATA_VIRTUAL_REGISTER,	PCI_1CONFIGURATION_DATA_VIRTUAL_REGISTER};static const unsigned int pci_error_cause_reg[] = {	PCI_0ERROR_CAUSE, PCI_1ERROR_CAUSE};static const unsigned int pci_arbiter_control[] = {	PCI_0ARBITER_CONTROL, PCI_1ARBITER_CONTROL};static const unsigned int pci_address_space_en[] = {	PCI_0_BASE_ADDR_REG_ENABLE, PCI_1_BASE_ADDR_REG_ENABLE};static const unsigned int pci_snoop_control_base_0_low[] = {	PCI_0SNOOP_CONTROL_BASE_0_LOW, PCI_1SNOOP_CONTROL_BASE_0_LOW};static const unsigned int pci_snoop_control_top_0[] = {	PCI_0SNOOP_CONTROL_TOP_0, PCI_1SNOOP_CONTROL_TOP_0};static const unsigned int pci_access_control_base_0_low[] = {	PCI_0ACCESS_CONTROL_BASE_0_LOW, PCI_1ACCESS_CONTROL_BASE_0_LOW};static const unsigned int pci_access_control_top_0[] = {	PCI_0ACCESS_CONTROL_TOP_0, PCI_1ACCESS_CONTROL_TOP_0};static const unsigned int pci_scs_bank_size[2][4] = {	{PCI_0SCS_0_BANK_SIZE, PCI_0SCS_1_BANK_SIZE,	 PCI_0SCS_2_BANK_SIZE, PCI_0SCS_3_BANK_SIZE},	{PCI_1SCS_0_BANK_SIZE, PCI_1SCS_1_BANK_SIZE,	 PCI_1SCS_2_BANK_SIZE, PCI_1SCS_3_BANK_SIZE}};static const unsigned int pci_p2p_configuration[] = {	PCI_0P2P_CONFIGURATION, PCI_1P2P_CONFIGURATION};/********************************************************************* pciWriteConfigReg - Write to a PCI configuration register*                    - Make sure the GT is configured as a master before writing*                      to another device on the PCI.*                    - The function takes care of Big/Little endian conversion.*** Inputs:   unsigned int regOffset: The register offset as it apears in the GT spec*                   (or any other PCI device spec)*           pciDevNum: The device number needs to be addressed.**  Configuration Address 0xCF8:**       31 30    24 23  16 15  11 10     8 7      2  0     <=bit Number*  |congif|Reserved|  Bus |Device|Function|Register|00|*  |Enable|        |Number|Number| Number | Number |  |    <=field Name**********************************************************************/void pciWriteConfigReg (PCI_HOST host, unsigned int regOffset,			unsigned int pciDevNum, unsigned int data){	volatile unsigned int DataForAddrReg;	unsigned int functionNum;	unsigned int busNum = 0;	unsigned int addr;	if (pciDevNum > 32)	/* illegal device Number */		return;	if (pciDevNum == SELF) {	/* configure our configuration space. */		pciDevNum =			(GTREGREAD (pci_p2p_configuration_reg[host]) >> 24) &			0x1f;		busNum = GTREGREAD (pci_p2p_configuration_reg[host]) &			0xff0000;	}	functionNum = regOffset & 0x00000700;	pciDevNum = pciDevNum << 11;	regOffset = regOffset & 0xfc;	DataForAddrReg =		(regOffset | pciDevNum | functionNum | busNum) | BIT31;	GT_REG_WRITE (pci_configuration_address[host], DataForAddrReg);	GT_REG_READ (pci_configuration_address[host], &addr);	if (addr != DataForAddrReg)		return;	GT_REG_WRITE (pci_configuration_data[host], data);}/********************************************************************* pciReadConfigReg  - Read from a PCI0 configuration register*                    - Make sure the GT is configured as a master before reading*                     from another device on the PCI.*                   - The function takes care of Big/Little endian conversion.* INPUTS:   regOffset: The register offset as it apears in the GT spec (or PCI*                        spec)*           pciDevNum: The device number needs to be addressed.* RETURNS: data , if the data == 0xffffffff check the master abort bit in the*                 cause register to make sure the data is valid**  Configuration Address 0xCF8:**       31 30    24 23  16 15  11 10     8 7      2  0     <=bit Number*  |congif|Reserved|  Bus |Device|Function|Register|00|*  |Enable|        |Number|Number| Number | Number |  |    <=field Name**********************************************************************/unsigned int pciReadConfigReg (PCI_HOST host, unsigned int regOffset,			       unsigned int pciDevNum){	volatile unsigned int DataForAddrReg;	unsigned int data;	unsigned int functionNum;	unsigned int busNum = 0;	if (pciDevNum > 32)	/* illegal device Number */		return 0xffffffff;	if (pciDevNum == SELF) {	/* configure our configuration space. */		pciDevNum =			(GTREGREAD (pci_p2p_configuration_reg[host]) >> 24) &			0x1f;		busNum = GTREGREAD (pci_p2p_configuration_reg[host]) &			0xff0000;	}	functionNum = regOffset & 0x00000700;	pciDevNum = pciDevNum << 11;	regOffset = regOffset & 0xfc;	DataForAddrReg =		(regOffset | pciDevNum | functionNum | busNum) | BIT31;	GT_REG_WRITE (pci_configuration_address[host], DataForAddrReg);	GT_REG_READ (pci_configuration_address[host], &data);	if (data != DataForAddrReg)		return 0xffffffff;	GT_REG_READ (pci_configuration_data[host], &data);	return data;}/********************************************************************* pciOverBridgeWriteConfigReg - Write to a PCI configuration register where*                               the agent is placed on another Bus. For more*                               information read P2P in the PCI spec.** Inputs:   unsigned int regOffset - The register offset as it apears in the*           GT spec (or any other PCI device spec).*           unsigned int pciDevNum - The device number needs to be addressed.*           unsigned int busNum - On which bus does the Target agent connect*                                 to.*           unsigned int data - data to be written.**  Configuration Address 0xCF8:**       31 30    24 23  16 15  11 10     8 7      2  0     <=bit Number*  |congif|Reserved|  Bus |Device|Function|Register|01|*  |Enable|        |Number|Number| Number | Number |  |    <=field Name**  The configuration Address is configure as type-I (bits[1:0] = '01') due to*   PCI spec referring to P2P.**********************************************************************/void pciOverBridgeWriteConfigReg (PCI_HOST host,				  unsigned int regOffset,				  unsigned int pciDevNum,				  unsigned int busNum, unsigned int data){	unsigned int DataForReg;	unsigned int functionNum;	functionNum = regOffset & 0x00000700;	pciDevNum = pciDevNum << 11;	regOffset = regOffset & 0xff;	busNum = busNum << 16;	if (pciDevNum == SELF) {	/* This board */		DataForReg = (regOffset | pciDevNum | functionNum) | BIT0;	} else {		DataForReg = (regOffset | pciDevNum | functionNum | busNum) |			BIT31 | BIT0;	}	GT_REG_WRITE (pci_configuration_address[host], DataForReg);	GT_REG_WRITE (pci_configuration_data[host], data);}/********************************************************************* pciOverBridgeReadConfigReg  - Read from a PCIn configuration register where*                               the agent target locate on another PCI bus.*                             - Make sure the GT is configured as a master*                               before reading from another device on the PCI.*                             - The function takes care of Big/Little endian*                               conversion.* INPUTS:   regOffset: The register offset as it apears in the GT spec (or PCI*                        spec). (configuration register offset.)*           pciDevNum: The device number needs to be addressed.*           busNum: the Bus number where the agent is place.* RETURNS: data , if the data == 0xffffffff check the master abort bit in the*                 cause register to make sure the data is valid**  Configuration Address 0xCF8:**       31 30    24 23  16 15  11 10     8 7      2  0     <=bit Number*  |congif|Reserved|  Bus |Device|Function|Register|01|*  |Enable|        |Number|Number| Number | Number |  |    <=field Name**********************************************************************/unsigned int pciOverBridgeReadConfigReg (PCI_HOST host,					 unsigned int regOffset,					 unsigned int pciDevNum,					 unsigned int busNum){	unsigned int DataForReg;	unsigned int data;	unsigned int functionNum;	functionNum = regOffset & 0x00000700;	pciDevNum = pciDevNum << 11;	regOffset = regOffset & 0xff;	busNum = busNum << 16;	if (pciDevNum == SELF) {	/* This board */		DataForReg = (regOffset | pciDevNum | functionNum) | BIT31;	} else {		/* agent on another bus */		DataForReg = (regOffset | pciDevNum | functionNum | busNum) |			BIT0 | BIT31;	}	GT_REG_WRITE (pci_configuration_address[host], DataForReg);	GT_REG_READ (pci_configuration_data[host], &data);	return data;}/********************************************************************* pciGetRegOffset - Gets the register offset for this region config.** INPUT:   Bus, Region - The bus and region we ask for its base address.* OUTPUT:   N/A* RETURNS: PCI register base address*********************************************************************/static unsigned int pciGetRegOffset (PCI_HOST host, PCI_REGION region)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
5566中文字幕一区二区电影 | 国产在线视频一区二区三区| 中文字幕人成不卡一区| 精品国产网站在线观看| 日韩一区二区视频| 91精品国产综合久久精品app| 欧美午夜不卡在线观看免费| 91国产免费看| 欧美日韩国产大片| 欧美中文字幕亚洲一区二区va在线| 91网页版在线| 色播五月激情综合网| 欧美中文一区二区三区| 欧美日韩1234| 日韩精品资源二区在线| 亚洲精品一区二区三区福利 | 日韩视频免费直播| 日韩一区二区在线看| 久久免费午夜影院| 中文字幕欧美三区| 亚洲裸体在线观看| 性做久久久久久免费观看| 日韩精品免费视频人成| 狠狠久久亚洲欧美| 成人免费va视频| 在线精品视频一区二区三四| 欧美日韩第一区日日骚| 日韩免费观看2025年上映的电影| 26uuu色噜噜精品一区| 国产女同互慰高潮91漫画| 亚洲欧美国产毛片在线| 日本系列欧美系列| 国产凹凸在线观看一区二区| 日本韩国欧美在线| 日韩情涩欧美日韩视频| 国产精品丝袜在线| 香蕉成人伊视频在线观看| 精品亚洲成a人在线观看| 99国产欧美另类久久久精品| 欧美亚洲国产bt| 久久精品亚洲乱码伦伦中文| 一区二区三区在线播| 美女诱惑一区二区| 色悠悠久久综合| 精品久久久网站| 一区二区三区蜜桃网| 久久国产精品色婷婷| 91亚洲大成网污www| 欧美大片在线观看| 亚洲一区二区三区四区五区黄| 国内外成人在线视频| 欧美最猛黑人xxxxx猛交| 国产亚洲精品福利| 调教+趴+乳夹+国产+精品| www.亚洲免费av| 精品少妇一区二区三区视频免付费| 亚洲欧美电影院| 国产精品一区二区久久精品爱涩| 在线亚洲+欧美+日本专区| 久久综合av免费| 舔着乳尖日韩一区| 欧美亚州韩日在线看免费版国语版| 久久婷婷一区二区三区| 奇米色一区二区| 欧美亚洲高清一区二区三区不卡| 国产精品久久看| 国产乱人伦偷精品视频不卡| 日韩免费看网站| 日本不卡123| 欧美久久一二区| 亚洲另类在线制服丝袜| 成人福利在线看| 国产校园另类小说区| 国产在线麻豆精品观看| 日韩欧美一二三区| 日韩国产精品91| 91精品国产欧美一区二区| 亚洲mv在线观看| 欧美精品在线观看播放| 天天操天天综合网| 欧美精品777| 日本美女视频一区二区| 日韩一区二区三区电影在线观看 | 日韩和欧美一区二区三区| 色94色欧美sute亚洲线路二| 亚洲三级在线免费观看| 色综合久久综合网| 亚洲观看高清完整版在线观看| 日本高清成人免费播放| 亚洲国产精品自拍| 777奇米成人网| 久久精品99国产精品| 精品国产一区久久| 国产精品1区2区3区在线观看| 亚洲国产电影在线观看| 91视频91自| 婷婷综合在线观看| 精品国产乱码久久久久久久| 国产精品888| 亚洲欧美日本韩国| 91麻豆精品国产| 国产一区二区三区精品视频| 中文字幕一区免费在线观看| 色婷婷av一区二区三区之一色屋| 亚洲 欧美综合在线网络| 精品免费99久久| av动漫一区二区| 舔着乳尖日韩一区| 国产亚洲欧美一级| 在线国产亚洲欧美| 国内外成人在线视频| 亚洲欧美韩国综合色| 日韩女优毛片在线| 97久久精品人人做人人爽50路| 亚洲.国产.中文慕字在线| 久久久久久久综合色一本| 在线视频国内自拍亚洲视频| 美女一区二区三区在线观看| 国产精品久久久久精k8| 欧美一区日韩一区| 99riav一区二区三区| 琪琪久久久久日韩精品| 亚洲图片另类小说| 26uuu国产在线精品一区二区| 色婷婷av一区二区| 国产乱码字幕精品高清av| 亚洲va韩国va欧美va| 亚洲国产精品传媒在线观看| 在线电影国产精品| 99精品欧美一区二区三区综合在线| 日韩精品亚洲一区二区三区免费| 综合在线观看色| 国产日韩精品一区二区浪潮av| 欧美日韩国产小视频在线观看| av一区二区三区| 国产综合久久久久久久久久久久 | 欧美挠脚心视频网站| 成人精品鲁一区一区二区| 美女免费视频一区| 日韩激情在线观看| 亚洲午夜免费视频| 亚洲同性gay激情无套| 久久在线观看免费| 欧美一级爆毛片| 欧美中文一区二区三区| 99精品国产99久久久久久白柏| 国产精品自拍av| 久久99精品久久久| 日本午夜精品视频在线观看| 亚洲综合男人的天堂| 亚洲欧美色图小说| 亚洲日穴在线视频| 亚洲视频你懂的| 亚洲欧美日韩国产另类专区| 国产精品不卡一区| 中文字幕一区日韩精品欧美| 国产精品久久网站| 国产精品毛片高清在线完整版| 国产日产欧产精品推荐色| 国产亚洲欧美在线| 国产精品乱码妇女bbbb| 欧美国产精品v| 国产精品成人午夜| 日韩伦理免费电影| 亚洲一区电影777| 天天综合日日夜夜精品| 亚洲成av人在线观看| 日韩二区三区在线观看| 国产乱子伦视频一区二区三区| 日本不卡中文字幕| 韩国一区二区三区| www.欧美亚洲| 99国产欧美另类久久久精品| 在线看一区二区| 欧美一区二区三区系列电影| 欧美mv日韩mv亚洲| 国产精品国产三级国产aⅴ原创| 亚洲色欲色欲www在线观看| 亚洲一区二区三区在线看| 蜜桃视频在线一区| 成人一级片在线观看| 色噜噜久久综合| 欧美成人精精品一区二区频| 欧美国产日韩a欧美在线观看| 国产精品美女视频| 婷婷一区二区三区| 国产福利一区在线观看| 97se亚洲国产综合自在线| 欧美久久久久免费| 国产日韩欧美精品综合| 亚洲素人一区二区| 青青草一区二区三区| 福利电影一区二区三区| 欧美亚洲自拍偷拍| 久久日韩粉嫩一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 午夜影院在线观看欧美| 懂色av一区二区三区蜜臀 | 一区二区三区色| 老司机免费视频一区二区|