Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Dec 2011 20:43:12 -0500
From:      "Dieter BSD" <dieterbsd@engineer.com>
To:        freebsd-drivers@freebsd.org
Subject:   Attempting to add support for RS-232 card, need help
Message-ID:  <20111226014313.218240@gmx.com>

next in thread | raw e-mail | index | archive | help
I am attempting to add support for a PCI RS-232 card.

http://www.newegg.com/Product/Product.aspx?Item=N82E16815124082

"PCI two serial ports card with SystemBase Chipset SB16C1052PCI
 Easy Plug & installation automatically selects IRQ and I/O address
 Fully compliant with PCI Local Bus Specification Revision 2.3
 Supports PCI power management Supports PCI IRQ sharing
 feature, saves valuable resources for other add-on cards Compatible
 with industrial standard 16C550 UART On-chip"

FreeBSD 8.2
amd64

pciconf says:
none5@pci0:1:10:0: class=0x070002 card=0x4d0214a1 chip=0x4d0214a1 rev=0xb0 hdr=0x00
    vendor     = 'Systembase Co Ltd'
    class      = simple comms
    subclass   = UART
    bar   [10] = type I/O Port, range 32, base 0xa400, size 16, enabled
    bar   [14] = type I/O Port, range 32, base 0xa000, size 64, enabled
    cap 01[40] = powerspec 3  supports D0 D3  current D0

Adding the following to pucdata.c gets it partly working

        {   0x14a1,                /* vendor - card vendor ID */
            0x4d02,                /* device - card ID */
            0x14a1,                /* subvendor - card vendor ID */
            0x4d02,                /* subvendor - card ID */
            "Systembase Co Ltd",   /* desc */
            DEFAULT_RCLK,          /* clock */
            PUC_PORT_2S,           /* number of ports */
            0x10,                  /*   rid - Rid of first port */
            0,                     /* d_rid - Delta rid of next ports */
            8,                     /* d_ofs - Delta offset of next ports */
                                   /* config_function */
        },

<Systembase Co Ltd> port 0xa400-0xa40f,0xa000-0xa03f irq 17 at device 10.0 on pci1
puc0: DEBUG puc.c puc_get_bar(rid=16) Get an unused entry for us to fill.
puc0: DEBUG puc.c puc_get_bar(rid=-1) found BAR entry
puc0: DEBUG puc.c puc_get_bar(rid=16) returning bar=0xffffff0001c7b418
puc0: DEBUG puc.c puc_get_bar(rid=16) found BAR entry
puc0: [FILTER]
uart2: DEBUG rx fifo count = 64
uart2: DEBUG rx fifo count = 64
<16750 or compatible> on puc0
uart2: [FILTER]
uart3: DEBUG rx fifo count = 64
uart3: DEBUG rx fifo count = 64
<16750 or compatible> on puc0
uart3: [FILTER]

devinfo says:
            puc0 pnpinfo vendor=0x14a1 device=0x4d02 subvendor=0x14a1 subdevice=0x4d02 class=0x070002 at slot=10 function=0
                Interrupt request lines:
                    17
                I/O ports:
                    0xa400-0xa40f
              uart2
                  puc0 I/O port mapping:
                      41984-41991
                  puc0 port numbers:
                      1
              uart3
                  puc0 I/O port mapping:
                      41992-41999
                  puc0 port numbers:
                      2

cu to the port toggles RTS and DTR. And they go back when exiting cu.
But if I connect the port to another system (CTS on, CD off), then
cu hangs when exiting so I have to kill the process.  Also, no data
is transmitted or received, not even garbled data from an incorrect
baud rate, the TD LED doesn't flicker.  The fifo is supposed to be
256 bytes but the kernel says 64 (see above debugging printf output).

The mainboard's 2 RS-232 ports work fine.

Is puc the correct driver for this card?
Do I need a config_function?
What does [FILTER] (in dmesg) mean?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20111226014313.218240>