> We bought one of these the other day to use as a serial console server
> but I had some strife getting it to work.
> 
> >From one expander port to another it worked fine but from one of these
> ports to any normal serial port, it returned garbage.  I had the same
> results with FreeBSD, NetBSD and Linux.
> 
> I finally worked out that using 1200 baud on the expander port and 9600
> on the normal serial port worked ok.
> 
> It seems that this particular card needs a multiplier in
> /usr/src/sys/dev/pci/pucdata.c to get it working.
> 
> Here's the diff I used for what it's worth.  YMMV of course.
...
> pcidump -v returns
> ----------
> 4:8:0: Oxford OX16PCI954
>         0x0000: Vendor ID: 1415 Product ID: 9501
>         0x0004: Command: 0103 Status ID: 0290
>         0x0008: Class: 07 Subclass: 00 Interface: 06 Revision: 00
>         0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line
> Size: 00
>         0x0010: BAR io addr: 0x00003840
>         0x0014: BAR mem 32bit addr: 0xfe9c0000
>         0x0018: BAR io addr: 0x00003860
>         0x001c: BAR mem 32bit addr: 0xfe9b0000
>         0x0020: BAR empty (00000000)
>         0x0024: BAR empty (00000000)
>         0x0028: Cardbus CIS: 00000000
>         0x002c: Subsystem Vendor ID: 1415 Product ID: 0000
>         0x0030: Expansion ROM Base Address: 00000000
>         0x0038: 00000000
>         0x003c: Interrupt Pin: 01 Line: 09 Min Gnt: 00 Max Lat: 00
>         0x0040: Capability 0x01: Power Management
> 4:8:1: Oxford Exsys EX-41098
>         0x0000: Vendor ID: 1415 Product ID: 9511
>         0x0004: Command: 0103 Status ID: 0290
>         0x0008: Class: 06 Subclass: 80 Interface: 00 Revision: 00
>         0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line
> Size: 00
>         0x0010: BAR io addr: 0x00003800
>         0x0014: BAR mem 32bit addr: 0xfe9e0000
>         0x0018: BAR io addr: 0x00003820
>         0x001c: BAR mem 32bit addr: 0xfe9d0000
>         0x0020: BAR empty (00000000)
>         0x0024: BAR empty (00000000)
>         0x0028: Cardbus CIS: 00000000
>         0x002c: Subsystem Vendor ID: 1415 Product ID: 0000
>         0x0030: Expansion ROM Base Address: 00000000
>         0x0038: 00000000
>         0x003c: Interrupt Pin: 02 Line: 09 Min Gnt: 00 Max Lat: 00
>         0x0040: Capability 0x01: Power Management
> ---------------

This does more specific sub-vendor/sub-product matching, so please
give it a shot.  We often find that there are other products that
don't have the high speed clock, as in the original ones people showed
us; your diff would have fed those a high clock.

The way I have been trying to approach this problem is by placing the
more specific mappings ahead of the generic mapping (ie. the generic
mapping does not look at the sub-vendor/sub-product fields).  The
generic mapping is then left at the standard slow clock speeds.

I wish there was a better way of knowing the clock speeds.  Anyone
seen any clue as to how that might be done?

I find it so strange that puc cards tend to have two serial chips by
different vendors.  Perhaps one has a clock generator or some other
pci logic in it, and is more expensive.  Shrug.

Index: sys/dev/pci/pucdata.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/pucdata.c,v
retrieving revision 1.61
diff -u -r1.61 pucdata.c
--- sys/dev/pci/pucdata.c       3 Mar 2009 15:43:27 -0000       1.61
+++ sys/dev/pci/pucdata.c       26 Mar 2009 15:29:46 -0000
@@ -575,6 +575,32 @@
            },
        },
 
+       /* OX16PCI954, first part of Serial Technologies Expander PCI-232-108 */
+       {   /* "OX16PCI954" */
+           {   PCI_VENDOR_OXFORD2, PCI_PRODUCT_OXFORD2_OX16PCI954,
+               PCI_VENDOR_OXFORD2, 0   },
+           {   0xffff, 0xffff, 0xffff, 0xffff  },
+           {
+               { PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
+               { PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
+               { PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
+               { PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
+           },
+       },
+
+       /* Exsys EX-41098, second part of Serial Technologies Expander 
PCI-232-108 */
+       {   /* "Exsys EX-41098", */
+           {   PCI_VENDOR_OXFORD2, PCI_PRODUCT_OXFORD2_EXSYS_EX41098,
+               PCI_VENDOR_OXFORD2, 0   },
+           {   0xffff, 0xffff, 0xffff, 0xffff },
+           {
+               { PUC_PORT_TYPE_COM, 0x10, 0x00, COM_FREQ * 8 },
+               { PUC_PORT_TYPE_COM, 0x10, 0x08, COM_FREQ * 8 },
+               { PUC_PORT_TYPE_COM, 0x10, 0x10, COM_FREQ * 8 },
+               { PUC_PORT_TYPE_COM, 0x10, 0x18, COM_FREQ * 8 },
+           },
+       },
+
        /* Exsys EX-41098, second part of SIIG Cyber 8S PCI Card */
        {   /* "Exsys EX-41098", */
            {   PCI_VENDOR_OXFORD2, PCI_PRODUCT_OXFORD2_EXSYS_EX41098,

Reply via email to