From owner-freebsd-drivers@FreeBSD.ORG Mon Dec 26 01:43:16 2011 Return-Path: Delivered-To: freebsd-drivers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0ABB4106566B for ; Mon, 26 Dec 2011 01:43:16 +0000 (UTC) (envelope-from dieterbsd@engineer.com) Received: from mailout-us.gmx.com (mailout-us.gmx.com [74.208.5.67]) by mx1.freebsd.org (Postfix) with SMTP id BF2F38FC0C for ; Mon, 26 Dec 2011 01:43:15 +0000 (UTC) Received: (qmail 10647 invoked by uid 0); 26 Dec 2011 01:43:14 -0000 Received: from 67.206.184.205 by rms-us016 with HTTP Content-Type: text/plain; charset="utf-8" Date: Sun, 25 Dec 2011 20:43:12 -0500 From: "Dieter BSD" Message-ID: <20111226014313.218240@gmx.com> MIME-Version: 1.0 To: freebsd-drivers@freebsd.org X-Authenticated: #74169980 X-Flags: 0001 X-Mailer: GMX.com Web Mailer x-registered: 0 Content-Transfer-Encoding: 8bit X-GMX-UID: ZrSFbiQ03zOlNR3dAHAhnOx+IGRvb4BA Subject: Attempting to add support for RS-232 card, need help X-BeenThere: freebsd-drivers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Writing device drivers for FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Dec 2011 01:43:16 -0000 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 */        }, 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?