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

📄 oldproc.c

📁 powerpc内核mpc8241linux系统下pci驱动程序
💻 C
📖 第 1 页 / 共 3 页
字号:
	      default:					return "Unknown class";	}}static const char *pci_strvendor(unsigned int vendor){	switch (vendor) {	      case PCI_VENDOR_ID_COMPAQ:	return "Compaq";	      case PCI_VENDOR_ID_NCR:		return "NCR";	      case PCI_VENDOR_ID_ATI:		return "ATI";	      case PCI_VENDOR_ID_VLSI:		return "VLSI";	      case PCI_VENDOR_ID_ADL:		return "Avance Logic";	      case PCI_VENDOR_ID_NS:		return "NS";	      case PCI_VENDOR_ID_TSENG:		return "Tseng'Lab";	      case PCI_VENDOR_ID_WEITEK:	return "Weitek";	      case PCI_VENDOR_ID_DEC:		return "DEC";	      case PCI_VENDOR_ID_CIRRUS:	return "Cirrus Logic";	      case PCI_VENDOR_ID_IBM:		return "IBM";	      case PCI_VENDOR_ID_WD:		return "Western Digital";	      case PCI_VENDOR_ID_AMD:		return "AMD";	      case PCI_VENDOR_ID_TRIDENT:	return "Trident";	      case PCI_VENDOR_ID_AI:		return "Acer Incorporated";	      case PCI_VENDOR_ID_MATROX:	return "Matrox";	      case PCI_VENDOR_ID_CT:		return "Chips & Technologies";	      case PCI_VENDOR_ID_MIRO:		return "Miro";	      case PCI_VENDOR_ID_NEC:		return "NEC";	      case PCI_VENDOR_ID_FD:		return "Future Domain";	      case PCI_VENDOR_ID_SI:		return "Silicon Integrated Systems";	      case PCI_VENDOR_ID_HP:		return "Hewlett Packard";	      case PCI_VENDOR_ID_PCTECH:	return "PCTECH";	      case PCI_VENDOR_ID_DPT:		return "DPT";	      case PCI_VENDOR_ID_OPTI:		return "OPTi";	      case PCI_VENDOR_ID_SGS:		return "SGS Thomson";	      case PCI_VENDOR_ID_BUSLOGIC:	return "BusLogic";	      case PCI_VENDOR_ID_TI:		return "Texas Instruments";	      case PCI_VENDOR_ID_OAK: 		return "OAK";	      case PCI_VENDOR_ID_WINBOND2:	return "Winbond";	      case PCI_VENDOR_ID_MOTOROLA:	return "Motorola";	      case PCI_VENDOR_ID_PROMISE:	return "Promise Technology";	      case PCI_VENDOR_ID_N9:		return "Number Nine";	      case PCI_VENDOR_ID_UMC:		return "UMC";	      case PCI_VENDOR_ID_X:		return "X TECHNOLOGY";	      case PCI_VENDOR_ID_PICOP:		return "PicoPower";	      case PCI_VENDOR_ID_APPLE:		return "Apple";	      case PCI_VENDOR_ID_NEXGEN:	return "Nexgen";	      case PCI_VENDOR_ID_QLOGIC:	return "Q Logic";	      case PCI_VENDOR_ID_CYRIX:		return "Cyrix";	      case PCI_VENDOR_ID_LEADTEK:	return "Leadtek Research";	      case PCI_VENDOR_ID_CONTAQ:	return "Contaq";	      case PCI_VENDOR_ID_FOREX:		return "Forex";	      case PCI_VENDOR_ID_OLICOM:	return "Olicom";	      case PCI_VENDOR_ID_SUN:		return "Sun Microsystems";	      case PCI_VENDOR_ID_CMD:		return "CMD";	      case PCI_VENDOR_ID_VISION:	return "Vision";	      case PCI_VENDOR_ID_BROOKTREE:	return "Brooktree";	      case PCI_VENDOR_ID_SIERRA:	return "Sierra";	      case PCI_VENDOR_ID_ACC:		return "ACC MICROELECTRONICS";	      case PCI_VENDOR_ID_WINBOND:	return "Winbond";	      case PCI_VENDOR_ID_DATABOOK:	return "Databook";	      case PCI_VENDOR_ID_PLX:		return "PLX";	      case PCI_VENDOR_ID_MADGE:		return "Madge Networks";	      case PCI_VENDOR_ID_3COM:		return "3Com";	      case PCI_VENDOR_ID_SMC:		return "SMC";	      case PCI_VENDOR_ID_AL:		return "Acer Labs";	      case PCI_VENDOR_ID_MITSUBISHI:	return "Mitsubishi";	      case PCI_VENDOR_ID_SURECOM:	return "Surecom";	      case PCI_VENDOR_ID_NEOMAGIC:	return "Neomagic";	      case PCI_VENDOR_ID_ASP:		return "Advanced System Products";	      case PCI_VENDOR_ID_MACRONIX:	return "Macronix";	      case PCI_VENDOR_ID_CERN:		return "CERN";	      case PCI_VENDOR_ID_NVIDIA:	return "NVidia";	      case PCI_VENDOR_ID_IMS:		return "IMS";	      case PCI_VENDOR_ID_TEKRAM2:	return "Tekram";	      case PCI_VENDOR_ID_TUNDRA:	return "Tundra";	      case PCI_VENDOR_ID_AMCC:		return "AMCC";	      case PCI_VENDOR_ID_INTERG:	return "Intergraphics";	      case PCI_VENDOR_ID_REALTEK:	return "Realtek";	      case PCI_VENDOR_ID_TRUEVISION:	return "Truevision";	      case PCI_VENDOR_ID_INIT:		return "Initio Corp";	      case PCI_VENDOR_ID_TTI:		return "Triones Technologies, Inc.";	      case PCI_VENDOR_ID_VIA:		return "VIA Technologies";	      case PCI_VENDOR_ID_SMC2:		return "SMC";	      case PCI_VENDOR_ID_VORTEX:	return "VORTEX";	      case PCI_VENDOR_ID_EF:		return "Efficient Networks";	      case PCI_VENDOR_ID_FORE:		return "Fore Systems";	      case PCI_VENDOR_ID_IMAGINGTECH:	return "Imaging Technology";	      case PCI_VENDOR_ID_PHILIPS:	return "Philips";	      case PCI_VENDOR_ID_CYCLONE:	return "Cyclone";	      case PCI_VENDOR_ID_ALLIANCE:	return "Alliance";	      case PCI_VENDOR_ID_VMIC:		return "VMIC";	      case PCI_VENDOR_ID_DIGI:		return "Digi Intl.";	      case PCI_VENDOR_ID_MUTECH:	return "Mutech";	      case PCI_VENDOR_ID_RENDITION:	return "Rendition";	      case PCI_VENDOR_ID_TOSHIBA:	return "Toshiba";	      case PCI_VENDOR_ID_RICOH:		return "Ricoh";	      case PCI_VENDOR_ID_ARTOP:		return "Artop Electronics";	      case PCI_VENDOR_ID_ZEITNET:	return "ZeitNet";	      case PCI_VENDOR_ID_OMEGA:		return "Omega Micro";	      case PCI_VENDOR_ID_LITEON:	return "LiteOn";	      case PCI_VENDOR_ID_NP:		return "Network Peripherals";	      case PCI_VENDOR_ID_ATT:		return "Lucent (ex-AT&T) Microelectronics";	      case PCI_VENDOR_ID_SPECIALIX:	return "Specialix";	      case PCI_VENDOR_ID_AURAVISION:	return "Auravision";	      case PCI_VENDOR_ID_IKON:		return "Ikon";	      case PCI_VENDOR_ID_ZORAN:		return "Zoran";	      case PCI_VENDOR_ID_KINETIC:	return "Kinetic";	      case PCI_VENDOR_ID_COMPEX:	return "Compex";	      case PCI_VENDOR_ID_RP:		return "Comtrol";	      case PCI_VENDOR_ID_CYCLADES:	return "Cyclades";	      case PCI_VENDOR_ID_ESSENTIAL:	return "Essential Communications";	      case PCI_VENDOR_ID_O2:		return "O2 Micro";	      case PCI_VENDOR_ID_3DFX:		return "3Dfx";	      case PCI_VENDOR_ID_SIGMADES:	return "Sigma Designs";	      case PCI_VENDOR_ID_CCUBE:		return "C-Cube";	      case PCI_VENDOR_ID_DIPIX:		return "Dipix";	      case PCI_VENDOR_ID_STALLION:	return "Stallion Technologies";	      case PCI_VENDOR_ID_OPTIBASE:	return "Optibase";	      case PCI_VENDOR_ID_SATSAGEM:	return "SatSagem";	      case PCI_VENDOR_ID_HUGHES:	return "Hughes";	      case PCI_VENDOR_ID_ENSONIQ:	return "Ensoniq";	      case PCI_VENDOR_ID_ALTEON:	return "Alteon";	      case PCI_VENDOR_ID_PICTUREL:	return "Picture Elements";	      case PCI_VENDOR_ID_NVIDIA_SGS:	return "NVidia/SGS Thomson";	      case PCI_VENDOR_ID_CBOARDS:	return "ComputerBoards";	      case PCI_VENDOR_ID_SYMPHONY:	return "Symphony";	      case PCI_VENDOR_ID_TEKRAM:	return "Tekram";	      case PCI_VENDOR_ID_3DLABS:	return "3Dlabs";	      case PCI_VENDOR_ID_AVANCE:	return "Avance";	      case PCI_VENDOR_ID_NETVIN:	return "NetVin";	      case PCI_VENDOR_ID_S3:		return "S3 Inc.";	      case PCI_VENDOR_ID_DCI:		return "Decision Computer Int.";	      case PCI_VENDOR_ID_INTEL:		return "Intel";	      case PCI_VENDOR_ID_KTI:		return "KTI";	      case PCI_VENDOR_ID_ADAPTEC:	return "Adaptec";	      case PCI_VENDOR_ID_ADAPTEC2:	return "Adaptec";	      case PCI_VENDOR_ID_ATRONICS:	return "Atronics";	      case PCI_VENDOR_ID_TIGERJET:	return "TigerJet";	      case PCI_VENDOR_ID_ARK:		return "ARK Logic";	      default:				return "Unknown vendor";	}}static const char *pci_strdev(unsigned int vendor, unsigned int device){	struct pci_dev_info *info;	info = 	pci_lookup_dev(vendor, device);	return info ? info->name : "Unknown device";}/* * Convert some of the configuration space registers of the device at * address (bus,devfn) into a string (possibly several lines each). * The configuration string is stored starting at buf[len].  If the * string would exceed the size of the buffer (SIZE), 0 is returned. */static int sprint_dev_config(struct pci_dev *dev, char *buf, int size){	unsigned long base;	unsigned int class_rev, bus, devfn;	unsigned short vendor, device, status;	unsigned char bist, latency, min_gnt, max_lat;	int reg, len = 0;	const char *str;	bus   = dev->bus->number;	devfn = dev->devfn;	pcibios_read_config_dword(bus, devfn, PCI_CLASS_REVISION, &class_rev);	pcibios_read_config_word (bus, devfn, PCI_VENDOR_ID, &vendor);	pcibios_read_config_word (bus, devfn, PCI_DEVICE_ID, &device);	pcibios_read_config_word (bus, devfn, PCI_STATUS, &status);	pcibios_read_config_byte (bus, devfn, PCI_BIST, &bist);	pcibios_read_config_byte (bus, devfn, PCI_LATENCY_TIMER, &latency);	pcibios_read_config_byte (bus, devfn, PCI_MIN_GNT, &min_gnt);	pcibios_read_config_byte (bus, devfn, PCI_MAX_LAT, &max_lat);	if (len + 80 > size) {		return -1;	}	len += sprintf(buf + len, "  Bus %2d, device %3d, function %2d:\n",		       bus, PCI_SLOT(devfn), PCI_FUNC(devfn));	if (len + 80 > size) {		return -1;	}	len += sprintf(buf + len, "    %s: %s %s (rev %d).\n      ",		       pci_strclass(class_rev >> 8), pci_strvendor(vendor),		       pci_strdev(vendor, device), class_rev & 0xff);	if (!pci_lookup_dev(vendor, device)) {		len += sprintf(buf + len,			       "Vendor id=%x. Device id=%x.\n      ",			       vendor, device);	}	str = 0;	/* to keep gcc shut... */	switch (status & PCI_STATUS_DEVSEL_MASK) {	      case PCI_STATUS_DEVSEL_FAST:   str = "Fast devsel.  "; break;	      case PCI_STATUS_DEVSEL_MEDIUM: str = "Medium devsel.  "; break;	      case PCI_STATUS_DEVSEL_SLOW:   str = "Slow devsel.  "; break;	}	if (len + strlen(str) > size) {		return -1;	}	len += sprintf(buf + len, str);	if (status & PCI_STATUS_FAST_BACK) {#		define fast_b2b_capable	"Fast back-to-back capable.  "		if (len + strlen(fast_b2b_capable) > size) {			return -1;		}		len += sprintf(buf + len, fast_b2b_capable);#		undef fast_b2b_capable	}	if (bist & PCI_BIST_CAPABLE) {#		define BIST_capable	"BIST capable.  "		if (len + strlen(BIST_capable) > size) {			return -1;		}		len += sprintf(buf + len, BIST_capable);#		undef BIST_capable	}	if (dev->irq) {		if (len + 40 > size) {			return -1;		}		len += sprintf(buf + len, "IRQ %d.  ", dev->irq);	}	if (dev->master) {		if (len + 80 > size) {			return -1;		}		len += sprintf(buf + len, "Master Capable.  ");		if (latency)		  len += sprintf(buf + len, "Latency=%d.  ", latency);		else		  len += sprintf(buf + len, "No bursts.  ");		if (min_gnt)		  len += sprintf(buf + len, "Min Gnt=%d.", min_gnt);		if (max_lat)		  len += sprintf(buf + len, "Max Lat=%d.", max_lat);	}	for (reg = 0; reg < 6; reg++) {		if (len + 40 > size) {			return -1;		}		base = dev->base_address[reg];		if (!base)			continue;		if (base & PCI_BASE_ADDRESS_SPACE_IO) {			len += sprintf(buf + len,				       "\n      I/O at 0x%lx [0x%lx].",				       base & PCI_BASE_ADDRESS_IO_MASK,				       dev->base_address[reg]);		} else {			const char *pref, *type = "unknown";			if (base & PCI_BASE_ADDRESS_MEM_PREFETCH) {				pref = "P";			} else {				pref = "Non-p";			}			switch (base & PCI_BASE_ADDRESS_MEM_TYPE_MASK) {			      case PCI_BASE_ADDRESS_MEM_TYPE_32:				type = "32 bit"; break;			      case PCI_BASE_ADDRESS_MEM_TYPE_1M:				type = "20 bit"; break;			      case PCI_BASE_ADDRESS_MEM_TYPE_64:				type = "64 bit"; break;			}			len += sprintf(buf + len,				       "\n      %srefetchable %s memory at "				       "0x%lx [0x%lx].", pref, type,				       base & PCI_BASE_ADDRESS_MEM_MASK,				       dev->base_address[reg]);		}	}	len += sprintf(buf + len, "\n");	return len;}/* * Return list of PCI devices as a character string for /proc/pci. * BUF is a buffer that is PAGE_SIZE bytes long. */int get_pci_list(char *buf){	int nprinted, len, size;	struct pci_dev *dev;	static int complained = 0;#	define MSG "\nwarning: page-size limit reached!\n"	if (!complained) {		complained++;		printk(KERN_INFO "%s uses obsolete /proc/pci interface\n",			current->comm);	}	/* reserve same for truncation warning message: */	size  = PAGE_SIZE - (strlen(MSG) + 1);	len   = sprintf(buf, "PCI devices found:\n");	for (dev = pci_devices; dev; dev = dev->next) {		nprinted = sprint_dev_config(dev, buf + len, size - len);		if (nprinted < 0) {			return len + sprintf(buf + len, MSG);		}		len += nprinted;	}	return len;}static struct proc_dir_entry proc_old_pci = {	PROC_PCI, 3, "pci",	S_IFREG | S_IRUGO, 1, 0, 0,	0, &proc_array_inode_operations};__initfunc(void proc_old_pci_init(void)){	proc_register(&proc_root, &proc_old_pci);}#endif /* CONFIG_PROC_FS */

⌨️ 快捷键说明

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