Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Feb 1997 22:43:26 +0100
From:      j@uriah.heep.sax.de (J Wunsch)
To:        dario@escher.usr.dsi.unimi.it (Dario Maggiorini)
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: parallel read
Message-ID:  <Mutt.19970219224326.j@uriah.heep.sax.de>
In-Reply-To: <199702191142.DAA18699@freefall.freebsd.org>; from Dario Maggiorini on Feb 19, 1997 12:37:49 %2B0100
References:  <199702191142.DAA18699@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
As Dario Maggiorini wrote:

> has anyone of you already 
> 
> 1 - modified the parallel driver

Dunno.

> 2 - a pointer to some kind of documentation

Add the desired input function as an ioctl into lptioctl.  You're
going to read 4 or 5 bits a time only, so you can conveniently pass
them back to the caller within a single `int' value.  I wouldn't
bother setting up a lptread() function for this.

> 3 - write asm code to access directly the memory location 
> 	( i believe it's possible but can't write it by myself, i'm in a hurry
> 	and has no time to learn asm details )

No need for hairy asm details.  They are well-hidden from you, you're
only operating with C or pseudo-C code at the driver level.  All you
need is a single inb() call.  Have a look into /sys/i386/isa/lpt.c,
and you should figure this out within an hour, provided you've got
reasonable understanding of C coding.

The ioctl command names for lpt(4) are defined in
/sys/i386/include/lpt.h, so they are usable as #include <machine/lpt.h>
from a userland program.  Simply add there a:

#define LPT_READSTAT	_IOR('p', 2, int)	/* get status bits */

Remember that your calling program must pass the _address_ of an int:

#include <sys/ioctl.h>
#include <machine/lpt.h>

...

	int status, fd;

	if ((fd = open(PATH_LP, O_RDONLY)) == -1) {
		err(...);
	}
	...
	if (ioctl(fd, LPT_READSTAT, &status) == -1) {
		err(1, "Can't read status");
	}

-- 
cheers, J"org

joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)



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