> 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,