lpt(4) and non-blocking read
Peter Jeremy
peterjeremy at optushome.com.au
Fri Dec 28 21:30:55 PST 2007
On Fri, Dec 28, 2007 at 07:50:37PM -0500, Greg Troxel wrote:
>1) On a read system call, if there is any data already read, return it.
>If not, invoke a read bulk transfer, and if it completes very quickly
>return the data. If not, return EWOULDBLOCK. This perhaps fudges a bit
>on non-blocking vs fast.
>
>2) On open, start a read transfer, and as each transfer completes, if
>there is room in the input buffer, start a new one. On a read system
>call, return whatever data is already in the buffer (and therefore start
>a read transfer if space is newly freed).
Option 1 would seem to be the safest and easiest.
>Besides non-blocking reads, there's the issue of select/poll for read.
>To make this work, I think approach #2 is needed, because if no read
>transfer has been done, there's no way to know if there's data.
An alternative approach would be to have poll/select-for-read initiate
a read transfer if there is no data available (ie if the poll/select
would block).
Note that, at present, ulpt(4) on FreeBSD doesn't support any read
buffering. I've been bitten by this and there's a patch in PR
usb/91538 to implement read buffering.
--
Peter Jeremy
Please excuse any delays as the result of my ISP's inability to implement
an MTA that is either RFC2821-compliant or matches their claimed behaviour.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-usb/attachments/20071229/704a16b0/attachment.pgp
More information about the freebsd-usb
mailing list