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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pci.c

?? nucleus_arm.rar
?? C
字號(hào):
#include <stdio.h>
#include <drivers/pci.h>
#include <support.h>

unsigned char cfg_check = 0xFF;
unsigned char cfg_mech = 0x00;
unsigned char cfg_max = 0x00;

struct pci_cfg pci_list[0x0F] = { };

static unsigned long PCIAddress(int bus, int device, int func, int reg)
{
	return (0x80000000 | ((unsigned long)(bus & 0xFF) << 16) |
              ((unsigned long)(device & 0x1F) << 11) |
              ((unsigned long)(func & 0x07) << 8) | (reg & 0xFC));
}

static char read_dword_register(int bus, int device, int func, int reg,
			unsigned int *lo, unsigned int *hi)
{
	unsigned long value, addr, orig;
	unsigned char oldenable, oldbus;

        if (cfg_mech == 1)
        {
		addr = PCIAddress(bus, device, func, reg);
		orig = inportd(0xCF8);
		outportd(0xCF8, addr);
		value = inportd(0xCFC);
		outportd(0xCF8, orig);
	}
	else
	{
		if (device > 0x0F)
                {
			*lo = 0xFFFF;
			*hi = 0xFFFF;
                        return 0;
		}
		oldenable = inportb(0xCF8);
		oldbus = inportb(0xCFA);
		outportb(0xCFA,bus);
		outportb(0xCF8,0x80);
		addr = (0xC000 | ((device & 0x0F) << 8) | (reg & 0xFF));
		value = inportd(addr);
		outportb(0xCFA,oldbus);
		outportb(0xCF8,oldenable);
	}
	*hi = (value >> 16);
	*lo = (value & 0xFFFF);
	return 1;
}

void write_dword_register(int bus, int device, int func, int reg,
			unsigned int lo, unsigned int hi)
{
	unsigned long value, addr, orig;
	unsigned char oldenable, oldbus;

	value = (((unsigned long)(hi) << 16) | lo);
        if (cfg_mech == 1)
	{
		addr = PCIAddress(bus, device, func, reg);
		orig = inportd(0xCF8);
		outportd(0xCF8,addr);
		outportd(0xCFC,value);
		outportd(0xCF8,orig);
	}
	else
	{
		if (device > 0x0F)
                	return;
		oldenable = inportb(0xCF8);
		oldbus = inportb(0xCFA);
		outportb(0xCFA, bus);
		outportb(0xCF8, 0x80);
		addr = (0xC000 | ((device & 0x0F) << 8) | reg);
		outportd(addr,value);
		outportb(0xCFA, oldbus);
		outportb(0xCF8, oldenable);
	}
}


static struct pci_cfg * read_PCI_config(int bus, int device, int func)
{
	unsigned int hi, lo, i;
	static struct pci_cfg cfg;

	for (i = 0; i < sizeof(struct pci_cfg)/sizeof(unsigned long); i++)
	{
		if (!read_dword_register(bus,device,func,i*sizeof(unsigned long),&lo,&hi))
			return 0;
		((unsigned int *)&cfg)[2*i] = lo;
		((unsigned int *)&cfg)[2*i+1] = hi;
	}
	return &cfg ;
}

char GetSpecialVendor(unsigned int vendor)
{
	int i;

	for (i=0;i<cfg_max;i++)
	{
		if (pci_list[i].vendorID == vendor)
			return 1;
	}
	return 0x00;
}

char GetSpecialDevice(unsigned int vendor, unsigned int device)
{
	int i;

	for (i=0;i<cfg_max;i++)
	{
		if (pci_list[i].vendorID == vendor &&
			pci_list[i].deviceID == device)
			return 1;
	}
	return 0x00;
}

static int dump_PCI_config(int bus, int device, int func, int * is_multifunc)
{
	struct pci_cfg *cfg = read_PCI_config(bus, device, func);

	if (!cfg || cfg->vendorID == 0xFFFF || cfg->deviceID == 0xFFFF)
		return 0;

	if ((cfg->header_type & 0x80) != 0)	// make multi-function flag sticky
		*is_multifunc = 1;		// since some devs only show on func 0
	pci_list[cfg_max] = *cfg;
	cfg_max++;
	return *is_multifunc;
}

void GetPCIList(void)
{
  	int bus, device, func, maxbus;

        cfg_max = 0;
        maxbus = (cfg_mech == 1) ? 15 : 0xFF;
	for (bus = 0; bus <= maxbus; bus++)
	{
		for (device = 0; device < 32; device++)
		{
			for (func = 0; func < 8; func++)
			{
				int multifunc = 0;
				if (!dump_PCI_config(bus,device,func,&multifunc))
					break;
			}
		}
       }
}


typedef struct BIOS32
{
	unsigned long	magic;
	unsigned long	phys_bsd_entry;
	unsigned char	vers;
	unsigned char	prg_lens;
	unsigned char	crc;
} BIOS32;

char check_pci_bios(void)
{
	unsigned long p, bios32_call;
	BIOS32 *x;
	unsigned char flag, crc, tmp;
	int i;

	bios32_call = 0;
 	flag = 0;
	p = 0xA0000;
	while (!flag && p < 0x100000)
	{
		(BIOS32 *)x = (BIOS32 *)(p);
		if (x->magic == 0x5F32335F)		// _32_
		{
			for(i=0, crc=0; i < (x->prg_lens * 16); i++)
			{
				tmp = (*(unsigned char *)(p + i));
				crc += tmp;
			}
			if (crc == 0)
			{
				flag = 1;
				bios32_call = x->phys_bsd_entry;
			}			
		}
		else
			p += 0x10;
	}
	if (flag)
	{
		printf("pci: Found PCI-BIOS at 0x%lX (%04X:%04X)\n\r", (unsigned long)p,
			(unsigned int)((p >> 16) << 12), (unsigned int)(p & 0xFFFF));
		printf("pci: Found PCI-BIOS service at 0x%lX\n\r", bios32_call);
	}
	return flag;
}

char CheckPCI(void)
{
	unsigned long tmp;

	if (cfg_check != 0xFF)
		return cfg_check;
	outportb(0xCFB, 0x01);
	tmp = inportd(0xCF8);
	outportd(0xCF8, 0x80000000);
	if (inportd(0xCF8) == 0x80000000)
		cfg_mech = 1;
	outportd(0xCF8, tmp); // restore register
	if (cfg_mech == 0xFF)
    {
		outportb(0xCFB, 0x00);
		outportb(0xCF8, 0x00);
		outportb(0xCFA, 0x00);
		if ((inportb(0xCF8) == 0x00) && (inportb(0xCFA) == 0x00))
			cfg_mech = 2;
	}
	cfg_check = cfg_mech;
	if (cfg_mech == 0x00)
      	return 0x00;
	GetPCIList();
    return 0x01;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩的一区二区| 国产精品69久久久久水密桃| 日韩丝袜美女视频| 丁香亚洲综合激情啪啪综合| 午夜视频一区在线观看| 国产精品短视频| 久久久久久97三级| 欧美日韩高清在线| 91丝袜国产在线播放| 狠狠色丁香九九婷婷综合五月| 亚洲久本草在线中文字幕| 欧美大度的电影原声| 日本久久一区二区三区| 成人国产视频在线观看| 国内一区二区在线| 蜜臀久久99精品久久久久宅男 | 91在线国内视频| 日韩高清一区二区| 国产精品电影一区二区三区| 久久欧美一区二区| 日韩三级视频中文字幕| 欧美亚洲禁片免费| 色94色欧美sute亚洲13| 成人动漫av在线| 国产福利91精品一区| 激情文学综合丁香| 精品一区二区综合| 久久电影网电视剧免费观看| 日韩av一区二| 亚洲制服欧美中文字幕中文字幕| 综合欧美一区二区三区| 国产精品区一区二区三| 国产视频视频一区| 国产女主播一区| 欧美激情综合五月色丁香| 国产亚洲一区二区在线观看| 国产午夜三级一区二区三| 欧美私人免费视频| 不卡一区二区中文字幕| 成人性生交大片免费看在线播放| 国产在线国偷精品产拍免费yy| 日韩高清电影一区| 青青草一区二区三区| 久久国产综合精品| 国产一区高清在线| 国产黄人亚洲片| 成人av在线一区二区| 色综合天天狠狠| 欧美性猛片aaaaaaa做受| 欧美日韩一卡二卡三卡 | 国产一区二区三区四区五区入口| 免费成人小视频| 国产精品亚洲视频| 懂色av中文字幕一区二区三区| 成人avav影音| 日本精品一级二级| 99精品偷自拍| 2023国产精品| 国产网红主播福利一区二区| 久久毛片高清国产| 日韩理论在线观看| 午夜精品久久久久久久99樱桃| 日韩av一区二区三区四区| 国产精品自产自拍| 97久久超碰国产精品电影| 欧美在线一二三四区| 日韩亚洲欧美综合| 久久女同精品一区二区| 亚洲免费毛片网站| 日本va欧美va精品| 国产成人一级电影| 欧美色涩在线第一页| 精品99一区二区| 亚洲免费av在线| 裸体歌舞表演一区二区| 91农村精品一区二区在线| 制服丝袜成人动漫| 欧美韩日一区二区三区四区| 亚洲一区二区三区四区在线免费观看| 免费在线一区观看| www.欧美色图| 日韩片之四级片| 亚洲精品成人a在线观看| 色综合久久久久久久久久久| 91成人免费网站| 欧美一二三在线| 欧美国产一区二区| 婷婷久久综合九色综合伊人色| 国产一区二区三区免费观看| 色偷偷久久人人79超碰人人澡 | 欧美大片免费久久精品三p| 欧美国产一区二区在线观看| 日韩精品亚洲一区| 99re热这里只有精品免费视频| 日韩欧美一级特黄在线播放| 亚洲免费视频成人| 国产精品一区二区三区四区| 欧美久久久影院| 日韩美女视频一区| 国产盗摄女厕一区二区三区| 7777女厕盗摄久久久| 亚洲日穴在线视频| 国产凹凸在线观看一区二区| 91精品国产日韩91久久久久久| 亚洲日本丝袜连裤袜办公室| 国产一本一道久久香蕉| 91精品国产综合久久久蜜臀粉嫩| 亚洲三级电影网站| av不卡免费电影| 91国内精品野花午夜精品| 欧美日韩免费高清一区色橹橹| 国产精品私人影院| 国精产品一区一区三区mba桃花| 欧美视频在线观看一区| 中日韩免费视频中文字幕| 国内精品伊人久久久久av影院 | 久久精品一区二区| 青青草视频一区| 欧美精三区欧美精三区| 亚洲欧美日韩系列| 成人高清免费在线播放| 久久久激情视频| 国产剧情一区二区| 久久综合999| 国产精品一卡二卡| 精品国产百合女同互慰| 精品在线一区二区三区| 精品久久五月天| 美女一区二区视频| 日韩视频在线永久播放| 青草国产精品久久久久久| 5566中文字幕一区二区电影 | 日本aⅴ亚洲精品中文乱码| 日韩精品最新网址| 日韩精品欧美精品| 欧美日韩亚洲不卡| 亚洲国产毛片aaaaa无费看| 欧美亚洲综合另类| 亚洲一区二区偷拍精品| 在线观看视频一区| 夜夜嗨av一区二区三区| 欧美精品久久久久久久多人混战| 三级成人在线视频| 日韩一区二区三区视频在线观看 | 久久99精品国产.久久久久久| 日韩一区二区三区精品视频| 精品制服美女丁香| 久久久国产精品麻豆| www.亚洲精品| 亚洲影院理伦片| 日韩一级大片在线观看| 国产成人免费网站| 中文字幕亚洲成人| 欧美日韩在线播| 久久精品理论片| 国产婷婷一区二区| 色综合天天综合色综合av | 国模一区二区三区白浆| 久久久久久久网| 亚洲视频综合在线| 久久久www成人免费毛片麻豆| 国产最新精品免费| 国产精品欧美久久久久无广告| 99国产精品久久| 亚洲sss视频在线视频| 欧美一级电影网站| 成人免费看视频| 亚洲精品v日韩精品| 日韩无一区二区| av不卡在线播放| 日韩激情一区二区| 久久久久久久久一| 色88888久久久久久影院野外| 美女网站在线免费欧美精品| 欧美激情在线观看视频免费| 欧美自拍偷拍一区| 精品一区二区三区免费观看| |精品福利一区二区三区| 欧美浪妇xxxx高跟鞋交| 成人性视频网站| 日本亚洲三级在线| 国产精品嫩草影院com| 777欧美精品| 北条麻妃国产九九精品视频| 午夜免费久久看| 国产精品久久久久一区| 日韩欧美国产午夜精品| 91蜜桃婷婷狠狠久久综合9色| 麻豆精品久久精品色综合| 亚洲免费看黄网站| 国产亚洲成aⅴ人片在线观看| 在线精品视频免费播放| 日韩欧美中文一区| 国产一区二区三区观看| 一区二区三区日韩欧美| 久久精品夜夜夜夜久久| 欧美久久婷婷综合色| 99re这里只有精品首页| 精品一区二区免费在线观看| 国产乱码精品一品二品|