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

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

?? pci.c

?? 嵌入式試驗箱S3C2410的bootloader源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
	REG_WRITE (PCI_CSR_BASE, PCI_AHBIOBASE_OFFSET,		   IXP425_PCI_AHBIOBASE_DEFAULT);	REG_WRITE (PCI_CSR_BASE, PCI_PCIMEMBASE_OFFSET,		   IXP425_PCI_PCIMEMBASE_DEFAULT);	crp_write (PCI_CFG_SUB_VENDOR_ID, IXP425_PCI_SUB_VENDOR_SYSTEM);	REG_READ (PCI_CSR_BASE, PCI_CSR_OFFSET, regval);	regval |= PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS;	REG_WRITE (PCI_CSR_BASE, PCI_CSR_OFFSET, regval);	crp_write (PCI_CFG_COMMAND, PCI_CFG_CMD_MAE | PCI_CFG_CMD_BME);	udelay (1000);	pci_write_config_word (0, PCI_CFG_COMMAND, INITIAL_PCI_CMD);	REG_WRITE (PCI_CSR_BASE, PCI_ISR_OFFSET, PCI_ISR_PSE		   | PCI_ISR_PFE | PCI_ISR_PPE | PCI_ISR_AHBE);#ifdef CONFIG_PCI_SCAN_SHOW	printf ("Device  bus  dev  func  deviceID  vendorID \n");#endif	pci_bus_scan ();}void configure_pins (void){	unsigned int regval;	/* Disable clock on GPIO PIN 14 */	READ_GPIO_REG (IXP425_GPIO_GPCLKR, regval);	WRITE_GPIO_REG (IXP425_GPIO_GPCLKR, regval & (~(1 << 8)));	READ_GPIO_REG (IXP425_GPIO_GPCLKR, regval);	READ_GPIO_REG (IXP425_GPIO_GPOER, regval);	WRITE_GPIO_REG (IXP425_GPIO_GPOER,			(((~(3 << 13)) & regval) | (0xf << 8)));	READ_GPIO_REG (IXP425_GPIO_GPOER, regval);	READ_GPIO_REG (IXP425_GPIO_GPIT2R, regval);	WRITE_GPIO_REG (IXP425_GPIO_GPIT2R,			(regval &			 ((0x1 << 9) | (0x1 << 6) | (0x1 << 3) | 0x1)));	READ_GPIO_REG (IXP425_GPIO_GPIT2R, regval);	READ_GPIO_REG (IXP425_GPIO_GPISR, regval);	WRITE_GPIO_REG (IXP425_GPIO_GPISR, (regval | (0xf << 8)));	READ_GPIO_REG (IXP425_GPIO_GPISR, regval);}void sys_pci_gpio_clock_config (void){	unsigned int regval;	READ_GPIO_REG (IXP425_GPIO_GPCLKR, regval);	regval |= 0x1 << 4;	WRITE_GPIO_REG (IXP425_GPIO_GPCLKR, regval);	READ_GPIO_REG (IXP425_GPIO_GPCLKR, regval);	regval |= 0x1 << 8;	WRITE_GPIO_REG (IXP425_GPIO_GPCLKR, regval);}void pci_bus_scan (void){	unsigned int bus = 0, dev, func = 0;	unsigned short data16;	unsigned int data32;	unsigned char intPin;	/* Assign first device to ourselves */	devices[0].bus = 0;	devices[0].device = 0;	devices[0].func = 0;	crp_read (PCI_CFG_VENDOR_ID, &data32);	devices[0].vendor_id = data32 & IXP425_PCI_BOTTOM_WORD_OF_LONG_MASK;	devices[0].device_id = data32 >> 16;	devices[0].error = FALSE;	devices[0].bar[NO_BAR].size = 0;	/*dummy - required */	nDevices = 1;	nMBars = 0;	nIOBars = 0;	for (dev = 0; dev < IXP425_PCI_MAX_DEV; dev++) {		/*Check whether a device is present */		if (pci_device_exists (dev) != TRUE) {			/*Clear error bits in ISR, write 1 to clear */			REG_WRITE (PCI_CSR_BASE, PCI_ISR_OFFSET, PCI_ISR_PSE				   | PCI_ISR_PFE | PCI_ISR_PPE |				   PCI_ISR_AHBE);			continue;		}		/*A device is present, add an entry to the array */		devices[nDevices].bus = bus;		devices[nDevices].device = dev;		devices[nDevices].func = func;		pci_read_config_word (dev, PCI_CFG_VENDOR_ID, &data16);		devices[nDevices].vendor_id = data16;		pci_read_config_word (dev, PCI_CFG_DEVICE_ID, &data16);		devices[nDevices].device_id = data16;		/*The device is functioning correctly, set error to FALSE */		devices[nDevices].error = FALSE;		/*Figure out what BARs are on this device */		sys_pci_bar_info_get (nDevices, bus, dev, func);		/*Figure out what INTX# line the card uses */		pci_read_config_byte (dev, PCI_CFG_DEV_INT_PIN, &intPin);		/*assign the appropriate irq line */		if (intPin > PCI_IRQ_LINES) {			devices[nDevices].error = TRUE;		} else if (intPin != 0) {			/*This device uses an interrupt line */			/*devices[nDevices].irq = ixp425PciIntTranslate[dev][intPin-1]; */			devices[nDevices].irq = intPin;		}#ifdef CONFIG_PCI_SCAN_SHOW		printf ("%06d    %03d %03d %04d  %08d      %08x\n", nDevices,			devices[nDevices].vendor_id);#endif		nDevices++;	}	calc_bars (memBars, nMBars, IXP425_PCI_BAR_MEM_BASE);	sys_pci_device_bars_write ();	REG_WRITE (PCI_CSR_BASE, PCI_ISR_OFFSET, PCI_ISR_PSE		   | PCI_ISR_PFE | PCI_ISR_PPE | PCI_ISR_AHBE);}void sys_pci_bar_info_get (unsigned int devnum,			   unsigned int bus,			   unsigned int dev, unsigned int func){	unsigned int data32;	unsigned int tmp;	unsigned int size;	pci_write_config_dword (devnum,				PCI_CFG_BASE_ADDRESS_0, IXP425_PCI_BAR_QUERY);	pci_read_config_dword (devnum, PCI_CFG_BASE_ADDRESS_0, &data32);	devices[devnum].bar[0].address = (data32 & 1);	if (data32 & 1) {		/* IO space */		tmp = data32 & ~0x3;		size = ~(tmp - 1);		devices[devnum].bar[0].size = size;		if (nIOBars < IXP425_PCI_MAX_BAR) {			ioBars[nIOBars++] = &devices[devnum].bar[0];		}	} else {		/* Mem space */		tmp = data32 & ~IXP425_PCI_BOTTOM_NIBBLE_OF_LONG_MASK;		size = ~(tmp - 1);		devices[devnum].bar[0].size = size;		if (nMBars < IXP425_PCI_MAX_BAR) {			memBars[nMBars++] = &devices[devnum].bar[0];		} else {			devices[devnum].error = TRUE;		}	}	devices[devnum].bar[1].size = 0;}void sortBars (PciBar * Bars[], unsigned int nBars){	unsigned int i, j;	PciBar *tmp;	if (nBars == 0) {		return;	}	/* Sort biggest to smallest */	for (i = 0; i < nBars - 1; i++) {		for (j = i + 1; j < nBars; j++) {			if (Bars[j]->size > Bars[i]->size) {				/* swap them */				tmp = Bars[i];				Bars[i] = Bars[j];				Bars[j] = tmp;			}		}	}}void calc_bars (PciBar * Bars[], unsigned int nBars, unsigned int startAddr){	unsigned int i;	if (nBars == 0) {		return;	}	for (i = 0; i < nBars; i++) {		Bars[i]->address |= startAddr;		startAddr += Bars[i]->size;	}}void sys_pci_device_bars_write (void){	unsigned int i;	int addr;	for (i = 1; i < nDevices; i++) {		if (devices[i].error) {			continue;		}		pci_write_config_dword (devices[i].device,					PCI_CFG_BASE_ADDRESS_0,					devices[i].bar[0].address);		addr = BIT (31 - devices[i].device) |			(0 << PCI_NP_AD_FUNCSL) |			(PCI_CFG_BASE_ADDRESS_0 & ~3);		pci_write_config_dword (devices[i].device,					PCI_CFG_DEV_INT_LINE, devices[i].irq);		pci_write_config_word (devices[i].device,				       PCI_CFG_COMMAND, INITIAL_PCI_CMD);	}}int pci_device_exists (unsigned int deviceNo){	unsigned int vendorId;	unsigned int regval;	pci_read_config_dword (deviceNo, PCI_CFG_VENDOR_ID, &vendorId);	/* There are two ways to find out an empty device.	 *   1. check Master Abort bit after the access.	 *   2. check whether the vendor id read back is 0x0.	 */	REG_READ (PCI_CSR_BASE, PCI_ISR_OFFSET, regval);	if ((vendorId != 0x0) && ((regval & PCI_ISR_PFE) == 0)) {		return TRUE;	}	/*no device present, make sure that the master abort bit is reset */	REG_WRITE (PCI_CSR_BASE, PCI_ISR_OFFSET, PCI_ISR_PFE);	return FALSE;}pci_dev_t pci_find_devices (struct pci_device_id * ids, int devNo){	unsigned int i;	unsigned int devdidvid;	unsigned int didvid;	unsigned int vendorId, deviceId;	vendorId = ids->vendor;	deviceId = ids->device;	didvid = ((deviceId << 16) & IXP425_PCI_TOP_WORD_OF_LONG_MASK) |		(vendorId & IXP425_PCI_BOTTOM_WORD_OF_LONG_MASK);	for (i = devNo + 1; i < nDevices; i++) {		pci_read_config_dword (devices[i].device, PCI_CFG_VENDOR_ID,				       &devdidvid);		if (devdidvid == didvid) {			return devices[i].device;		}	}	return -1;}#endif	/* CONFIG_PCI */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产亚洲另类动漫| 日韩中文字幕不卡| 丝袜美腿亚洲色图| 国产精品亚洲专一区二区三区| www.亚洲免费av| 91精品国产色综合久久久蜜香臀| 久久久久久久久久久久久久久99| 中文字幕亚洲区| 国产一区三区三区| 欧美区视频在线观看| 中文字幕精品—区二区四季| 日韩福利电影在线| 日本韩国一区二区| 日本一区免费视频| 麻豆精品一区二区综合av| 欧美网站大全在线观看| 国产精品美女www爽爽爽| 久久er精品视频| 3atv一区二区三区| 一区二区三区不卡视频在线观看| 成人国产精品免费观看动漫| 精品国产一区二区三区久久影院| 亚洲福利视频一区| 色域天天综合网| 一区在线观看视频| 国产99久久久精品| 久久久av毛片精品| 久久99国产精品久久| 91精品久久久久久久91蜜桃| 亚洲综合av网| 一本色道a无线码一区v| 亚洲欧洲精品一区二区精品久久久| 韩国成人福利片在线播放| 91精品国产综合久久福利| 亚洲国产精品麻豆| 欧美精品一卡二卡| 日韩av成人高清| 日韩美女天天操| 久久精品国产77777蜜臀| 欧美欧美欧美欧美| 美脚の诱脚舐め脚责91| 日韩视频在线一区二区| 麻豆91在线观看| 精品国产精品网麻豆系列| 久久99日本精品| 国产欧美综合在线观看第十页| 国产伦精品一区二区三区免费迷 | 欧美激情一区二区三区不卡| 狂野欧美性猛交blacked| 91精品久久久久久久91蜜桃| 毛片av一区二区| 精品久久久久久久人人人人传媒 | 欧美亚洲一区三区| 亚洲综合一二三区| 91精品国产综合久久精品app| 日本午夜精品一区二区三区电影 | 天天操天天干天天综合网| 欧美日韩免费观看一区三区| 日韩av高清在线观看| 日韩视频国产视频| 国产成人激情av| 亚洲精品乱码久久久久久黑人 | 成人精品gif动图一区| 国产免费成人在线视频| 日本韩国欧美国产| 久久国产人妖系列| 18欧美亚洲精品| 日韩三级免费观看| 成人看片黄a免费看在线| 亚洲人吸女人奶水| 日韩视频永久免费| 成人黄色网址在线观看| 日韩和欧美一区二区三区| 国产欧美日韩精品a在线观看| 91国内精品野花午夜精品| 蜜桃视频在线一区| 综合网在线视频| 亚洲精品一区二区三区影院| 99精品久久久久久| 极品少妇xxxx精品少妇| 亚洲欧美日韩国产一区二区三区| 国产精品素人一区二区| 色婷婷综合五月| 国产精品1区二区.| 天天影视涩香欲综合网| 中文字幕一区在线观看| 精品久久免费看| 欧美高清激情brazzers| 91免费国产在线观看| 国内外精品视频| 日韩综合在线视频| 亚洲婷婷在线视频| 国产欧美一区二区在线观看| 日韩限制级电影在线观看| 色88888久久久久久影院按摩| 国产精品一区二区三区网站| 亚洲va欧美va人人爽| 《视频一区视频二区| 国产夜色精品一区二区av| 日韩三级精品电影久久久| 欧美伦理影视网| 精品视频1区2区3区| 色狠狠综合天天综合综合| 成人av在线电影| 成人精品电影在线观看| 国产精品一色哟哟哟| 精品中文字幕一区二区小辣椒| 亚洲h在线观看| 亚洲电影视频在线| 亚洲成人资源网| 亚洲成人黄色小说| 一区二区三区四区不卡视频| 亚洲男同性视频| 日韩一区日韩二区| 亚洲精品一卡二卡| 亚洲一区二区av在线| 亚洲国产日韩av| 午夜激情综合网| 丝袜诱惑亚洲看片| 另类欧美日韩国产在线| 狠狠色2019综合网| 国产精品一区二区三区网站| 国产成人精品影院| 国产成人在线视频网站| 成人短视频下载| 91丨九色丨蝌蚪富婆spa| 一本久道中文字幕精品亚洲嫩| 91蝌蚪porny| 在线观看亚洲a| 666欧美在线视频| 精品国产区一区| 久久美女艺术照精彩视频福利播放 | 精品午夜一区二区三区在线观看| 免费观看在线综合色| 另类的小说在线视频另类成人小视频在线 | 亚洲成人激情自拍| 日韩黄色片在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 国产成人精品aa毛片| 91在线视频观看| 欧美二区在线观看| 久久婷婷色综合| 亚洲另类在线制服丝袜| 亚洲成av人片www| 国产在线一区二区综合免费视频| 国产91在线|亚洲| 色综合色综合色综合| 欧美一区三区四区| 日本一区二区视频在线观看| 亚洲自拍与偷拍| 国产精品一区二区视频| 在线观看免费一区| 久久久99精品久久| 亚洲电影中文字幕在线观看| 国产一区二区三区香蕉| 99久久er热在这里只有精品15| 欧美精品久久天天躁| 国产亚洲综合av| 午夜精品在线看| av一本久道久久综合久久鬼色| 欧美午夜寂寞影院| 久久久蜜臀国产一区二区| 亚洲一区二区在线观看视频| 国产在线不卡一区| 欧美图区在线视频| 国产精品久久久久精k8 | 日韩女优视频免费观看| 亚洲欧美自拍偷拍色图| 青娱乐精品视频在线| 波多野结衣中文一区| 日韩一区二区在线看| 亚洲精品你懂的| 国产成人在线网站| 欧美成人国产一区二区| 亚洲第一成人在线| 91天堂素人约啪| 国产精品区一区二区三区| 五月激情综合网| 色婷婷精品大视频在线蜜桃视频| 久久综合精品国产一区二区三区| 亚洲妇熟xx妇色黄| 91无套直看片红桃| 久久精品夜夜夜夜久久| 免费成人在线影院| 欧美日韩日本视频| 亚洲一二三四久久| 一本一道综合狠狠老| 国产精品成人免费| 国产精品自拍毛片| 久久久久久久网| 国产精品亚洲人在线观看| 日韩精品一区二区三区swag | 精品1区2区3区| 一区二区三区精品视频| aaa亚洲精品一二三区| 国产精品色一区二区三区| 国产不卡一区视频| 国产欧美精品一区| 盗摄精品av一区二区三区| 国产亚洲美州欧州综合国|