PERFORCE change 95180 for review

Marcel Moolenaar marcel at FreeBSD.org
Thu Apr 13 20:30:31 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=95180

Change 95180 by marcel at marcel_nfs on 2006/04/13 20:30:23

	Make a big leap and reduce the puc_devices array by a factor
	of 10 (i.e. 25K to 2.5K):
	o  Eliminate PUC_MAX_PORTS. The number and type of ports is
	   encoded by a single 8-bit entity. For non-standard cards,
	   use PUC_PORT_NONSTANDARD, which causes the number of ports
	   and the type of each to be determined at runtime. There's
	   currently one card that needs PUC_PORT_NONSTANDARD -- it's
	   a 2S1P2S1P card.
	o  Specify the RID/BAR and offset for each of the ports by
	   3 8-bit values. The first value is the RID/BAR of the first
	   port. The second is a delta value for the RID/BAR and is
	   added to the RID/BAR for subsequent ports. The third value
	   is a delta value for the offset of a sub-region of the
	   resource specified by a RID/BAR. The 2 common configurations
	   are now encoded as follows:
		0x10, 0, 8	- All ports use the same RID, but have
				  different offsets within the RID.
				  	port 1:	0x10, 0
					port 2: 0x10, 8
						:
		0x14, 4, 0	- All ports have a seperate RID and
				  use offset 0 within the resource.
					port 1:	0x14, 0
					port 2: 0x18, 0
						:
	   There are currently 3 cards that cannot directly be encoded
	   this way and will be handled at runtime.
	o  Change the type of the ILR related variables to 8-bit
	   entities.
	
	The details of how the configuration is obtained at runtime
	has not yet been fleshed out beyond calling a function. This
	will be done when puc.c is brought in sync with these
	changes. At this time puc.c cannot be compiled.

Affected files ...

.. //depot/projects/uart/dev/puc/pucdata.c#21 edit
.. //depot/projects/uart/dev/puc/pucvar.h#17 edit

Differences ...

==== //depot/projects/uart/dev/puc/pucdata.c#21 (text+ko) ====

@@ -44,53 +44,37 @@
 #include <dev/pci/pcivar.h>
 #include <dev/puc/pucvar.h>
 
-int puc_config_win877(struct puc_softc *);
+static puc_config_f puc_config_cronyx;
+static puc_config_f puc_config_diva;
+static puc_config_f puc_config_syba;
+static puc_config_f puc_config_siig;
+static puc_config_f puc_config_titan;
 
 const struct puc_device_description puc_devices[] = {
 
 	{   0x0009, 0x7168, 0xffff, 0,
 	    "Sunix SUN1889",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-	    },
+	    PUC_PORT_2S, 0x10, 0, 8,
 	},
 
 	{   0x103c, 0x1048, 0x103c, 0x1282,
 	    "Diva Serial [GSP] Multiport UART",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x38 },
-	    },
+	    PUC_PORT_3S, 0x10, 0, -1,
+	    .config_function = puc_config_diva
 	},
 
 	{   0x10b5, 0x1076, 0x10b5, 0x1076,
 	    "VScom PCI-800",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x20 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x28 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x30 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x38 },
-	    },
+	    PUC_PORT_8S, 0x18, 0, 8,
 	},
 
 	{   0x10b5, 0x1077, 0x10b5, 0x1077,
 	    "VScom PCI-400",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x18, 0, 8,
 	},
 
 	/*
@@ -101,27 +85,13 @@
 	{   0x10b5, 0x9050, 0x12e0, 0x0021,
 	    "Boca Research Turbo Serial 658",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x20 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x28 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x30 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x38 },
-	    },
+	    PUC_PORT_8S, 0x18, 0, 8,
 	},
 
 	{   0x10b5, 0x9050, 0x12e0, 0x0031,
 	    "Boca Research Turbo Serial 654",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x18, 0, 8,
 	},
 
 	/*
@@ -133,10 +103,7 @@
 	{   0x10b5, 0x9050, 0xd84d, 0x6808,
 	    "Dolphin Peripherals 4035",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x18, 4, 0,
 	},
 
 	/*
@@ -148,128 +115,67 @@
 	{   0x10b5, 0x9050, 0xd84d, 0x6810,
 	    "Dolphin Peripherals 4014",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x20, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x24, 0x00 },
-	    },
+	    PUC_PORT_2P, 0x20, 4, 0,
 	},
 
 	{   0x11fe, 0x8010, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 RJ11 part A",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8011, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 RJ11 part B",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8012, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 Octa part A",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8013, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 Octa part B",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8014, 0xffff, 0,
 	    "Comtrol RocketPort 550/4 RJ45",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8015, 0xffff, 0,
 	    "Comtrol RocketPort 550/Quad",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8016, 0xffff, 0,
 	    "Comtrol RocketPort 550/16 part A",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8017, 0xffff, 0,
 	    "Comtrol RocketPort 550/16 part B",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x20 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x28 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x30 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x38 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x40 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x48 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x50 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x58 },
-	    },
+	    PUC_PORT_12S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8018, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 part A",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x11fe, 0x8019, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 part B",
 	    DEFAULT_RCLK * 4,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	/*
@@ -285,414 +191,251 @@
 	{   0x131f, 0x1010, 0xffff, 0,
 	    "SIIG Cyber I/O PCI 16C550 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_1S1P, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1011, 0xffff, 0,
 	    "SIIG Cyber I/O PCI 16C650 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_1S1P, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1012, 0xffff, 0,
 	    "SIIG Cyber I/O PCI 16C850 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_1S1P, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1020, 0xffff, 0,
 	    "SIIG Cyber Parallel PCI (10x family)",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-	    },
+	    PUC_PORT_1P, 0x18, 0, 0,
 	},
 
 	{   0x131f, 0x1021, 0xffff, 0,
 	    "SIIG Cyber Parallel Dual PCI (10x family)",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x20, 0x00 },
-	    },
+	    PUC_PORT_2P, 0x18, 8, 0,
 	},
 
 	{   0x131f, 0x1030, 0xffff, 0,
 	    "SIIG Cyber Serial Dual PCI 16C550 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1031, 0xffff, 0,
 	    "SIIG Cyber Serial Dual PCI 16C650 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1032, 0xffff, 0,
 	    "SIIG Cyber Serial Dual PCI 16C850 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1034, 0xffff, 0,	/* XXX really? */
 	    "SIIG Cyber 2S1P PCI 16C550 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x20, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1035, 0xffff, 0,	/* XXX really? */
 	    "SIIG Cyber 2S1P PCI 16C650 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x20, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1036, 0xffff, 0,	/* XXX really? */
 	    "SIIG Cyber 2S1P PCI 16C850 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x20, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1050, 0xffff, 0,
 	    "SIIG Cyber 4S PCI 16C550 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x24, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1051, 0xffff, 0,
 	    "SIIG Cyber 4S PCI 16C650 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x24, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x1052, 0xffff, 0,
 	    "SIIG Cyber 4S PCI 16C850 (10x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x24, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x18, 4, 0,
 	},
 
 	{   0x131f, 0x2010, 0xffff, 0,
 	    "SIIG Cyber I/O PCI 16C550 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x14, 0x00 },
-	    },
+	    PUC_PORT_1S1P, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2011, 0xffff, 0,
 	    "SIIG Cyber I/O PCI 16C650 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x14, 0x00 },
-	    },
+	    PUC_PORT_1S1P, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2012, 0xffff, 0,
 	    "SIIG Cyber I/O PCI 16C850 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x14, 0x00 },
-	    },
+	    PUC_PORT_1S1P, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2020, 0xffff, 0,
 	    "SIIG Cyber Parallel PCI (20x family)",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x00 },
-	    },
+	    PUC_PORT_1P, 0x10, 0, 0,
 	},
 
 	{   0x131f, 0x2021, 0xffff, 0,
 	    "SIIG Cyber Parallel Dual PCI (20x family)",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-	    },
+	    PUC_PORT_2P, 0x10, 8, 0,
 	},
 
 	{   0x131f, 0x2030, 0xffff, 0,
 	    "SIIG Cyber Serial Dual PCI 16C550 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2031, 0xffff, 0,
 	    "SIIG Cyber Serial Dual PCI 16C650 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2032, 0xffff, 0,
 	    "SIIG Cyber Serial Dual PCI 16C850 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2040, 0xffff, 0,
 	    "SIIG Cyber 2P1S PCI 16C550 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_1S2P, 0x10, -1, 0,
+	    .config_function = puc_config_siig
 	},
 
 	{   0x131f, 0x2041, 0xffff, 0,
 	    "SIIG Cyber 2P1S PCI 16C650 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_1S2P, 0x10, -1, 0,
+	    .config_function = puc_config_siig
 	},
 
 	{   0x131f, 0x2042, 0xffff, 0,
 	    "SIIG Cyber 2P1S PCI 16C850 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_1S2P, 0x10, -1, 0,
+	    .config_function = puc_config_siig
 	},
 
 	{   0x131f, 0x2050, 0xffff, 0,
 	    "SIIG Cyber 4S PCI 16C550 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2051, 0xffff, 0,
 	    "SIIG Cyber 4S PCI 16C650 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2052, 0xffff, 0,
 	    "SIIG Cyber 4S PCI 16C850 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2060, 0xffff, 0,
 	    "SIIG Cyber 2S1P PCI 16C550 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2061, 0xffff, 0,
 	    "SIIG Cyber 2S1P PCI 16C650 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x10, 4, 0,
 	},
 
 	{   0x131f, 0x2062, 0xffff, 0,
 	    "SIIG Cyber 2S1P PCI 16C850 (20x family)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x10, 4, 0,
 	},
 
 	{   0x1393, 0x1040, 0xffff, 0,
 	    "Moxa Technologies, Smartio C104H/PCI",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x18, 0, 8,
 	},
 
 	{   0x1393, 0x1041, 0xffff, 0,
 	    "Moxa Technologies, Smartio CP-104UL/PCI",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x18, 0, 8,
 	},
 
 	{   0x1393, 0x1141, 0xffff, 0,
 	    "Moxa Technologies, Industio CP-114",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x18, 0, 8,
 	},
 
 	{   0x1393, 0x1680, 0xffff, 0,
 	    "Moxa Technologies, C168H/PCI",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x20 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x28 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x30 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x38 },
-	    },
+	    PUC_PORT_8S, 0x18, 0, 8,
 	},
 
 	{   0x1393, 0x1681, 0xffff, 0,
 	    "Moxa Technologies, C168U/PCI",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x18 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x20 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x28 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x30 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x38 },
-	    },
+	    PUC_PORT_8S, 0x18, 0, 8,
 	},
 
 	{   0x13a8, 0x0158, 0xffff, 0,
 	    "Cronyx Omega2-PCI",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x010, 0x000 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0x200 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0x400 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0x600 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0x800 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0xA00 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0xC00 },
-		{ PUC_PORT_TYPE_COM, 0x010, 0xE00 },
-	    },
+	    PUC_PORT_8S, 0x10, 0, -1,
+	    .config_function = puc_config_cronyx
 	},
 
 	{   0x1407, 0x0100, 0xffff, 0,	/* MASK */
 	    "Lava Computers dual serial port",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x1407, 0x0120, 0xffff, 0,	/* MASK */
 	    "Lava Computers Quattro-PCI serial port",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x1407, 0x0180, 0xffff, 0,	/* MASK */
 	    "Lava Computers Octopus-550 8-port serial",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x10, 4, 0,
 	},
 
 	{   0x1407, 0x8000, 0xffff, 0,
 	    "Lava Computers 2SP-PCI parallel port",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x00 },
-	    },
+	    PUC_PORT_1P, 0x10, 0, 0,
 	},
 
 	/*
@@ -702,10 +445,7 @@
 	{   0x1409, 0x7168, 0xffff, 0,
 	    "Dolphin Peripherals 4036",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-	    },
+	    PUC_PORT_2S, 0x10, 0, 8,
 	},
 
 	/*
@@ -721,68 +461,43 @@
 	{   0x1415, 0x8403, 0xffff, 0,
 	    "Oxford Semiconductor OX12PCI840 Parallel port",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x00 },
-	    },
+	    PUC_PORT_1P, 0x10, 0, 0,
 	},
 
 	{   0x1415, 0x9501, 0xffff, 0,
 	    "Oxford Semiconductor OX16PCI954 UARTs",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x1415, 0x950a, 0xffff, 0,
 	    "Oxford Semiconductor OX16PCI954 UARTs",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x1415, 0x9511, 0xffff, 0,
 	    "Oxford Semiconductor OX9160/OX16PCI954 UARTs (function 1)",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x1415, 0x9513, 0xffff, 0,
 	    "Oxford Semiconductor OX16PCI954 Parallel port",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x00 },
-	    },
+	    PUC_PORT_1P, 0x10, 0, 0,
 	},
 
 	{   0x14d2, 0x8020, 0xffff, 0,
 	    "VScom PCI-200L",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x14, 4, 0,
 	},
 
 	{   0x14d2, 0x8028, 0xffff, 0,
 	    "VScom 200Li",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x20, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x08 },
-	    },
+	    PUC_PORT_2S, 0x20, 0, 8,
 	},
 
 	/*
@@ -797,16 +512,8 @@
 	{   0x14d2, 0x8080, 0xffff, 0,
 	    "Titan VScom PCI-800L",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x18 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x20 },
-		{ PUC_PORT_TYPE_COM, 0x20, 0x28 },
-	    },
+	    PUC_PORT_8S, 0x14, -1, -1,
+	    .config_function = puc_config_titan
 	},
 
 	/*
@@ -817,249 +524,154 @@
 	{   0x14d2, 0xa003, 0xffff, 0,
 	    "Titan PCI-800H",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 	{   0x14d2, 0xa004, 0xffff, 0,
 	    "Titan PCI-800H",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x10, 0, 8,
 	},
 
 	{   0x14d2, 0xa005, 0xffff, 0,
 	    "Titan PCI-200H",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x08 },
-	    },
+	    PUC_PORT_2S, 0x10, 0, 8,
 	},
 
 	{   0x14d2, 0xe020, 0xffff, 0,
 	    "Titan VScom PCI-200HV2",
 	    DEFAULT_RCLK * 8,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x14db, 0x2130, 0xffff, 0,	/* MASK */
 	    "Avlab Technology, PCI IO 2S",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-	    },
+	    PUC_PORT_2S, 0x10, 4, 0,
 	},
 
 	{   0x14db, 0x2150, 0xffff, 0,
 	    "Avlab Low Profile PCI 4 Serial",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x10, 4, 0,
 	},
 
 	{   0x1592, 0x0781, 0xffff, 0,
 	    "Syba Tech Ltd. PCI-4S2P-550-ECP",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x2e8 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x2f8 },
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x000 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x3e8 },
-		{ PUC_PORT_TYPE_COM, 0x10, 0x3f8 },
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x000 },
-	    },
-	    .init = puc_config_win877,
+	    PUC_PORT_NONSTANDARD, 0x10, 0, -1,
+	    .config_function = puc_config_syba
 	},
 
 	{   0x6666, 0x0001, 0xffff, 0,
 	    "Decision Computer Inc, PCCOM 4-port serial",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x08 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x10 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x18 },
-	    },
+	    PUC_PORT_4S, 0x1c, 0, 8,
 	},
 
 	{   0x6666, 0x0004, 0xffff, 0,
 	    "PCCOM dual port RS232/422/485",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x08 },
-	    },
+	    PUC_PORT_2S, 0x1c, 0, 8,
 	},
 
 	{   0x9710, 0x9805, 0xffff, 0,
 	    "NetMos NM9805 1284 Printer port",
 	    0,
-	    {
-		{ PUC_PORT_TYPE_LPT, 0x10, 0x00 },
-	    },
+	    PUC_PORT_1P, 0x10, 0, 0,
 	},
 
 	{   0x9710, 0x9835, 0xffff, 0,
 	    "NetMos NM9835 Dual UART and 1284 Printer port",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_LPT, 0x18, 0x00 },
-	    },
+	    PUC_PORT_2S1P, 0x10, 4, 0,
 	},
 
 	{   0x9710, 0x9845, 0xffff, 0,
 	    "NetMos NM9845 Quad UART",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x14, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x18, 0x00 },
-		{ PUC_PORT_TYPE_COM, 0x1c, 0x00 },
-	    },
+	    PUC_PORT_4S, 0x10, 4, 0,
 	},
 
 	{   0xb00c, 0x021c, 0xffff, 0,
 	    "IC Book Labs Gunboat x4 Lite",
 	    DEFAULT_RCLK,
-	    {
-		{ PUC_PORT_TYPE_COM, 0x10, 0x00 },

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list