On Mon, Aug 07, 2000 at 07:28:57PM -0700, David Hawkins wrote:
> 3. ran 'make config' and setup the parallel ports as loadable
> modules - same for ppdev. Note: I also ran make xconfig to
> do this, however, although ppdev showed up in the selection
> menu, attempts to alter the check-box gave an error (visible
> back in the xterm it was executed from). I recompiled the
> kernel, updated the slocate database and ran 'slocate ppdev'.
> Although there were some new ppdev directories generated
> during the make process, I didn't get a ppdev.o file
> generated. Any comments on this?
Did you do 'make modules'? slocate won't show you anything that's
been created since the last updatedb: did you look for ppdev.o in the
right place (drivers/char)?
> 6. I then ran variations on the code below and have the
> following observations/suggestions:
>
> - the call to PPNEGOT fails. I didn't delve too far into the
> source code for this call, but does this call require a response from
> the 1284 device? If it does, what are the address/data cycles -
> I can easily implement the appropriate response in my device.
It performs IEEE 1284 negotiation. If your device doesn't do that,
just don't bother with PPNEGOT.
> - both writes appear to go to the address port, (using PPSETMODE to
> select the data port didn't seem to work).
All PPSETMODE does it tell the ppdev driver which IEEE 1284 mode
should be used for read() and write().
> I looked at the source code to see what the function calling
> sequence looks like and get:
>
> User space read/write are implemented via pp_read / pp_write,
> which are implemented via parport_read / parport_write
> in which a switch statement selects from the four functions
> ieee1284_epp_[read/write]_[addr/data].
If the lowlevel driver (parport_pc in your case) provides
hardware-accelerated functions for those transfers then they are used
instead.
In parport_pc port->ops gets set to use ieee1284_xxx by default; the
hardware detection routines sometimes override them.
> So why the added complexity in the implementations of the
> ieee1284_epp_[read/write]_[addr/data] functions and why does it
> look like the calls resolve to SPP reads/writes instead of EPP address
> or data reads/writes?
EPP transfers can be done without EPP hardware; if the hardware is
there it can be used, otherwise you have to use SPP registers.
> There is a note at the top of these functions mentioning they are
> untested.
> If someone can give me the rational behind their implementation,
> I will happily provide 'testing' of these functions in my environment.
The ieee1284_xxx routines? They just do the EPP handshaking. Note
the difference between the EPP on-the-wire protocol and the chipset
hardware that does it. Take a look at IEEE 1284.
> In the ParPort docs, it is not clear what the difference between
> read()
> write() calls and ioctls with PPRDATA and PPWDATA.
PPRDATA and PPWDATA deal with the current state of the data pins.
Nothing more.
read()/write() perform IEEE 1284 data/address transfers.
> Looking at
> the source code, I see that the ioctls resolve to parport_write_data
> and parport_read_data, which as mentioned above resolve to SPP
> read/writes in parport_pc.h. Would it be more appropriate for these
> calls to mimic pp_read and pp_write?
Not at all: pp_read and pp_write are for doing IEEE 1284 data/address
transfers, whereas parport_read_data/parport_write_data ===
PPRDATA/PPWDATA.
Tim.
*/
-- To unsubscribe, send mail to: linux-parport-request@torque.net --
-- with the single word "unsubscribe" in the body of the message. --
This archive was generated by hypermail 2b29 : Fri Aug 11 2000 - 11:50:53 EDT