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

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

?? misc-spruce.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* * arch/ppc/boot/spruce/misc.c * * Misc. bootloader code for IBM Spruce reference platform * * Authors: Johnnie Peters <jpeters@mvista.com> *	    Matt Porter <mporter@mvista.com> * * Derived from arch/ppc/boot/prep/misc.c * * 2000-2001 (c) MontaVista, Software, Inc.  This file is licensed under * the terms of the GNU General Public License version 2.  This program * is licensed "as is" without any warranty of any kind, whether express * or implied. */#include <linux/types.h>#include <linux/config.h>#include <linux/pci.h>#include <asm/bootinfo.h>extern unsigned long decompress_kernel(unsigned long load_addr, int num_words,				       unsigned long cksum);/* Define some important locations of the Spruce. */#define SPRUCE_PCI_CONFIG_ADDR	0xfec00000#define SPRUCE_PCI_CONFIG_DATA	0xfec00004#define SPRUCE_ISA_IO_BASE	0xf8000000/* PCI configuration space access routines. */unsigned int *pci_config_address = (unsigned int *)SPRUCE_PCI_CONFIG_ADDR;unsigned char *pci_config_data   = (unsigned char *)SPRUCE_PCI_CONFIG_DATA;void cpc700_pcibios_read_config_byte(unsigned char bus, unsigned char dev_fn,			     unsigned char offset, unsigned char *val){	out_le32(pci_config_address,		 (((bus & 0xff)<<16) | (dev_fn<<8) | (offset&0xfc) | 0x80000000));	*val= (in_le32((unsigned *)pci_config_data) >> (8 * (offset & 3))) & 0xff;}void cpc700_pcibios_write_config_byte(unsigned char bus, unsigned char dev_fn,			     unsigned char offset, unsigned char val){	out_le32(pci_config_address,		 (((bus & 0xff)<<16) | (dev_fn<<8) | (offset&0xfc) | 0x80000000));	out_8(pci_config_data + (offset&3), val);}void cpc700_pcibios_read_config_word(unsigned char bus, unsigned char dev_fn,			     unsigned char offset, unsigned short *val){	out_le32(pci_config_address,		 (((bus & 0xff)<<16) | (dev_fn<<8) | (offset&0xfc) | 0x80000000));	*val= in_le16((unsigned short *)(pci_config_data + (offset&3)));}void cpc700_pcibios_write_config_word(unsigned char bus, unsigned char dev_fn,			     unsigned char offset, unsigned short val){	out_le32(pci_config_address,		 (((bus & 0xff)<<16) | (dev_fn<<8) | (offset&0xfc) | 0x80000000));	out_le16((unsigned short *)(pci_config_data + (offset&3)), val);}void cpc700_pcibios_read_config_dword(unsigned char bus, unsigned char dev_fn,			     unsigned char offset, unsigned int *val){	out_le32(pci_config_address,		 (((bus & 0xff)<<16) | (dev_fn<<8) | (offset&0xfc) | 0x80000000));	*val= in_le32((unsigned *)pci_config_data);}void cpc700_pcibios_write_config_dword(unsigned char bus, unsigned char dev_fn,			     unsigned char offset, unsigned int val){	out_le32(pci_config_address,		 (((bus & 0xff)<<16) | (dev_fn<<8) | (offset&0xfc) | 0x80000000));	out_le32((unsigned *)pci_config_data, val);}unsigned long isa_io_base = SPRUCE_ISA_IO_BASE;#define PCNET32_WIO_RDP		0x10#define PCNET32_WIO_RAP		0x12#define PCNET32_WIO_RESET	0x14#define PCNET32_DWIO_RDP	0x10#define PCNET32_DWIO_RAP	0x14#define PCNET32_DWIO_RESET	0x18/* Processor interface config register access */#define PIFCFGADDR 0xff500000#define PIFCFGDATA 0xff500004#define PLBMIFOPT 0x18 /* PLB Master Interface Options */#define MEM_MBEN	0x24#define MEM_TYPE	0x28#define MEM_B1SA	0x3c#define MEM_B1EA	0x5c#define MEM_B2SA	0x40#define MEM_B2EA	0x60unsigned longget_mem_size(void){	int loop;	unsigned long mem_size = 0;	unsigned long mem_mben;	unsigned long mem_type;	unsigned long mem_start;	unsigned long mem_end;	volatile int *mem_addr = (int *)0xff500008;	volatile int *mem_data = (int *)0xff50000c;	/* Get the size of memory from the memory controller. */	*mem_addr = MEM_MBEN;	asm("sync");	mem_mben = *mem_data;	asm("sync");	for(loop = 0; loop < 1000; loop++);	*mem_addr = MEM_TYPE;	asm("sync");	mem_type = *mem_data;	asm("sync");	for(loop = 0; loop < 1000; loop++);	*mem_addr = MEM_TYPE;	/* Confirm bank 1 has DRAM memory */	if ((mem_mben & 0x40000000) &&				((mem_type & 0x30000000) == 0x10000000)) {		*mem_addr = MEM_B1SA;		asm("sync");		mem_start = *mem_data;		asm("sync");		for(loop = 0; loop < 1000; loop++);		*mem_addr = MEM_B1EA;		asm("sync");		mem_end = *mem_data;		asm("sync");		for(loop = 0; loop < 1000; loop++);		mem_size = mem_end - mem_start + 0x100000;	}	/* Confirm bank 2 has DRAM memory */	if ((mem_mben & 0x20000000) &&				((mem_type & 0xc000000) == 0x4000000)) {		*mem_addr = MEM_B2SA;		asm("sync");		mem_start = *mem_data;		asm("sync");		for(loop = 0; loop < 1000; loop++);		*mem_addr = MEM_B2EA;		asm("sync");		mem_end = *mem_data;		asm("sync");		for(loop = 0; loop < 1000; loop++);		mem_size += mem_end - mem_start + 0x100000;	}	return mem_size;}unsigned longload_kernel(unsigned long load_addr, int num_words, unsigned long cksum,		void *ign1, void *ign2){	int csr0;	int csr_id;	int pci_devfn;	int found_multi = 0;	unsigned short vendor;	unsigned short device;	unsigned short command;	unsigned char header_type;	unsigned int bar0;	volatile int *pif_addr = (int *)0xff500000;	volatile int *pif_data = (int *)0xff500004;	/*	 * Gah, these firmware guys need to learn that hardware	 * byte swapping is evil! Disable all hardware byte	 * swapping so it doesn't hurt anyone.	 */	*pif_addr = PLBMIFOPT;	asm("sync");	*pif_data = 0x00000000;	asm("sync");	/* Search out and turn off the PcNet ethernet boot device. */	for (pci_devfn = 1; pci_devfn < 0xff; pci_devfn++) {		if (PCI_FUNC(pci_devfn) && !found_multi)			continue;		cpc700_pcibios_read_config_byte(0, pci_devfn,				PCI_HEADER_TYPE, &header_type);		if (!PCI_FUNC(pci_devfn))			found_multi = header_type & 0x80;		cpc700_pcibios_read_config_word(0, pci_devfn, PCI_VENDOR_ID,				&vendor);		if (vendor != 0xffff) {			cpc700_pcibios_read_config_word(0, pci_devfn,						PCI_DEVICE_ID, &device);			/* If this PCI device is the Lance PCNet board then turn it off */			if ((vendor == PCI_VENDOR_ID_AMD) &&					(device == PCI_DEVICE_ID_AMD_LANCE)) {				/* Turn on I/O Space on the board. */				cpc700_pcibios_read_config_word(0, pci_devfn,						PCI_COMMAND, &command);				command |= 0x1;				cpc700_pcibios_write_config_word(0, pci_devfn,						PCI_COMMAND, command);				/* Get the I/O space address */				cpc700_pcibios_read_config_dword(0, pci_devfn,						PCI_BASE_ADDRESS_0, &bar0);				bar0 &= 0xfffffffe;				/* Reset the PCNet Board */				inl (bar0+PCNET32_DWIO_RESET);				inw (bar0+PCNET32_WIO_RESET);				/* First do a work oriented read of csr0.  If the value is				 * 4 then this is the correct mode to access the board.				 * If not try a double word ortiented read.				 */				outw(0, bar0 + PCNET32_WIO_RAP);				csr0 = inw(bar0 + PCNET32_WIO_RDP);				if (csr0 == 4) {					/* Check the Chip id register */					outw(88, bar0 + PCNET32_WIO_RAP);					csr_id = inw(bar0 + PCNET32_WIO_RDP);					if (csr_id) {						/* This is the valid mode - set the stop bit */						outw(0, bar0 + PCNET32_WIO_RAP);						outw(csr0, bar0 + PCNET32_WIO_RDP);					}				} else {					outl(0, bar0 + PCNET32_DWIO_RAP);					csr0 = inl(bar0 + PCNET32_DWIO_RDP);					if (csr0 == 4) {						/* Check the Chip id register */						outl(88, bar0 + PCNET32_WIO_RAP);						csr_id = inl(bar0 + PCNET32_WIO_RDP);						if (csr_id) {							/* This is the valid mode  - set the stop bit*/							outl(0, bar0 + PCNET32_WIO_RAP);							outl(csr0, bar0 + PCNET32_WIO_RDP);						}					}				}			}		}	}	return decompress_kernel(load_addr, num_words, cksum);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区高清在线| 美国精品在线观看| 久久综合色一综合色88| 91在线porny国产在线看| 日韩高清一级片| 亚洲欧美国产毛片在线| 久久久一区二区三区捆绑**| 欧美性猛交xxxx黑人交| 色88888久久久久久影院按摩 | 不卡一区在线观看| 久久99精品国产91久久来源| 亚洲高清视频中文字幕| 日韩一区日韩二区| 久久久久久久久久看片| 日韩一级片网站| 欧美日韩免费视频| 色中色一区二区| 粉嫩aⅴ一区二区三区四区| 久久精品久久久精品美女| 亚洲一区二区三区四区在线观看| 国产欧美精品一区二区色综合朱莉 | 久久精品一级爱片| 欧美精品高清视频| 欧美综合天天夜夜久久| 波波电影院一区二区三区| 激情欧美日韩一区二区| 蜜桃传媒麻豆第一区在线观看| 亚洲激情图片小说视频| 亚洲女女做受ⅹxx高潮| 国产精品成人免费| 国产欧美视频在线观看| 精品国产凹凸成av人导航| 欧美一区二区三区四区在线观看 | 国产日韩三级在线| 久久午夜国产精品| 久久久久免费观看| 久久综合五月天婷婷伊人| www欧美成人18+| 久久网这里都是精品| 国产欧美日韩精品一区| 欧美高清在线一区| 最好看的中文字幕久久| 日韩理论片在线| 亚洲另类在线视频| 亚洲国产精品嫩草影院| 亚洲不卡av一区二区三区| 亚洲精品国产无套在线观| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲欧美一区二区不卡| 亚洲午夜影视影院在线观看| 亚洲mv大片欧洲mv大片精品| 日日骚欧美日韩| 美女脱光内衣内裤视频久久网站 | 色94色欧美sute亚洲线路一久| 99精品黄色片免费大全| 日本道精品一区二区三区| 欧美午夜精品久久久久久孕妇| 欧美日韩在线不卡| 欧美一区二区三区公司| 精品国产电影一区二区| 中文字幕久久午夜不卡| 亚洲精品免费视频| 日韩精品视频网站| 国产精品18久久久久久久久久久久| 国产不卡视频一区二区三区| 99国产精品久久久久久久久久| 在线中文字幕一区二区| 精品少妇一区二区三区在线视频| 久久久99精品免费观看| 亚洲精品v日韩精品| 免费成人小视频| av电影一区二区| 欧美一区二区三级| 亚洲精品一卡二卡| 国产精品理论在线观看| 久久网站最新地址| 亚洲综合网站在线观看| 久久国产精品第一页| 99免费精品在线| 欧美二区三区的天堂| 国产清纯美女被跳蛋高潮一区二区久久w | 久久久精品国产免费观看同学| 国产精品免费丝袜| 婷婷六月综合网| 成人午夜激情影院| 精品视频在线免费观看| 久久日韩精品一区二区五区| 一区二区三区欧美| 国产一二三精品| 欧美日韩一区二区在线观看视频| 精品国产91久久久久久久妲己 | 自拍偷拍欧美精品| 男女男精品视频| 91原创在线视频| 精品成人一区二区| 亚洲一区二区在线免费观看视频| 国产成人精品三级| 91精品久久久久久蜜臀| 国产精品美女www爽爽爽| 日韩av中文字幕一区二区| 色婷婷国产精品| 国产亚洲女人久久久久毛片| 人妖欧美一区二区| 一本大道久久精品懂色aⅴ| 2020国产成人综合网| 午夜亚洲国产au精品一区二区| 国产999精品久久| 欧美videossexotv100| 有码一区二区三区| 9i看片成人免费高清| 国产亚洲女人久久久久毛片| 老司机精品视频在线| 欧美日韩亚洲国产综合| 亚洲免费伊人电影| 99久久精品免费观看| 国产欧美精品日韩区二区麻豆天美| 美女视频免费一区| 欧美久久久久久久久久| 亚洲黄色在线视频| 91小视频免费看| 国产精品美日韩| 国产成人午夜视频| 精品国产制服丝袜高跟| 日本成人在线不卡视频| 欧美日韩国产系列| 亚洲一区免费在线观看| 91久久国产综合久久| 亚洲天堂中文字幕| 99精品视频在线观看| 中文字幕一区二区不卡| 成人午夜电影久久影院| 国产欧美精品区一区二区三区| 国产九色精品成人porny| 亚洲精品一区二区精华| 久久国产精品99精品国产| 日韩一级完整毛片| 裸体歌舞表演一区二区| 欧美成人一区二区三区片免费| 欧美aaa在线| 精品精品国产高清一毛片一天堂| 另类欧美日韩国产在线| 欧美r级电影在线观看| 国产在线视频一区二区三区| 久久久久97国产精华液好用吗| 国内精品国产成人| 欧美国产精品v| 一本到不卡精品视频在线观看| 一区二区三区在线免费播放| 欧美色区777第一页| 日本欧洲一区二区| 精品第一国产综合精品aⅴ| 国产一区二区在线免费观看| 亚洲国产精品精华液ab| 99re这里只有精品首页| 亚洲一线二线三线视频| 91麻豆精品国产91久久久久久| 精品制服美女丁香| 欧美国产激情二区三区| 色综合天天综合网天天狠天天 | 奇米精品一区二区三区在线观看| 日韩欧美国产综合一区 | 亚洲三级小视频| 欧美日韩国产一级片| 久草热8精品视频在线观看| 久久―日本道色综合久久| 91一区一区三区| 日本色综合中文字幕| 国产日韩欧美在线一区| 色诱视频网站一区| 日韩精品成人一区二区三区| 久久综合久久综合亚洲| 色婷婷综合久色| 久久精品国产秦先生| 国产欧美一区二区在线观看| 欧美丝袜自拍制服另类| 精品一区二区三区在线观看| 最新国产精品久久精品| 在线成人小视频| 成人a区在线观看| 日韩av在线播放中文字幕| 国产精品色哟哟| 欧美日韩国产天堂| 国产一区二区不卡| 亚洲国产成人av好男人在线观看| 精品国产凹凸成av人导航| 在线这里只有精品| 国产精品自拍av| 亚洲高清不卡在线观看| 日本一区二区三区dvd视频在线| 欧美日韩国产美| 成人白浆超碰人人人人| 久久精品国产网站| 亚洲成人tv网| 国产精品乱人伦中文| 日韩三级免费观看| 色欧美乱欧美15图片| 国产盗摄精品一区二区三区在线| 丝瓜av网站精品一区二区| 亚洲色图在线播放| 久久久精品日韩欧美|