⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcifinddevice.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* Author: Till Straumann <strauman@slac.stanford.edu>, 2001 *//* find a particular PCI device * (we assume, the firmware configured the PCI bus[es] for us) * * $Id: pcifinddevice.c,v 1.1.4.2 2003/07/18 15:48:54 joel Exp $ */#define PCI_INVALID_VENDORDEVICEID	0xffffffff#define PCI_MULTI_FUNCTION			0x80#include <bsp/pci.h>#include <rtems/bspIo.h>intBSP_pciFindDevice( unsigned short vendorid, unsigned short deviceid,                   int instance, int *pbus, int *pdev, int *pfun ){   unsigned int d;   unsigned short s;   unsigned char bus,dev,fun,hd;	for (bus=0; bus<BusCountPCI(); bus++) {      for (dev=0; dev<PCI_MAX_DEVICES; dev++) {		pci_read_config_byte(bus,dev,0, PCI_HEADER_TYPE, &hd);		hd = (hd & PCI_MULTI_FUNCTION ? PCI_MAX_FUNCTIONS : 1);		for (fun=0; fun<hd; fun++) {			/* 			 * The last devfn id/slot is special; must skip it			 */			if (PCI_MAX_DEVICES-1==dev && PCI_MAX_FUNCTIONS-1 == fun)				break;			(void)pci_read_config_dword(bus,dev,fun,PCI_VENDOR_ID,&d);			if (PCI_INVALID_VENDORDEVICEID == d)				continue;#ifdef PCI_DEBUG			printk("BSP_pciFindDevice: found 0x%08x at %d/%d/%d\n",d,bus,dev,fun);#endif			(void) pci_read_config_word(bus,dev,fun,PCI_VENDOR_ID,&s);			if (vendorid != s)				continue;			(void) pci_read_config_word(bus,dev,fun,PCI_DEVICE_ID,&s);			if (deviceid == s) {				if (instance--) continue;				*pbus=bus; *pdev=dev; *pfun=fun;				return 0;			}		}      }	}    return -1;}/* eof */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -