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

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

?? portdrv_pci.c

?? 底層驅(qū)動(dòng)開發(fā)
?? C
字號:
/* * File:	portdrv_pci.c * Purpose:	PCI Express Port Bus Driver * * Copyright (C) 2004 Intel * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com) */#include <linux/module.h>#include <linux/pci.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/pm.h>#include <linux/init.h>#include <linux/pcieport_if.h>#include "portdrv.h"/* * Version Information */#define DRIVER_VERSION "v1.0"#define DRIVER_AUTHOR "tom.l.nguyen@intel.com"#define DRIVER_DESC "PCIE Port Bus Driver"MODULE_AUTHOR(DRIVER_AUTHOR);MODULE_DESCRIPTION(DRIVER_DESC);MODULE_LICENSE("GPL");/* global data */static const char device_name[] = "pcieport-driver";static void pci_save_msi_state(struct pci_dev *dev){	struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev);	int i = 0, pos;	u16 control;   	if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSI)) <= 0)		return;	pci_read_config_dword(dev, pos, &p_ext->saved_msi_config_space[i++]);	control = p_ext->saved_msi_config_space[0] >> 16;	pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,		&p_ext->saved_msi_config_space[i++]);	if (control & PCI_MSI_FLAGS_64BIT) {		pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,			&p_ext->saved_msi_config_space[i++]);		pci_read_config_dword(dev, pos + PCI_MSI_DATA_64,			&p_ext->saved_msi_config_space[i++]);	} else		pci_read_config_dword(dev, pos + PCI_MSI_DATA_32,			&p_ext->saved_msi_config_space[i++]);	if (control & PCI_MSI_FLAGS_MASKBIT)		pci_read_config_dword(dev, pos + PCI_MSI_MASK_BIT,			&p_ext->saved_msi_config_space[i++]);}static void pci_restore_msi_state(struct pci_dev *dev){	struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev);	int i = 0, pos;	u16 control;   	if ((pos = pci_find_capability(dev, PCI_CAP_ID_MSI)) <= 0)		return;	control = p_ext->saved_msi_config_space[i++] >> 16;	pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control);	pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,		p_ext->saved_msi_config_space[i++]);	if (control & PCI_MSI_FLAGS_64BIT) {		pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,			p_ext->saved_msi_config_space[i++]);		pci_write_config_dword(dev, pos + PCI_MSI_DATA_64,			p_ext->saved_msi_config_space[i++]);	} else		pci_write_config_dword(dev, pos + PCI_MSI_DATA_32,			p_ext->saved_msi_config_space[i++]);	if (control & PCI_MSI_FLAGS_MASKBIT)		pci_write_config_dword(dev, pos + PCI_MSI_MASK_BIT,			p_ext->saved_msi_config_space[i++]);}static void pcie_portdrv_save_config(struct pci_dev *dev){	struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev);	pci_save_state(dev);	if (p_ext->interrupt_mode == PCIE_PORT_MSI_MODE)		pci_save_msi_state(dev);}static int pcie_portdrv_restore_config(struct pci_dev *dev){	struct pcie_port_device_ext *p_ext = pci_get_drvdata(dev);	int retval;	pci_restore_state(dev);	if (p_ext->interrupt_mode == PCIE_PORT_MSI_MODE)		pci_restore_msi_state(dev);	retval = pci_enable_device(dev);	if (retval)		return retval;	pci_set_master(dev);	return 0;}/* * pcie_portdrv_probe - Probe PCI-Express port devices * @dev: PCI-Express port device being probed * * If detected invokes the pcie_port_device_register() method for  * this port device. * */static int __devinit pcie_portdrv_probe (struct pci_dev *dev, 				const struct pci_device_id *id ){	int			status;	status = pcie_port_device_probe(dev);	if (status)		return status;	if (pci_enable_device(dev) < 0) 		return -ENODEV;		pci_set_master(dev);        if (!dev->irq) {		printk(KERN_WARNING 		"%s->Dev[%04x:%04x] has invalid IRQ. Check vendor BIOS\n", 		__FUNCTION__, dev->device, dev->vendor);	}	if (pcie_port_device_register(dev)) 		return -ENOMEM;	return 0;}static void pcie_portdrv_remove (struct pci_dev *dev){	pcie_port_device_remove(dev);	kfree(pci_get_drvdata(dev));}#ifdef CONFIG_PMstatic int pcie_portdrv_suspend (struct pci_dev *dev, pm_message_t state){	int ret = pcie_port_device_suspend(dev, state);	pcie_portdrv_save_config(dev);	return ret;}static int pcie_portdrv_resume (struct pci_dev *dev){	pcie_portdrv_restore_config(dev);	return pcie_port_device_resume(dev);}#endif/* * LINUX Device Driver Model */static const struct pci_device_id port_pci_ids[] = { {	/* handle any PCI-Express port */	PCI_DEVICE_CLASS(((PCI_CLASS_BRIDGE_PCI << 8) | 0x00), ~0),	}, { /* end: all zeroes */ }};MODULE_DEVICE_TABLE(pci, port_pci_ids);static struct pci_driver pcie_portdrv = {	.name		= (char *)device_name,	.id_table	= &port_pci_ids[0],	.probe		= pcie_portdrv_probe,	.remove		= pcie_portdrv_remove,#ifdef	CONFIG_PM	.suspend	= pcie_portdrv_suspend,	.resume		= pcie_portdrv_resume,#endif	/* PM */};static int __init pcie_portdrv_init(void){	int retval = 0;	pcie_port_bus_register();	retval = pci_register_driver(&pcie_portdrv);	if (retval)		pcie_port_bus_unregister();	return retval;}static void __exit pcie_portdrv_exit(void) {	pci_unregister_driver(&pcie_portdrv);	pcie_port_bus_unregister();}module_init(pcie_portdrv_init);module_exit(pcie_portdrv_exit);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本欧美一区二区| 欧美精品国产精品| 视频在线观看一区二区三区| 成人性视频网站| 国产乱一区二区| 日本欧洲一区二区| 蜜乳av一区二区三区| 一区二区三区自拍| 亚洲视频网在线直播| 亚洲欧美国产毛片在线| 亚洲精品日产精品乱码不卡| 一区二区三区在线免费视频| 亚洲一区二区av电影| 香蕉久久一区二区不卡无毒影院| 亚洲国产美女搞黄色| 美女视频黄a大片欧美| 欧美久久一区二区| 欧美美女一区二区三区| 在线免费观看日韩欧美| 欧美午夜理伦三级在线观看| 欧美日韩久久久| 欧美成人一级视频| 日本一区二区三区在线不卡 | 国产精品久久久久一区二区三区共| 欧美精品一区二区久久久| 国产亚洲一二三区| 亚洲女女做受ⅹxx高潮| 午夜精品久久久久久久99樱桃| 青青草国产精品97视觉盛宴| 国产精品99久久久| 欧美日韩三级视频| 欧美精品一区二区三区四区 | 亚洲综合丁香婷婷六月香| 午夜激情久久久| 国内精品免费在线观看| 99国产精品99久久久久久| 欧美日韩国产一区二区三区地区| 日韩一区二区三区视频在线观看| 欧美变态凌虐bdsm| 亚洲精品ww久久久久久p站| 青青草原综合久久大伊人精品优势 | 亚洲福中文字幕伊人影院| 久久机这里只有精品| 99久久精品国产导航| 欧美调教femdomvk| 欧美高清在线一区| 日韩电影在线看| 亚洲免费观看高清完整版在线观看熊| 制服.丝袜.亚洲.另类.中文| 捆绑调教一区二区三区| 成人毛片在线观看| 日韩一区二区三区在线| 夜夜操天天操亚洲| 成a人片国产精品| 日韩亚洲欧美成人一区| 亚洲一卡二卡三卡四卡五卡| 丁香六月综合激情| 精品少妇一区二区三区日产乱码 | 91精品国产麻豆| 国产精品久久久久久妇女6080| 蜜芽一区二区三区| 精品视频1区2区3区| 中文字幕在线观看不卡视频| 精品一区二区在线观看| 欧美巨大另类极品videosbest | 国产a久久麻豆| 欧美一区二区在线免费播放 | 欧美午夜视频网站| 1区2区3区欧美| 国产乱码一区二区三区| 精品国产一二三| 男人操女人的视频在线观看欧美| 欧美系列在线观看| 一区二区高清在线| 色哟哟一区二区在线观看| 亚洲欧洲一区二区三区| 成人激情免费电影网址| 国产亚洲女人久久久久毛片| 国产乱一区二区| 欧美日韩黄色影视| 成人av网站在线观看| 久久99热这里只有精品| 污片在线观看一区二区| 91福利在线播放| 亚洲自拍欧美精品| 欧美日韩久久一区| 日本不卡高清视频| 日韩欧美二区三区| 国产乱国产乱300精品| 久久精品免费在线观看| 不卡一区二区在线| 亚洲精品精品亚洲| 欧美日韩中字一区| 免费的成人av| 国产婷婷色一区二区三区四区 | 奇米精品一区二区三区在线观看| 337p亚洲精品色噜噜噜| 欧美一区二区日韩| 国产女人aaa级久久久级| 日韩精彩视频在线观看| 亚洲少妇中出一区| 日韩精品高清不卡| 国产麻豆一精品一av一免费| 国产在线国偷精品免费看| 看电视剧不卡顿的网站| 亚洲尤物在线视频观看| 天天综合天天综合色| 天堂资源在线中文精品| 欧美视频一区二区| 久久综合九色欧美综合狠狠| 久久国产三级精品| 亚洲精品网站在线观看| 在线成人高清不卡| 国产99一区视频免费 | 激情图片小说一区| 国产精品久久久久精k8| 欧美三级在线看| 国产成人啪午夜精品网站男同| 亚洲激情在线播放| 久久久综合九色合综国产精品| 色女孩综合影院| 婷婷六月综合网| 欧美人体做爰大胆视频| 日韩精品久久久久久| 亚洲午夜精品久久久久久久久| 欧美高清视频一二三区 | 国产精品嫩草影院com| 欧美视频一区在线观看| 国产精品18久久久| 免费成人美女在线观看| 国产精品成人在线观看| 2020国产精品自拍| 91精品国产一区二区三区蜜臀| 色综合天天综合网天天看片| 制服丝袜日韩国产| 91麻豆免费视频| 国产毛片精品视频| 久久成人久久鬼色| 日韩av成人高清| 亚洲国产精品久久久久婷婷884| 欧美美女直播网站| 国产乱子伦视频一区二区三区| 日韩和欧美一区二区三区| av激情成人网| 天天操天天干天天综合网| 97精品视频在线观看自产线路二| 麻豆91小视频| 日韩中文字幕亚洲一区二区va在线| 亚洲男同性视频| 国产精品视频你懂的| 久久精品视频在线免费观看| 日韩欧美成人一区二区| 日韩一区和二区| 欧美一区二区三区视频在线观看 | 亚洲一区二区视频在线| 欧美精品少妇一区二区三区| 欧美日韩电影一区| 色吊一区二区三区| 一本久道中文字幕精品亚洲嫩| 免费在线观看不卡| 国产拍揄自揄精品视频麻豆| www.日本不卡| 国产成人精品午夜视频免费| 青青草91视频| 国产精品进线69影院| 欧美三级日本三级少妇99| 成人一区二区三区在线观看| 久久99久国产精品黄毛片色诱| 亚洲国产精品激情在线观看| 亚洲精品久久久蜜桃| 精品国产1区2区3区| 3d动漫精品啪啪| 精品少妇一区二区三区视频免付费| 日韩精品一区二区三区中文精品| 精品久久国产字幕高潮| 久久久久国产精品麻豆ai换脸| 精品国产亚洲在线| 日精品一区二区| 成人av电影在线播放| 欧美亚洲国产一区二区三区| 老司机免费视频一区二区| 国产在线精品一区二区夜色| 国产成人av电影在线观看| gogogo免费视频观看亚洲一| 欧美在线不卡一区| 欧美成人欧美edvon| 国产精品久久久久影院老司| 亚洲男人天堂av网| 久久精品国产久精国产爱| 成人中文字幕在线| 欧美无人高清视频在线观看| 久久一区二区三区国产精品| 一区二区三区美女| 国产综合色在线视频区| 色综合天天综合网国产成人综合天 | 精品国产在天天线2019| 日韩毛片精品高清免费| 玖玖九九国产精品| 在线视频一区二区三| 久久午夜国产精品|