I have a FreeBSD-5.1 Stable system running on an Intel motherboard, P4,
2.4Ghz, 1G ram.  I'm trying to attach my APC UPS Backup Pro 1000 and 1100 to
this system to monitor them. One is attached to the serial port and the
other a Belkin F5U103 USB to serial adaptor. I'm using the latest version of
Network UPS Tool (NUT) to monitor them.

To verify the connection to both devices i use Tip which worked fine.

When nut is enable it works fine from the Serial port, but hangs when
accessing the belkin USB adaptor.

Having attached the USB device, i get a /dev/ucom0, as expected.  It appears
that nut hangs on the read to the device.  Writes seem to work ok.   I have
turned on driver debug and get the following traces:

>From Tip:

Oct  9 22:53:20 jrl5 kernel: ubsa0: ucomopen: tp = 0xc61fd200
Oct  9 22:53:20 jrl5 kernel: ucomparam: sc = 0xc60e4b00
Oct  9 22:53:20 jrl5 kernel: ucomstopread: enter
Oct  9 22:53:20 jrl5 kernel: ucomstopread: leave
Oct  9 22:53:20 jrl5 kernel: ubsa_param: sc = 0xc60e4b00
Oct  9 22:53:20 jrl5 kernel: ubsa_baudrate: speed = 9600
Oct  9 22:53:20 jrl5 kernel: ubsa_parity: cflag = 0x4b00
Oct  9 22:53:20 jrl5 kernel: ubsa_databits: cflag = 0x4b00
Oct  9 22:53:20 jrl5 kernel: ubsa_stopbits: cflag = 0x4b00
Oct  9 22:53:20 jrl5 kernel: ubsa_flow: cflag = 0x4b00, iflag = 0x7
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomstartread: start
Oct  9 22:53:20 jrl5 kernel: ucomctl: bits = 0x6, how = 1
Oct  9 22:53:20 jrl5 kernel: ucom_dtr: onoff = 1
Oct  9 22:53:20 jrl5 kernel: ubsa_dtr: onoff = 1
Oct  9 22:53:20 jrl5 kernel: ucom_rts: onoff = 1
Oct  9 22:53:20 jrl5 kernel: ubsa_rts: onoff = 1
Oct  9 22:53:20 jrl5 kernel: ubsa_open: sc = 0xc60e4b00
Oct  9 22:53:20 jrl5 kernel: ucomopen: open pipes in = 129 out = 1
Oct  9 22:53:20 jrl5 kernel: ucomstartread: start
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ubsa0: ucomopen: success
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x402c7413
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x802c7416
Oct  9 22:53:20 jrl5 kernel: ucomstop: 1
Oct  9 22:53:20 jrl5 kernel: ucomstop: read
Oct  9 22:53:20 jrl5 kernel: ucomstopread: enter
Oct  9 22:53:20 jrl5 kernel: ucomreadcb: status = 6
Oct  9 22:53:20 jrl5 kernel: ucomstopread: leave
Oct  9 22:53:20 jrl5 kernel: ucomstop: done
Oct  9 22:53:20 jrl5 kernel: ucomparam: sc = 0xc60e4b00
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x2000740d
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x402c7413
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x802c7416
Oct  9 22:53:20 jrl5 kernel: ucomstop: 1
Oct  9 22:53:20 jrl5 kernel: ucomstop: read
Oct  9 22:53:20 jrl5 kernel: ucomstopread: enter
Oct  9 22:53:20 jrl5 kernel: ucomstopread: leave
Oct  9 22:53:20 jrl5 kernel: ucomstop: done
Oct  9 22:53:20 jrl5 kernel: ucomparam: sc = 0xc60e4b00
Oct  9 22:53:20 jrl5 kernel: ucomstopread: enter
Oct  9 22:53:20 jrl5 kernel: ucomstopread: leave
Oct  9 22:53:20 jrl5 kernel: ubsa_param: sc = 0xc60e4b00
Oct  9 22:53:20 jrl5 kernel: ubsa_baudrate: speed = 2400
Oct  9 22:53:20 jrl5 kernel: ubsa_parity: cflag = 0xcb00
Oct  9 22:53:20 jrl5 kernel: ubsa_databits: cflag = 0xcb00
Oct  9 22:53:20 jrl5 kernel: ubsa_stopbits: cflag = 0xcb00
Oct  9 22:53:20 jrl5 kernel: ubsa_flow: cflag = 0xcb00, iflag = 0x2e02
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomstartread: start
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x8004667e
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomioctl: cmd = 0x8004667d
Oct  9 22:53:20 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:20 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:53:20 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x20000
Oct  9 22:53:20 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x90
Oct  9 22:53:20 jrl5 kernel: ubsa_get_status
Oct  9 22:53:20 jrl5 kernel: ucom_status_change: DCD changed to 1
Oct  9 22:53:24 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x30001
Oct  9 22:53:24 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:24 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:53:24 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:53:24 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:53:24 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:53:24 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:24 jrl5 kernel: ucomreadcb: status = 0
Oct  9 22:53:24 jrl5 kernel: ucomreadcb: got 1 chars, tp = 0xc61fd200
Oct  9 22:53:24 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:24 jrl5 kernel: ucomstartread: start
Oct  9 22:53:24 jrl5 kernel: ucomread: error = 0
Oct  9 22:53:24 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x40000
Oct  9 22:53:24 jrl5 kernel: ucomreadcb: status = 0
Oct  9 22:53:24 jrl5 kernel: ucomreadcb: got 3 chars, tp = 0xc61fd200
Oct  9 22:53:24 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:24 jrl5 last message repeated 2 times
Oct  9 22:53:24 jrl5 kernel: ucomstartread: start
Oct  9 22:53:24 jrl5 kernel: ucomread: error = 0
Oct  9 22:53:24 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x50000
Oct  9 22:53:28 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x60001
Oct  9 22:53:28 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:28 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:53:28 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:53:28 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:53:28 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:53:28 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:28 jrl5 kernel: ucomreadcb: status = 0
Oct  9 22:53:28 jrl5 kernel: ucomreadcb: got 1 chars, tp = 0xc61fd200
Oct  9 22:53:28 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:28 jrl5 kernel: ucomstartread: start
Oct  9 22:53:28 jrl5 kernel: ucomread: error = 0
Oct  9 22:53:28 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x70000
Oct  9 22:53:28 jrl5 kernel: ucomreadcb: status = 0
Oct  9 22:53:28 jrl5 kernel: ucomreadcb: got 3 chars, tp = 0xc61fd200
Oct  9 22:53:28 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:53:28 jrl5 last message repeated 2 times
Oct  9 22:53:28 jrl5 kernel: ucomstartread: start
Oct  9 22:53:28 jrl5 kernel: ucomread: error = 0
Oct  9 22:53:28 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x80000
Oct  9 22:53:32 jrl5 kernel: ucomread: error = -1
Oct  9 22:53:32 jrl5 kernel: ubsa0: ucomclose: unit = 0
Oct  9 22:53:32 jrl5 kernel: ucomstop: 1
Oct  9 22:53:32 jrl5 kernel: ucomstop: read
Oct  9 22:53:32 jrl5 kernel: ucomstopread: enter
Oct  9 22:53:32 jrl5 kernel: ucomreadcb: status = 6
Oct  9 22:53:32 jrl5 kernel: ucomstopread: leave
Oct  9 22:53:32 jrl5 kernel: ucomstop: done
Oct  9 22:53:32 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:53:32 jrl5 kernel: ucomstop: 3
Oct  9 22:53:32 jrl5 kernel: ucomstop: read
Oct  9 22:53:32 jrl5 kernel: ucomstopread: enter
Oct  9 22:53:32 jrl5 kernel: ucomstopread: leave
Oct  9 22:53:32 jrl5 kernel: ucomstop: write
Oct  9 22:53:32 jrl5 kernel: ucomstop: done
Oct  9 22:53:32 jrl5 kernel: ucom_cleanup: closing pipes
Oct  9 22:53:32 jrl5 kernel: ucom_shutdown
Oct  9 22:53:32 jrl5 kernel: ucomctl: bits = 0x2, how = 2
Oct  9 22:53:32 jrl5 kernel: ucom_dtr: onoff = 0
Oct  9 22:53:32 jrl5 kernel: ubsa_dtr: onoff = 0
Oct  9 22:53:32 jrl5 kernel: ucom_rts: onoff = 1
Oct  9 22:53:32 jrl5 kernel: ubsa_rts: onoff = 1
Oct  9 22:53:32 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x18
Oct  9 22:53:32 jrl5 kernel: ubsa_get_status
Oct  9 22:53:32 jrl5 kernel: ucom_status_change: DCD changed to 0
Oct  9 22:53:32 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x10
Oct  9 22:53:32 jrl5 kernel: ubsa_get_status
Oct  9 22:53:33 jrl5 kernel: ubsa_close: close

>From Nut:

Oct  9 22:54:23 jrl5 kernel: ubsa0: ucomopen: tp = 0xc61fd200
Oct  9 22:54:23 jrl5 kernel: ucomparam: sc = 0xc60e4b00
Oct  9 22:54:23 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:23 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:23 jrl5 kernel: ubsa_param: sc = 0xc60e4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_baudrate: speed = 9600
Oct  9 22:54:23 jrl5 kernel: ubsa_parity: cflag = 0x4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_databits: cflag = 0x4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_stopbits: cflag = 0x4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_flow: cflag = 0x4b00, iflag = 0x7
Oct  9 22:54:23 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomstartread: start
Oct  9 22:54:23 jrl5 kernel: ucomctl: bits = 0x6, how = 1
Oct  9 22:54:23 jrl5 kernel: ucom_dtr: onoff = 1
Oct  9 22:54:23 jrl5 kernel: ubsa_dtr: onoff = 1
Oct  9 22:54:23 jrl5 kernel: ucom_rts: onoff = 1
Oct  9 22:54:23 jrl5 kernel: ubsa_rts: onoff = 1
Oct  9 22:54:23 jrl5 kernel: ubsa_open: sc = 0xc60e4b00
Oct  9 22:54:23 jrl5 kernel: ucomopen: open pipes in = 129 out = 1
Oct  9 22:54:23 jrl5 kernel: ucomstartread: start
Oct  9 22:54:23 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ubsa0: ucomopen: success
Oct  9 22:54:23 jrl5 kernel: ucomioctl: cmd = 0x8004667e
Oct  9 22:54:23 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomioctl: cmd = 0x8004667d
Oct  9 22:54:23 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomioctl: cmd = 0x402c7413
Oct  9 22:54:23 jrl5 kernel: disc_optim: can't bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomioctl: cmd = 0x802c7414
Oct  9 22:54:23 jrl5 kernel: ucomparam: sc = 0xc60e4b00
Oct  9 22:54:23 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:23 jrl5 kernel: ucomreadcb: status = 6
Oct  9 22:54:23 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:23 jrl5 kernel: ubsa_param: sc = 0xc60e4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_baudrate: speed = 2400
Oct  9 22:54:23 jrl5 kernel: ubsa_parity: cflag = 0x4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_databits: cflag = 0x4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_stopbits: cflag = 0x4b00
Oct  9 22:54:23 jrl5 kernel: ubsa_flow: cflag = 0x4b00, iflag = 0x801
Oct  9 22:54:23 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomstartread: start
Oct  9 22:54:23 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:23 jrl5 kernel: ucomstop: 1
Oct  9 22:54:23 jrl5 kernel: ucomstop: read
Oct  9 22:54:23 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:23 jrl5 kernel: ucomreadcb: status = 6
Oct  9 22:54:23 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:23 jrl5 kernel: ucomstop: done
Oct  9 22:54:23 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:23 jrl5 kernel: ucomstop: 1
Oct  9 22:54:23 jrl5 kernel: ucomstop: read
Oct  9 22:54:23 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:23 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:23 jrl5 kernel: ucomstop: done
Oct  9 22:54:23 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:23 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x20001
Oct  9 22:54:23 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:23 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:23 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:23 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:23 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:23 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:24 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x90
Oct  9 22:54:24 jrl5 kernel: ubsa_get_status
Oct  9 22:54:24 jrl5 kernel: ucom_status_change: DCD changed to 1
Oct  9 22:54:25 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x30000
Oct  9 22:54:28 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:29 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:29 jrl5 kernel: ucomstop: 1
Oct  9 22:54:29 jrl5 kernel: ucomstop: read
Oct  9 22:54:29 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:29 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:29 jrl5 kernel: ucomstop: done
Oct  9 22:54:29 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:29 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:29 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x40001
Oct  9 22:54:29 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:29 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:29 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:29 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x50000
Oct  9 22:54:29 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:29 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:29 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:32 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:32 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:32 jrl5 kernel: ucomstop: 1
Oct  9 22:54:32 jrl5 kernel: ucomstop: read
Oct  9 22:54:32 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:32 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:32 jrl5 kernel: ucomstop: done
Oct  9 22:54:32 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:32 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:32 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x60001
Oct  9 22:54:32 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:32 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:32 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:32 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:32 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:32 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:33 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x70000
Oct  9 22:54:36 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:37 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:37 jrl5 kernel: ucomstop: 1
Oct  9 22:54:37 jrl5 kernel: ucomstop: read
Oct  9 22:54:37 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:37 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:37 jrl5 kernel: ucomstop: done
Oct  9 22:54:37 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:37 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:37 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x80001
Oct  9 22:54:37 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:37 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:37 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:37 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x90000
Oct  9 22:54:37 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:37 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:37 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:40 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:40 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:40 jrl5 kernel: ucomstop: 1
Oct  9 22:54:40 jrl5 kernel: ucomstop: read
Oct  9 22:54:40 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:40 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:40 jrl5 kernel: ucomstop: done
Oct  9 22:54:40 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:40 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:40 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0xa0001
Oct  9 22:54:40 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:40 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:40 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:40 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:40 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:40 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:40 jrl5 kernel: ubsa0: ubsa lsr = 0x61, msr = 0x90
Oct  9 22:54:40 jrl5 kernel: ubsa_get_status
Oct  9 22:54:40 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x90
Oct  9 22:54:40 jrl5 kernel: ubsa_get_status
Oct  9 22:54:41 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0xb0000
Oct  9 22:54:44 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:45 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:45 jrl5 kernel: ucomstop: 1
Oct  9 22:54:45 jrl5 kernel: ucomstop: read
Oct  9 22:54:45 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:45 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:45 jrl5 kernel: ucomstop: done
Oct  9 22:54:45 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:45 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:45 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0xc0001
Oct  9 22:54:45 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:45 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:45 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:45 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0xd0000
Oct  9 22:54:45 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:45 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:45 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:48 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:48 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:48 jrl5 kernel: ucomstop: 1
Oct  9 22:54:48 jrl5 kernel: ucomstop: read
Oct  9 22:54:48 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:48 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:48 jrl5 kernel: ucomstop: done
Oct  9 22:54:48 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:48 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:48 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0xe0001
Oct  9 22:54:48 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:48 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:48 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:48 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:48 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:48 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:48 jrl5 kernel: ubsa0: ubsa lsr = 0x61, msr = 0x90
Oct  9 22:54:48 jrl5 kernel: ubsa_get_status
Oct  9 22:54:48 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x90
Oct  9 22:54:48 jrl5 kernel: ubsa_get_status
Oct  9 22:54:49 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0xf0000
Oct  9 22:54:52 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:53 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:53 jrl5 kernel: ucomstop: 1
Oct  9 22:54:53 jrl5 kernel: ucomstop: read
Oct  9 22:54:53 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:53 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:53 jrl5 kernel: ucomstop: done
Oct  9 22:54:53 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:53 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:53 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x100001
Oct  9 22:54:53 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:53 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:53 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:53 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x110000
Oct  9 22:54:53 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:53 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:53 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:53 jrl5 kernel: ubsa0: ubsa lsr = 0x61, msr = 0x90
Oct  9 22:54:53 jrl5 kernel: ubsa_get_status
Oct  9 22:54:53 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x90
Oct  9 22:54:53 jrl5 kernel: ubsa_get_status
Oct  9 22:54:56 jrl5 kernel: ucomread: error = 4
Oct  9 22:54:56 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:54:56 jrl5 kernel: ucomstop: 1
Oct  9 22:54:56 jrl5 kernel: ucomstop: read
Oct  9 22:54:56 jrl5 kernel: ucomstopread: enter
Oct  9 22:54:56 jrl5 kernel: ucomstopread: leave
Oct  9 22:54:56 jrl5 kernel: ucomstop: done
Oct  9 22:54:56 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:54:56 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:54:56 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x120001
Oct  9 22:54:56 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:56 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:54:56 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:54:56 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:54:56 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:54:56 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:54:57 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x130000
Oct  9 22:55:00 jrl5 kernel: ucomread: error = 4
Oct  9 22:55:01 jrl5 kernel: ucomioctl: cmd = 0x80047410
Oct  9 22:55:01 jrl5 kernel: ucomstop: 1
Oct  9 22:55:01 jrl5 kernel: ucomstop: read
Oct  9 22:55:01 jrl5 kernel: ucomstopread: enter
Oct  9 22:55:01 jrl5 kernel: ucomstopread: leave
Oct  9 22:55:01 jrl5 kernel: ucomstop: done
Oct  9 22:55:01 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:55:01 jrl5 kernel: ucomioctl: ttioctl: error = 0
Oct  9 22:55:01 jrl5 kernel: ucomwrite: tp = 0xc61fd200, flag = 0x140001
Oct  9 22:55:01 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:55:01 jrl5 kernel: ucomstart: 1 chars
Oct  9 22:55:01 jrl5 kernel: ucomwrite: error = 0
Oct  9 22:55:01 jrl5 kernel: ucomread: tp = 0xc61fd200, flag = 0x150000
Oct  9 22:55:01 jrl5 kernel: ucomwritecb: status = 0
Oct  9 22:55:01 jrl5 kernel: ucomwritecb: cc = 1
Oct  9 22:55:01 jrl5 kernel: ucomstart: sc = 0xc60e4b00
Oct  9 22:55:01 jrl5 kernel: ubsa0: ubsa lsr = 0x61, msr = 0x90
Oct  9 22:55:01 jrl5 kernel: ubsa_get_status
Oct  9 22:55:01 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x90
Oct  9 22:55:01 jrl5 kernel: ubsa_get_status
Oct  9 22:55:04 jrl5 kernel: ucomread: error = 4
Oct  9 22:55:04 jrl5 kernel: ubsa0: ucomclose: unit = 0
Oct  9 22:55:04 jrl5 kernel: ucomstop: 1
Oct  9 22:55:04 jrl5 kernel: ucomstop: read
Oct  9 22:55:04 jrl5 kernel: ucomstopread: enter
Oct  9 22:55:04 jrl5 kernel: ucomstopread: leave
Oct  9 22:55:04 jrl5 kernel: ucomstop: done
Oct  9 22:55:04 jrl5 kernel: disc_optim: bypass l_rint
Oct  9 22:55:04 jrl5 kernel: ucomstop: 3
Oct  9 22:55:04 jrl5 kernel: ucomstop: read
Oct  9 22:55:04 jrl5 kernel: ucomstopread: enter
Oct  9 22:55:04 jrl5 kernel: ucomstopread: leave
Oct  9 22:55:04 jrl5 kernel: ucomstop: write
Oct  9 22:55:04 jrl5 kernel: ucomstop: done
Oct  9 22:55:04 jrl5 kernel: ucom_cleanup: closing pipes
Oct  9 22:55:04 jrl5 kernel: ucom_shutdown
Oct  9 22:55:04 jrl5 kernel: ucomctl: bits = 0x2, how = 2
Oct  9 22:55:04 jrl5 kernel: ucom_dtr: onoff = 0
Oct  9 22:55:04 jrl5 kernel: ubsa_dtr: onoff = 0
Oct  9 22:55:04 jrl5 kernel: ucom_rts: onoff = 1
Oct  9 22:55:04 jrl5 kernel: ubsa_rts: onoff = 1
Oct  9 22:55:04 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x18
Oct  9 22:55:04 jrl5 kernel: ubsa_get_status
Oct  9 22:55:04 jrl5 kernel: ucom_status_change: DCD changed to 0
Oct  9 22:55:04 jrl5 kernel: ubsa0: ubsa lsr = 0x60, msr = 0x10
Oct  9 22:55:04 jrl5 kernel: ubsa_get_status
Oct  9 22:55:05 jrl5 kernel: ubsa_close: close

I wrote a test case to see if i could figure out what the difference was
between what tip and nut was doing.  see below:

#include <sys/types.h>
#include <sys/file.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <sys/ioctl.h>

#include <termios.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pwd.h>
#include <ctype.h>
#include <setjmp.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>

static int      FD;     /* open file descriptor */
static char     *cp="/dev/ucom0";
static int      deadfl = 0;
int DC = 1;
int TAND = 1;

void ttysetup();
main() {
        int status;
        char buf[20];

        FD = open(cp, (O_RDWR | O_NONBLOCK ));
        if (FD < 0) {
                perror(cp);
                deadfl = 1;
        }

        if (!deadfl) {
                struct termios cntrl;
                tcgetattr(FD, &cntrl);
                if (!DC)
                        cntrl.c_cflag |= HUPCL;
                tcsetattr(FD, TCSAFLUSH, &cntrl);
                ioctl(FD, TIOCEXCL, 0);
        } else {
                perror(cp);
                exit(-1);
        }

        ttysetup(B2400);

        printf("Before write\n");
        status = write(FD, "Y\n", 2);
        if (status < 0) {
                perror(cp);
                exit(-2);
        }

        sleep(1);
        printf("Before read\n");
        status = read(FD, buf, 15);
        if (status < 0) {
                perror(cp);
                exit(-2);
        }

        printf("RECV: %s\n", buf);

        close(FD);
}

/*
 * Set up the "remote" tty's state
 */
void
ttysetup(speed)
        int speed;
{
        struct termios  cntrl;

        tcgetattr(FD, &cntrl);
        cfsetospeed(&cntrl, speed);
        cfsetispeed(&cntrl, speed);
        cntrl.c_cflag &= ~(CSIZE|PARENB);
        cntrl.c_cflag |= CS8;
        if (DC)
                cntrl.c_cflag |= CLOCAL;
        cntrl.c_iflag &= ~(ISTRIP|ICRNL);
        cntrl.c_oflag &= ~OPOST;
        cntrl.c_lflag &= ~(ICANON|ISIG|IEXTEN|ECHO);
        cntrl.c_cc[VMIN] = 1;
        cntrl.c_cc[VTIME] = 0;
        if (TAND)
                cntrl.c_iflag |= IXOFF;
        tcsetattr(FD, TCSAFLUSH, &cntrl);
}


This program kept returning an error code 35, "Resource Temporairaly
Unabailable" message until i added the "sleep" line before the read then it
worked fine.

Ok, so my question is this, why would the system hang on reads to the
device?
When tip works fine.  What could be the coding difference that would cause
this to happen?

Any help on this would be helpful!

Also,   is there any good documentation on the USB subsystem and how it is
designed and put together?

thanks
jeff



_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to