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

📄 pci.c

📁 GNU Mach 微内核源代码, 基于美国卡内基美隆大学的 Mach 研究项目
💻 C
📖 第 1 页 / 共 4 页
字号:
	      case PCI_CLASS_STORAGE_IPI:		return "IPI bus controller";	      case PCI_CLASS_STORAGE_RAID:		return "RAID bus controller";	      case PCI_CLASS_STORAGE_OTHER:		return "Unknown mass storage controller";	      case PCI_CLASS_NETWORK_ETHERNET:		return "Ethernet controller";	      case PCI_CLASS_NETWORK_TOKEN_RING:	return "Token ring network controller";	      case PCI_CLASS_NETWORK_FDDI:		return "FDDI network controller";	      case PCI_CLASS_NETWORK_ATM:		return "ATM network controller";	      case PCI_CLASS_NETWORK_OTHER:		return "Network controller";	      case PCI_CLASS_DISPLAY_VGA:		return "VGA compatible controller";	      case PCI_CLASS_DISPLAY_XGA:		return "XGA compatible controller";	      case PCI_CLASS_DISPLAY_OTHER:		return "Display controller";	      case PCI_CLASS_MULTIMEDIA_VIDEO:		return "Multimedia video controller";	      case PCI_CLASS_MULTIMEDIA_AUDIO:		return "Multimedia audio controller";	      case PCI_CLASS_MULTIMEDIA_OTHER:		return "Multimedia controller";	      case PCI_CLASS_MEMORY_RAM:		return "RAM memory";	      case PCI_CLASS_MEMORY_FLASH:		return "FLASH memory";	      case PCI_CLASS_MEMORY_OTHER:		return "Memory";	      case PCI_CLASS_BRIDGE_HOST:		return "Host bridge";	      case PCI_CLASS_BRIDGE_ISA:		return "ISA bridge";	      case PCI_CLASS_BRIDGE_EISA:		return "EISA bridge";	      case PCI_CLASS_BRIDGE_MC:			return "MicroChannel bridge";	      case PCI_CLASS_BRIDGE_PCI:		return "PCI bridge";	      case PCI_CLASS_BRIDGE_PCMCIA:		return "PCMCIA bridge";	      case PCI_CLASS_BRIDGE_NUBUS:		return "NuBus bridge";	      case PCI_CLASS_BRIDGE_CARDBUS:		return "CardBus bridge";	      case PCI_CLASS_BRIDGE_OTHER:		return "Bridge";	      case PCI_CLASS_COMMUNICATION_SERIAL:	return "Serial controller";	      case PCI_CLASS_COMMUNICATION_PARALLEL:	return "Parallel controller";	      case PCI_CLASS_COMMUNICATION_OTHER:	return "Communication controller";	      case PCI_CLASS_SYSTEM_PIC:		return "PIC";	      case PCI_CLASS_SYSTEM_DMA:		return "DMA controller";	      case PCI_CLASS_SYSTEM_TIMER:		return "Timer";	      case PCI_CLASS_SYSTEM_RTC:		return "RTC";	      case PCI_CLASS_SYSTEM_OTHER:		return "System peripheral";	      case PCI_CLASS_INPUT_KEYBOARD:		return "Keyboard controller";	      case PCI_CLASS_INPUT_PEN:			return "Digitizer Pen";	      case PCI_CLASS_INPUT_MOUSE:		return "Mouse controller";	      case PCI_CLASS_INPUT_OTHER:		return "Input device controller";	      case PCI_CLASS_DOCKING_GENERIC:		return "Generic Docking Station";	      case PCI_CLASS_DOCKING_OTHER:		return "Docking Station";	      case PCI_CLASS_PROCESSOR_386:		return "386";	      case PCI_CLASS_PROCESSOR_486:		return "486";	      case PCI_CLASS_PROCESSOR_PENTIUM:		return "Pentium";	      case PCI_CLASS_PROCESSOR_ALPHA:		return "Alpha";	      case PCI_CLASS_PROCESSOR_POWERPC:		return "Power PC";	      case PCI_CLASS_PROCESSOR_CO:		return "Co-processor";	      case PCI_CLASS_SERIAL_FIREWIRE:		return "FireWire (IEEE 1394)";	      case PCI_CLASS_SERIAL_ACCESS:		return "ACCESS Bus";	      case PCI_CLASS_SERIAL_SSA:		return "SSA";	      case PCI_CLASS_SERIAL_USB:		return "USB Controller";	      case PCI_CLASS_SERIAL_FIBER:		return "Fiber Channel";	      default:					return "Unknown class";	}}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 "Advance 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_APPLE:		return "Apple";	      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_NEXGEN:	return "Nexgen";	      case PCI_VENDOR_ID_QLOGIC:	return "Q Logic";	      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_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_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_NEOMAGIC:	return "Neomagic";	      case PCI_VENDOR_ID_ASP:		return "Advanced System Products";	      case PCI_VENDOR_ID_CERN:		return "CERN";	      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_VIA:		return "VIA Technologies";	      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_PLX:		return "PLX";	      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_ZEITNET:	return "ZeitNet";	      case PCI_VENDOR_ID_OMEGA:		return "Omega Micro";	      case PCI_VENDOR_ID_NP:		return "Network Peripherals";	      case PCI_VENDOR_ID_SPECIALIX:	return "Specialix";	      case PCI_VENDOR_ID_IKON:		return "Ikon";	      case PCI_VENDOR_ID_ZORAN:		return "Zoran";	      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_3DFX:		return "3Dfx";	      case PCI_VENDOR_ID_SIGMADES:	return "Sigma Designs";	      case PCI_VENDOR_ID_OPTIBASE:	return "Optibase";	      case PCI_VENDOR_ID_NVIDIA_SGS:    return "NVidia/SGS Thomson"; 	      case PCI_VENDOR_ID_ENSONIQ:	return "Ensoniq";		      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_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_ARK:		return "ARK Logic";	      case PCI_VENDOR_ID_ASIX:		return "ASIX";	      case PCI_VENDOR_ID_LITEON:	return "Lite-on";	      default:				return "Unknown vendor";	}}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";}/* * Turn on/off PCI bridge optimization. This should allow benchmarking. */static void burst_bridge(unsigned char bus, unsigned char devfn,			 unsigned char pos, int turn_on){#ifdef CONFIG_PCI_OPTIMIZE	struct bridge_mapping_type *bmap;	unsigned char val;	int i;	pos *= NUM_OPTIMIZATIONS;	printk("PCI bridge optimization.\n");	for (i = 0; i < NUM_OPTIMIZATIONS; i++) {		printk("    %s: ", bridge_optimization[i].type);		bmap = &bridge_mapping[pos + i];		if (!bmap->addr) {			printk("Not supported.");		} else {			pcibios_read_config_byte(bus, devfn, bmap->addr, &val);			if ((val & bmap->mask) == bmap->value) {				printk("%s.", bridge_optimization[i].on);				if (!turn_on) {					pcibios_write_config_byte(bus, devfn,								  bmap->addr,								  (val | bmap->mask)								  - bmap->value);					printk("Changed!  Now %s.", bridge_optimization[i].off);				}			} else {				printk("%s.", bridge_optimization[i].off);				if (turn_on) {					pcibios_write_config_byte(bus, devfn,								  bmap->addr,								  (val & (0xff - bmap->mask))								  + bmap->value);					printk("Changed!  Now %s.", bridge_optimization[i].on);				}			}		}		printk("\n");	}#endif /* CONFIG_PCI_OPTIMIZE */}/* * 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 l, class_rev, bus, devfn, last_reg;	unsigned short vendor, device, status;	unsigned char bist, latency, min_gnt, max_lat, hdr_type;	int reg, len = 0;	const char *str;	bus   = dev->bus->number;	devfn = dev->devfn;	pcibios_read_config_byte (bus, devfn, PCI_HEADER_TYPE, &hdr_type);	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)

⌨️ 快捷键说明

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