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

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

?? pciehp_pci.c

?? Linux Kernel 2.6.9 for OMAP1710
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * PCI Express Hot Plug Controller Driver * * Copyright (C) 1995,2001 Compaq Computer Corporation * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com) * Copyright (C) 2001 IBM Corp. * Copyright (C) 2003-2004 Intel Corporation * * All rights reserved. * * 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, GOOD TITLE or * NON INFRINGEMENT.  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., 675 Mass Ave, Cambridge, MA 02139, USA. * * Send feedback to <greg@kroah.com>, <dely.l.sy@intel.com> * */#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/slab.h>#include <linux/workqueue.h>#include <linux/proc_fs.h>#include <linux/pci.h>#include "../pci.h"#include "pciehp.h"#ifndef CONFIG_IA64#include "../../../arch/i386/pci/pci.h"    /* horrible hack showing how processor dependant we are... */#endifint pciehp_configure_device (struct controller* ctrl, struct pci_func* func)  {	unsigned char bus;	struct pci_bus *child;	int num;	if (func->pci_dev == NULL)		func->pci_dev = pci_find_slot(func->bus, PCI_DEVFN(func->device, func->function));	/* Still NULL ? Well then scan for it ! */	if (func->pci_dev == NULL) {		dbg("%s: pci_dev still null. do pci_scan_slot\n", __FUNCTION__);		num = pci_scan_slot(ctrl->pci_dev->subordinate, PCI_DEVFN(func->device, func->function));		if (num)			pci_bus_add_devices(ctrl->pci_dev->subordinate);				func->pci_dev = pci_find_slot(func->bus, PCI_DEVFN(func->device, func->function));		if (func->pci_dev == NULL) {			dbg("ERROR: pci_dev still null\n");			return 0;		}	}	if (func->pci_dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {		pci_read_config_byte(func->pci_dev, PCI_SECONDARY_BUS, &bus);		child = pci_add_new_bus(func->pci_dev->bus, (func->pci_dev), bus);		pci_do_scan_bus(child);	}	return 0;}int pciehp_unconfigure_device(struct pci_func* func) {	int rc = 0;	int j;	dbg("%s: bus/dev/func = %x/%x/%x\n", __FUNCTION__, func->bus,				func->device, func->function);	for (j=0; j<8 ; j++) {		struct pci_dev* temp = pci_find_slot(func->bus,				(func->device << 3) | j);		if (temp) {			pci_remove_bus_device(temp);		}	}	return rc;}/* * pciehp_set_irq * * @bus_num: bus number of PCI device * @dev_num: device number of PCI device * @slot: pointer to u8 where slot number will be returned */int pciehp_set_irq (u8 bus_num, u8 dev_num, u8 int_pin, u8 irq_num){#if defined(CONFIG_X86) && !defined(CONFIG_X86_IO_APIC) && !defined(CONFIG_X86_64)	int rc;	u16 temp_word;	struct pci_dev fakedev;	struct pci_bus fakebus;	fakedev.devfn = dev_num << 3;	fakedev.bus = &fakebus;	fakebus.number = bus_num;	dbg("%s: dev %d, bus %d, pin %d, num %d\n",	    __FUNCTION__, dev_num, bus_num, int_pin, irq_num);	rc = pcibios_set_irq_routing(&fakedev, int_pin - 0x0a, irq_num);	dbg("%s: rc %d\n", __FUNCTION__, rc);	if (!rc)		return !rc;	/* set the Edge Level Control Register (ELCR) */	temp_word = inb(0x4d0);	temp_word |= inb(0x4d1) << 8;	temp_word |= 0x01 << irq_num;	/* This should only be for x86 as it sets the Edge Level Control Register */	outb((u8) (temp_word & 0xFF), 0x4d0);	outb((u8) ((temp_word & 0xFF00) >> 8), 0x4d1);#endif	return 0;}/* More PCI configuration routines; this time centered around hotplug controller *//* * pciehp_save_config * * Reads configuration for all slots in a PCI bus and saves info. * * Note:  For non-hot plug busses, the slot # saved is the device # * * returns 0 if success */int pciehp_save_config(struct controller *ctrl, int busnumber, int num_ctlr_slots, int first_device_num){	int rc;	u8 class_code;	u8 header_type;	u32 ID;	u8 secondary_bus;	struct pci_func *new_slot;	int sub_bus;	int max_functions;	int function;	u8 DevError;	int device = 0;	int cloop = 0;	int stop_it;	int index;	int is_hot_plug = num_ctlr_slots || first_device_num;	struct pci_bus lpci_bus, *pci_bus;	int FirstSupported, LastSupported;	dbg("%s: Enter\n", __FUNCTION__);	memcpy(&lpci_bus, ctrl->pci_dev->subordinate, sizeof(lpci_bus));	pci_bus = &lpci_bus;	dbg("%s: num_ctlr_slots = %d, first_device_num = %d\n", __FUNCTION__,				num_ctlr_slots, first_device_num);	/*   Decide which slots are supported */	if (is_hot_plug) {		/*********************************		 *  is_hot_plug is the slot mask		 *********************************/		FirstSupported = first_device_num;		LastSupported = FirstSupported + num_ctlr_slots - 1;	} else {		FirstSupported = 0;		LastSupported = 0x1F;	}	dbg("FirstSupported = %d, LastSupported = %d\n", FirstSupported,					LastSupported);	/*   Save PCI configuration space for all devices in supported slots */	dbg("%s: pci_bus->number = %x\n", __FUNCTION__, pci_bus->number);	pci_bus->number = busnumber;	dbg("%s: bus = %x, dev = %x\n", __FUNCTION__, busnumber, device);	for (device = FirstSupported; device <= LastSupported; device++) {		ID = 0xFFFFFFFF;		rc = pci_bus_read_config_dword(pci_bus, PCI_DEVFN(device, 0),					PCI_VENDOR_ID, &ID);		if (ID != 0xFFFFFFFF) {	  /*  device in slot */			dbg("%s: ID = %x\n", __FUNCTION__, ID);			rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0),					0x0B, &class_code);			if (rc)				return rc;			rc = pci_bus_read_config_byte(pci_bus, PCI_DEVFN(device, 0),					PCI_HEADER_TYPE, &header_type);			if (rc)				return rc;			dbg("class_code = %x, header_type = %x\n", class_code, header_type);			/* If multi-function device, set max_functions to 8 */			if (header_type & 0x80)				max_functions = 8;			else				max_functions = 1;			function = 0;			do {				DevError = 0;				dbg("%s: In do loop\n", __FUNCTION__);				if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) {   /* P-P Bridge */					/* Recurse the subordinate bus					 * get the subordinate bus number					 */					rc = pci_bus_read_config_byte(pci_bus,						PCI_DEVFN(device, function), 						PCI_SECONDARY_BUS, &secondary_bus);					if (rc) {						return rc;					} else {						sub_bus = (int) secondary_bus;						/* Save secondary bus cfg spc with this recursive call. */						rc = pciehp_save_config(ctrl, sub_bus, 0, 0);						if (rc)							return rc;					}				}				index = 0;				new_slot = pciehp_slot_find(busnumber, device, index++);				dbg("%s: new_slot = %p bus %x dev %x fun %x\n",				__FUNCTION__, new_slot, busnumber, device, index-1);				while (new_slot && (new_slot->function != (u8) function)) {					new_slot = pciehp_slot_find(busnumber, device, index++);					dbg("%s: while loop, new_slot = %p bus %x dev %x fun %x\n",					__FUNCTION__, new_slot, busnumber, device, index-1);				}				if (!new_slot) {					/* Setup slot structure. */					new_slot = pciehp_slot_create(busnumber);					dbg("%s: if, new_slot = %p bus %x dev %x fun %x\n",					__FUNCTION__, new_slot, busnumber, device, function);					if (new_slot == NULL)						return(1);				}				new_slot->bus = (u8) busnumber;				new_slot->device = (u8) device;				new_slot->function = (u8) function;				new_slot->is_a_board = 1;				new_slot->switch_save = 0x10;				/* In case of unsupported board */				new_slot->status = DevError;				new_slot->pci_dev = pci_find_slot(new_slot->bus,					(new_slot->device << 3) | new_slot->function);				dbg("new_slot->pci_dev = %p\n", new_slot->pci_dev);				for (cloop = 0; cloop < 0x20; cloop++) {					rc = pci_bus_read_config_dword(pci_bus,						PCI_DEVFN(device, function),						cloop << 2, 						(u32 *) &(new_slot->config_space [cloop]));					/* dbg("new_slot->config_space[%x] = %x\n",						cloop, new_slot->config_space[cloop]); */					if (rc)						return rc;				}				function++;				stop_it = 0;				/*  this loop skips to the next present function				 *  reading in Class Code and Header type.				 */				while ((function < max_functions)&&(!stop_it)) {					dbg("%s: In while loop \n", __FUNCTION__);					rc = pci_bus_read_config_dword(pci_bus,							PCI_DEVFN(device, function),							PCI_VENDOR_ID, &ID);					if (ID == 0xFFFFFFFF) {  /* nothing there. */						function++;						dbg("Nothing there\n");					} else {  /* Something there */						rc = pci_bus_read_config_byte(pci_bus,							PCI_DEVFN(device, function),							0x0B, &class_code);						if (rc)							return rc;						rc = pci_bus_read_config_byte(pci_bus,							PCI_DEVFN(device, function),							PCI_HEADER_TYPE, &header_type);						if (rc)							return rc;						dbg("class_code = %x, header_type = %x\n", class_code, header_type);						stop_it++;					}				}			} while (function < max_functions);			/* End of IF (device in slot?) */		} else if (is_hot_plug) {			/* Setup slot structure with entry for empty slot */			new_slot = pciehp_slot_create(busnumber);			if (new_slot == NULL) {				return(1);			}			dbg("new_slot = %p, bus = %x, dev = %x, fun = %x\n", new_slot,				new_slot->bus, new_slot->device, new_slot->function);			new_slot->bus = (u8) busnumber;			new_slot->device = (u8) device;			new_slot->function = 0;			new_slot->is_a_board = 0;			new_slot->presence_save = 0;			new_slot->switch_save = 0;		}	} 			/* End of FOR loop */	dbg("%s: Exit\n", __FUNCTION__);	return(0);}/* * pciehp_save_slot_config * * Saves configuration info for all PCI devices in a given slot * including subordinate busses. * * returns 0 if success */int pciehp_save_slot_config(struct controller *ctrl, struct pci_func * new_slot){	int rc;	u8 class_code;	u8 header_type;	u32 ID;	u8 secondary_bus;	int sub_bus;	int max_functions;	int function;	int cloop = 0;	int stop_it;	struct pci_bus lpci_bus, *pci_bus;	memcpy(&lpci_bus, ctrl->pci_dev->subordinate, sizeof(lpci_bus));	pci_bus = &lpci_bus;	pci_bus->number = new_slot->bus;	ID = 0xFFFFFFFF;	pci_bus_read_config_dword(pci_bus, PCI_DEVFN(new_slot->device, 0),					PCI_VENDOR_ID, &ID);	if (ID != 0xFFFFFFFF) {	  /*  device in slot */		pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0),					0x0B, &class_code);		pci_bus_read_config_byte(pci_bus, PCI_DEVFN(new_slot->device, 0),					PCI_HEADER_TYPE, &header_type);		if (header_type & 0x80)	/* Multi-function device */			max_functions = 8;		else			max_functions = 1;		function = 0;		do {			if ((header_type & 0x7F) == PCI_HEADER_TYPE_BRIDGE) {	  /* PCI-PCI Bridge */				/*  Recurse the subordinate bus */				pci_bus_read_config_byte(pci_bus,					PCI_DEVFN(new_slot->device, function), 					PCI_SECONDARY_BUS, &secondary_bus);				sub_bus = (int) secondary_bus;				/* Save the config headers for the secondary bus. */				rc = pciehp_save_config(ctrl, sub_bus, 0, 0);				if (rc)					return rc;			}	/* End of IF */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀久久99精品久久久画质超高清| 99久久99久久精品免费看蜜桃| 欧美久久高跟鞋激| 亚洲免费观看高清完整版在线| 美女任你摸久久| 欧美成人一区二区三区片免费| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品你懂的| 成人一道本在线| 亚洲欧洲精品成人久久奇米网| 国产老妇另类xxxxx| 久久久久国产精品麻豆| 国产999精品久久久久久| 国产精品嫩草久久久久| 91高清在线观看| 蜜桃视频在线一区| 国产日韩欧美精品电影三级在线| 国产成人啪免费观看软件| 国产精品天干天干在观线| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲欧洲综合另类在线| 欧美性高清videossexo| 黄页网站大全一区二区| 中文字幕一区二区日韩精品绯色| 91麻豆福利精品推荐| 奇米精品一区二区三区四区 | 91精品国产91综合久久蜜臀| 久久99国产精品久久99果冻传媒| 国产视频视频一区| 欧美视频中文字幕| 成人免费视频视频在线观看免费| 一区二区三区四区乱视频| 日韩欧美激情一区| av中文字幕亚洲| 国产精品综合一区二区三区| 亚洲欧美日韩中文播放| 日韩精品最新网址| 欧美日韩中文字幕精品| 国产91精品久久久久久久网曝门 | 国产呦萝稀缺另类资源| 亚洲制服丝袜一区| 一区二区三区四区在线免费观看 | 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91偷拍与自偷拍精品| 精品一区二区综合| 日韩精品国产精品| 一区二区成人在线视频| 中文字幕在线不卡国产视频| 欧美电影免费观看高清完整版在线| 色噜噜狠狠色综合欧洲selulu| 成人av在线播放网址| 国产精品亚洲专一区二区三区| 久久精品国产澳门| 麻豆freexxxx性91精品| 婷婷激情综合网| 免费在线观看一区| 激情综合色综合久久综合| 久久精品国产一区二区三 | 成人欧美一区二区三区1314| 久久久美女毛片| 中文字幕制服丝袜一区二区三区 | 一区二区三区精品在线观看| 中文字幕亚洲在| 亚洲一区二区三区激情| 日韩av不卡在线观看| 国产麻豆一精品一av一免费 | 成人性色生活片免费看爆迷你毛片| 成人丝袜高跟foot| 色婷婷综合久久久久中文| 欧美日韩国产影片| 国产丝袜美腿一区二区三区| 欧美激情一区二区三区蜜桃视频| 中文字幕一区二区三区在线不卡| 亚洲欧美日韩综合aⅴ视频| 天堂久久一区二区三区| 国内外精品视频| 欧亚一区二区三区| 久久综合狠狠综合久久综合88| 日本一区二区动态图| 亚洲大片精品永久免费| 国产精品1024| 欧美精品自拍偷拍| 亚洲免费高清视频在线| 国内国产精品久久| 欧美一级片在线看| 一区二区欧美精品| 国产999精品久久久久久绿帽| 91精品国产综合久久蜜臀| 中文字幕亚洲区| 国产精品一二三在| 欧美一区二区观看视频| 亚洲一区中文日韩| 99精品国产91久久久久久| 久久久噜噜噜久久人人看 | 亚洲三级在线免费观看| 久久久不卡影院| 夜夜嗨av一区二区三区中文字幕 | 成人aa视频在线观看| 欧美mv日韩mv亚洲| 日日欢夜夜爽一区| 欧美三级乱人伦电影| 亚洲毛片av在线| 欧美日韩精品一区二区三区四区| 中文字幕制服丝袜成人av | 亚洲伊人伊色伊影伊综合网| 国产精品1024久久| 国产精品电影一区二区| 国产精品一二三四五| 91精品国产品国语在线不卡| 青青草97国产精品免费观看 | 日韩精品免费视频人成| 7777精品伊人久久久大香线蕉| 亚洲成人av一区二区三区| 欧美二区乱c少妇| 九九**精品视频免费播放| 2019国产精品| 色综合久久六月婷婷中文字幕| 亚洲亚洲人成综合网络| 欧美电影免费观看高清完整版在 | 欧美日韩在线三区| 久久激情五月婷婷| 国产精品毛片久久久久久| 欧美色综合网站| 国产自产高清不卡| 亚洲乱码国产乱码精品精的特点| 欧美日韩在线直播| 成人美女视频在线观看| 亚洲高清不卡在线观看| 欧美精品一区二区久久久| av中文字幕在线不卡| 久久国产精品99精品国产| 日韩一区欧美一区| 久久久精品免费网站| 欧美猛男gaygay网站| 波多野结衣精品在线| 久久国产剧场电影| 亚洲成人三级小说| 日本麻豆一区二区三区视频| 国产午夜亚洲精品理论片色戒 | 青青国产91久久久久久| 一区二区三区欧美在线观看| 久久久午夜精品理论片中文字幕| 欧美精选在线播放| 欧美视频在线一区二区三区 | 国产一区福利在线| 极品少妇一区二区| 久久国产免费看| 久久精品国产在热久久| 日本成人在线不卡视频| 秋霞成人午夜伦在线观看| 日韩国产一区二| 日韩精品电影在线观看| 亚洲综合久久av| 亚洲电影欧美电影有声小说| 性久久久久久久久久久久| 午夜电影一区二区| 蜜臀精品一区二区三区在线观看| 免费的成人av| 国产精品99久久久| 色综合久久中文字幕综合网| 色婷婷激情一区二区三区| 欧美日韩极品在线观看一区| 欧美精品1区2区| 久久夜色精品一区| 亚洲色图另类专区| 久久er99精品| 91视频免费看| 日韩精品中文字幕在线不卡尤物| 久久夜色精品国产噜噜av| 国产精品黄色在线观看| 亚洲国产乱码最新视频| 国产伦精一区二区三区| 91免费观看在线| 久久影视一区二区| 亚洲综合av网| 国产成人啪免费观看软件| 色噜噜狠狠色综合中国| www久久精品| 亚洲va国产va欧美va观看| 成人18精品视频| 亚洲精品在线三区| 午夜a成v人精品| 在线看日本不卡| 亚洲美女免费在线| 成人av在线影院| 国产性做久久久久久| 青青草视频一区| 欧美日韩视频在线观看一区二区三区| 亚洲精品一区二区三区香蕉| 亚洲国产乱码最新视频| 色妞www精品视频| 国产精品美女久久久久久2018| 韩国女主播一区二区三区| 欧美一二三四在线| 首页国产丝袜综合| 9191精品国产综合久久久久久| 亚洲免费成人av| 欧美日韩不卡一区| 一区二区三区美女视频| 欧美性大战久久久久久久蜜臀 |