8250_pci.c

来自「Linux Kernel 2.6.9 for OMAP1710」· C语言 代码 · 共 2,238 行 · 第 1/4 页

C
2,238
字号
	if (!priv) {		rc = -ENOMEM;		goto deinit;	}	memset(priv, 0, sizeof(struct serial_private) +			sizeof(unsigned int) * nr_ports);	priv->quirk = quirk;	pci_set_drvdata(dev, priv);	for (i = 0; i < nr_ports; i++) {		memset(&serial_req, 0, sizeof(serial_req));		serial_req.flags = UPF_SKIP_TEST | UPF_AUTOPROBE |				   UPF_SHARE_IRQ;		serial_req.baud_base = board->base_baud;		serial_req.irq = get_pci_irq(dev, board, i);		if (quirk->setup(dev, board, &serial_req, i))			break;#ifdef SERIAL_DEBUG_PCI		printk("Setup PCI port: port %x, irq %d, type %d\n",		       serial_req.port, serial_req.irq, serial_req.io_type);#endif				priv->line[i] = register_serial(&serial_req);		if (priv->line[i] < 0) {			printk(KERN_WARNING "Couldn't register serial port %s: %d\n", pci_name(dev), priv->line[i]);			break;		}	}	priv->nr = i;	return 0; deinit:	if (quirk->exit)		quirk->exit(dev); disable:	pci_disable_device(dev);	return rc;}static void __devexit pciserial_remove_one(struct pci_dev *dev){	struct serial_private *priv = pci_get_drvdata(dev);	pci_set_drvdata(dev, NULL);	if (priv) {		struct pci_serial_quirk *quirk;		int i;		for (i = 0; i < priv->nr; i++)			unregister_serial(priv->line[i]);		for (i = 0; i < PCI_NUM_BAR_RESOURCES; i++) {			if (priv->remapped_bar[i])				iounmap(priv->remapped_bar[i]);			priv->remapped_bar[i] = NULL;		}		/*		 * Find the exit quirks.		 */		quirk = find_quirk(dev);		if (quirk->exit)			quirk->exit(dev);		pci_disable_device(dev);		kfree(priv);	}}static int pciserial_suspend_one(struct pci_dev *dev, u32 state){	struct serial_private *priv = pci_get_drvdata(dev);	if (priv) {		int i;		for (i = 0; i < priv->nr; i++)			serial8250_suspend_port(priv->line[i]);	}	return 0;}static int pciserial_resume_one(struct pci_dev *dev){	struct serial_private *priv = pci_get_drvdata(dev);	if (priv) {		int i;		/*		 * Ensure that the board is correctly configured.		 */		if (priv->quirk->init)			priv->quirk->init(dev);		for (i = 0; i < priv->nr; i++)			serial8250_resume_port(priv->line[i]);	}	return 0;}static struct pci_device_id serial_pci_tbl[] = {	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,		pbn_b1_8_1382400 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,		pbn_b1_4_1382400 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V960,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,		pbn_b1_2_1382400 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_232, 0, 0,		pbn_b1_8_1382400 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_232, 0, 0,		pbn_b1_4_1382400 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_232, 0, 0,		pbn_b1_2_1382400 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485, 0, 0,		pbn_b1_8_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_4_4, 0, 0,		pbn_b1_8_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485, 0, 0,		pbn_b1_4_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH4_485_2_2, 0, 0,		pbn_b1_4_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH2_485, 0, 0,		pbn_b1_2_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH8_485_2_6, 0, 0,		pbn_b1_8_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH081101V1, 0, 0,		pbn_b1_8_921600 },	{	PCI_VENDOR_ID_V3, PCI_DEVICE_ID_V3_V351,		PCI_SUBVENDOR_ID_CONNECT_TECH,		PCI_SUBDEVICE_ID_CONNECT_TECH_BH041101V1, 0, 0,		pbn_b1_4_921600 },	{	PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_U530,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_bt_1_115200 },	{	PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM2,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_bt_2_115200 },	{	PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM422,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_bt_4_115200 },	{	PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM232,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_bt_2_115200 },	{	PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM4,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_bt_4_115200 },	{	PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_8_115200 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_GTEK_SERIAL2,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_2_115200 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM200,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_2_921600 },	/*	 * VScom SPCOM800, from sl@s.pl	 */	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_SPCOM800, 		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_8_921600 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_1077,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b2_4_921600 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_KEYSPAN,		PCI_SUBDEVICE_ID_KEYSPAN_SX2, 0, 0,		pbn_panacom },	{	PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_QUADMODEM,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_panacom4 },	{	PCI_VENDOR_ID_PANACOM, PCI_DEVICE_ID_PANACOM_DUALMODEM,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_panacom2 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_CHASE_PCIFAST,		PCI_SUBDEVICE_ID_CHASE_PCIFAST4, 0, 0, 		pbn_b2_4_460800 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_CHASE_PCIFAST,		PCI_SUBDEVICE_ID_CHASE_PCIFAST8, 0, 0, 		pbn_b2_8_460800 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_CHASE_PCIFAST,		PCI_SUBDEVICE_ID_CHASE_PCIFAST16, 0, 0, 		pbn_b2_16_460800 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_CHASE_PCIFAST,		PCI_SUBDEVICE_ID_CHASE_PCIFAST16FMC, 0, 0, 		pbn_b2_16_460800 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_CHASE_PCIRAS,		PCI_SUBDEVICE_ID_CHASE_PCIRAS4, 0, 0, 		pbn_b2_4_460800 },	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,		PCI_SUBVENDOR_ID_CHASE_PCIRAS,		PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, 		pbn_b2_8_460800 },	/*	 * Megawolf Romulus PCI Serial Card, from Mike Hudson	 * (Exoray@isys.ca)	 */	{	PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_ROMULUS,		0x10b5, 0x106a, 0, 0,		pbn_plx_romulus },	{	PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_QSC100,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b1_4_115200 },	{	PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_DSC100,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b1_2_115200 },	{	PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100D,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b1_8_115200 },	{	PCI_VENDOR_ID_QUATECH, PCI_DEVICE_ID_QUATECH_ESC100M,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b1_8_115200 },	{	PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_OXSEMI_16PCI954,		PCI_VENDOR_ID_SPECIALIX, PCI_SUBDEVICE_ID_SPECIALIX_SPEED4, 0, 0,		pbn_b0_4_921600 },	{	PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_4_115200 },	{	PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI952,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_921600 },	/*	 * SBS Technologies, Inc. P-Octal and PMC-OCTPRO cards,	 * from skokodyn@yahoo.com	 */	{	PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,		PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO232, 0, 0,		pbn_sbsxrsio },	{	PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,		PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_OCTPRO422, 0, 0,		pbn_sbsxrsio },	{	PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,		PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL232, 0, 0,		pbn_sbsxrsio },	{	PCI_VENDOR_ID_SBSMODULARIO, PCI_DEVICE_ID_OCTPRO,		PCI_SUBVENDOR_ID_SBSMODULARIO, PCI_SUBDEVICE_ID_POCTAL422, 0, 0,		pbn_sbsxrsio },	/*	 * Digitan DS560-558, from jimd@esoft.com	 */	{	PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_ATT_VENUS_MODEM,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b1_1_115200 },	/*	 * Titan Electronic cards	 *  The 400L and 800L have a custom setup quirk.	 */	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b0_1_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b0_2_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b0_4_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800B,		PCI_ANY_ID, PCI_ANY_ID, 0, 0, 		pbn_b0_4_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_100L,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b1_1_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_200L,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b1_bt_2_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_400L,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_4_921600 },	{	PCI_VENDOR_ID_TITAN, PCI_DEVICE_ID_TITAN_800L,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_8_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_550,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_1_460800 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_1_460800 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_10x_850,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_1_460800 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_550,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_2_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_2_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_10x_850,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_2_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_550,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_4_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_4_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_10x_850,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_4_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_550,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_1_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_1_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S_20x_850,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_1_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_550,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S_20x_850,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_550,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_4_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_4_921600 },	{	PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_4S_20x_850,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_4_921600 },	/*	 * Computone devices submitted by Doug McNash dmcnash@computone.com	 */	{	PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,		PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG4,		0, 0, pbn_computone_4 },	{	PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,		PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG8,		0, 0, pbn_computone_8 },	{	PCI_VENDOR_ID_COMPUTONE, PCI_DEVICE_ID_COMPUTONE_PG,		PCI_SUBVENDOR_ID_COMPUTONE, PCI_SUBDEVICE_ID_COMPUTONE_PG6,		0, 0, pbn_computone_6 },	{	PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI95N,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_oxsemi },	{	PCI_VENDOR_ID_TIMEDIA, PCI_DEVICE_ID_TIMEDIA_1889,		PCI_VENDOR_ID_TIMEDIA, PCI_ANY_ID, 0, 0,		pbn_b0_bt_1_921600 },	/*	 * AFAVLAB serial card, from Harald Welte <laforge@gnumonks.org>	 */	{	PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P028,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_8_115200 },	{	PCI_VENDOR_ID_AFAVLAB, PCI_DEVICE_ID_AFAVLAB_P030,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_8_115200 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DSERIAL,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_115200 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_A,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_115200 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUATRO_B,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_115200 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_A,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_4_460800 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_OCTO_B,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_4_460800 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_PLUS,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_460800 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_A,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_460800 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_QUAD_B,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_2_460800 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_SSERIAL,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_1_115200 },	{	PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PORT_650,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_bt_1_460800 },	/*	 * RAStel 2 port modem, gerg@moreton.com.au	 */	{	PCI_VENDOR_ID_MORETON, PCI_DEVICE_ID_RASTEL_2PORT,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_bt_2_115200 },	/*	 * EKF addition for i960 Boards form EKF with serial port	 */	{	PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80960_RP,		0xE4BF, PCI_ANY_ID, 0, 0,		pbn_intel_i960 },	/*	 * Xircom Cardbus/Ethernet combos	 */	{	PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_X3201_MDM,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_1_115200 },	/*	 * Xircom RBM56G cardbus modem - Dirk Arnold (temp entry)	 */	{	PCI_VENDOR_ID_XIRCOM, PCI_DEVICE_ID_XIRCOM_RBM56G,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_1_115200 },	/*	 * Untested PCI modems, sent in from various folks...	 */	/*	 * Elsa Model 56K PCI Modem, from Andreas Rath <arh@01019freenet.de>	 */	{	PCI_VENDOR_ID_ROCKWELL, 0x1004,		0x1048, 0x1500, 0, 0,		pbn_b1_1_115200 },	{	PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,		0xFF00, 0, 0, 0,		pbn_sgi_ioc3 },	/*	 * HP Diva card	 */	{	PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b0_5_115200 },	{	PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_DIVA_AUX,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b2_1_115200 },	/*	 * NEC Vrc-5074 (Nile 4) builtin UART.	 */	{	PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_NILE4,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_nec_nile4 },	{	PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM4,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b3_4_115200 },	{	PCI_VENDOR_ID_DCI, PCI_DEVICE_ID_DCI_PCCOM8,		PCI_ANY_ID, PCI_ANY_ID, 0, 0,		pbn_b3_8_115200 },	/*	 * Exar Corp. XR17C15[248] Dual/Quad/Octal UART	 */	{	PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C152,		PCI_ANY_ID, PCI_ANY_ID,		0,		0, pbn_exar_XR17C152 },	{	PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C154,		PCI_ANY_ID, PCI_ANY_ID,		0,		0, pbn_exar_XR17C154 },	{	PCI_VENDOR_ID_EXAR, PCI_DEVICE_ID_EXAR_XR17C158,		PCI_ANY_ID, PCI_ANY_ID,		0,		0, pbn_exar_XR17C158 },	/*	 * These entries match devices with class COMMUNICATION_SERIAL,	 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL	 */	{	PCI_ANY_ID, PCI_ANY_ID,		PCI_ANY_ID, PCI_ANY_ID,		PCI_CLASS_COMMUNICATION_SERIAL << 8,		0xffff00, pbn_default },	{	PCI_ANY_ID, PCI_ANY_ID,		PCI_ANY_ID, PCI_ANY_ID,		PCI_CLASS_COMMUNICATION_MODEM << 8,		0xffff00, pbn_default },	{	PCI_ANY_ID, PCI_ANY_ID,		PCI_ANY_ID, PCI_ANY_ID,		PCI_CLASS_COMMUNICATION_MULTISERIAL << 8,		0xffff00, pbn_default },	{ 0, }};static struct pci_driver serial_pci_driver = {	.name		= "serial",	.probe		= pciserial_init_one,	.remove		= __devexit_p(pciserial_remove_one),	.suspend	= pciserial_suspend_one,	.resume		= pciserial_resume_one,	.id_table	= serial_pci_tbl,};static int __init serial8250_pci_init(void){	return pci_module_init(&serial_pci_driver);}static void __exit serial8250_pci_exit(void){	pci_unregister_driver(&serial_pci_driver);}module_init(serial8250_pci_init);module_exit(serial8250_pci_exit);MODULE_LICENSE("GPL");MODULE_DESCRIPTION("Generic 8250/16x50 PCI serial probe module");MODULE_DEVICE_TABLE(pci, serial_pci_tbl);

⌨️ 快捷键说明

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