I am trying to install a PCI serial IO card on a FreeBSD 9.1 (Prerelease) box. I had no success during hours of work. I recompiled kernel using puc and COM_MULTIPORT options. No success.

This is the "pciconf -l | grep ^none" result:

none0@pci0:0:9:0:       class=0x070002 card=0x32534348 chip=0x32534348 rev=0x10 hdr=0x00
none1@pci0:0:17:5:      class=0x040100 card=0x45521106 chip=0x30591106 rev=0x50 hdr=0x00
  • Does adding an entry like described in this URL work? lists.freebsd.org/pipermail/freebsd-stable/2011-August/… – Hennes Nov 19 '12 at 12:31
  • Apparaently the device is pci0:0:9:0. Here is the more detailed info: none0@pci0:0:9:0: class=0x070002 card=0x32534348 chip=0x32534348 rev=0x10 hdr=0x00 class = simple comms subclass = UART bar [10] = type I/O Port, range 32, base 0xe800, size 8, enabled bar [14] = type I/O Port, range 32, base 0xe400, size 8, enabled – Kamyar Inanloo Nov 19 '12 at 14:49

If we translate part of the message we get this:

none0@              no driver attached
pci0:0:9:0:         location of the card (on the PCI bus)
class=0x070002      This seems to indicate serial IO cards
card=0x3253 4348    4348 indicates Nanjing Qin Heng Electronics Co. Ltd ( http://wch.cn )
                    The PCI database identifies 0x3253 as a 
                    "Placa PCI serial paralela multiserial"

In other words, we know which card it is. But your kernel did not recognise it. Without recognising it the correct driver was not loaded.

There are three possible solutions from here:

  1. Locate the correct driver (often via the manufacturers website) and use that.
  2. Or update the kernel to a version which understands this device
  3. Or write your own driver.

3)Is a lot of work.

2) Is easiest by updating the kernel, but you are already using the most recent non-current kernel. You could try 10/current, but I doubt it will work. Worth trying though.

Alternatively modify the kernel source. Download it is you did not already have it, then:
cd /usr/src/sys/dev/uart/ vim uart_bus_pci.c /TOPIC Semiconductor TP560 56k modem (searches forward to the line containing TOPIC Semiconductor TP560 56k modem )

Add the line marked with a plus. (use i enter insert mode)

 { 0x151f, 0x0000, 0xffff, 0, "TOPIC Semiconductor TP560 56k modem", 0x10 },
+{ 0x4348, 0x3253, 0xffff, 0, "WinChipHead Dual Port RS-232", 0x10 },
 { 0x9710, 0x9820, 0x1000, 1, "NetMos NM9820 Serial Port", 0x10 },

Save (Escape:wq)

Recompile the kernel. You already did this with puc and COM_MULTIPORT options so you know how it is done. For other readers with similar problems, see http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-building.html

If all goes well the kernel will now [try to] attach a driver. Hopefully one which works.
The latter is not guaranteed since not all serial cards use multipliers in quite the same way.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.