summaryrefslogtreecommitdiff
path: root/sanei/sanei_pio.c
diff options
context:
space:
mode:
Diffstat (limited to 'sanei/sanei_pio.c')
-rw-r--r--sanei/sanei_pio.c154
1 files changed, 10 insertions, 144 deletions
diff --git a/sanei/sanei_pio.c b/sanei/sanei_pio.c
index ee27267..cd379dd 100644
--- a/sanei/sanei_pio.c
+++ b/sanei/sanei_pio.c
@@ -48,6 +48,8 @@
*/
#include "../include/sane/config.h"
+#include "../include/sane/sanei_directio.h"
+/* pick up compatibility defs */
#define BACKEND_NAME sanei_pio
#include "../include/sane/sanei_backend.h" /* pick up compatibility defs */
@@ -57,42 +59,10 @@
#endif
#include <sys/types.h>
-#ifdef HAVE_SYS_IO_H
-# include <sys/io.h> /* use where available (glibc 2.x, for example) */
-# ifndef SANE_HAVE_SYS_IO_H_WITH_INB_OUTB
-# define IO_SUPPORT_MISSING
-# endif
-#elif HAVE_ASM_IO_H
-# include <asm/io.h> /* ugly, but backwards compatible */
-#elif HAVE_SYS_HW_H
-# include <sys/hw.h>
-#elif defined(__i386__) && defined (__GNUC__)
-
-static __inline__ void
-outb (u_char value, u_long port)
-{
- __asm__ __volatile__ ("outb %0,%1"::"a" (value), "d" ((u_short) port));
-}
-
-static __inline__ u_char
-inb (u_long port)
-{
- u_char value;
-
- __asm__ __volatile__ ("inb %1,%0":"=a" (value):"d" ((u_short) port));
- return value;
-}
-
-#else
-# define IO_SUPPORT_MISSING
-#endif
-
#include "../include/sane/sane.h"
#include "../include/sane/sanei.h"
#include "../include/sane/sanei_pio.h"
-#if defined (HAVE_IOPERM) && !defined (IO_SUPPORT_MISSING)
-
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
@@ -161,8 +131,6 @@ static PortRec port[] =
extern int setuid (uid_t);
-static inline int pio_outb (const Port port, u_char val, u_long addr);
-static inline int pio_inb (const Port port, u_char * val, u_long addr);
static inline int pio_wait (const Port port, u_char val, u_char mask);
static inline void pio_ctrl (const Port port, u_char val);
static inline void pio_delay (const Port port);
@@ -173,38 +141,6 @@ static int pio_read (const Port port, u_char * buf, int n);
static int pio_open (const char *dev, SANE_Status * status);
static inline int
-pio_outb (const Port port, u_char val, u_long addr)
-{
-
- if (-1 == port->fd)
- outb (val, addr);
- else
- {
- if (addr != (u_long)lseek (port->fd, addr, SEEK_SET))
- return -1;
- if (1 != write (port->fd, &val, 1))
- return -1;
- }
- return 0;
-}
-
-static inline int
-pio_inb (const Port port, u_char * val, u_long addr)
-{
-
- if (-1 == port->fd)
- *val = inb (addr);
- else
- {
- if (addr != (u_long)lseek (port->fd, addr, SEEK_SET))
- return -1;
- if (1 != read (port->fd, val, 1))
- return -1;
- }
- return 0;
-}
-
-static inline int
pio_wait (const Port port, u_char val, u_char mask)
{
int stat = 0;
@@ -221,7 +157,7 @@ pio_wait (const Port port, u_char val, u_char mask)
for (;;)
{
++poll_count;
- stat = inb (port->base + PIO_STAT);
+ stat = sanei_inb (port->base + PIO_STAT);
if ((stat & mask) == (val & mask))
{
DBG (DL60, "got %02x after %ld tries\n", stat, poll_count);
@@ -261,7 +197,7 @@ pio_ctrl (const Port port, u_char val)
DBG (DL61, " FDXT %s\n", val & PIO_CTRL_FDXT ? "on" : "off");
DBG (DL61, " NSTROBE %s\n", val & PIO_CTRL_NSTROBE ? "on" : "off");
- outb (val, port->base + PIO_CTRL);
+ sanei_outb (port->base + PIO_CTRL, val);
return;
}
@@ -269,7 +205,7 @@ pio_ctrl (const Port port, u_char val)
static inline void
pio_delay (const Port port)
{
- inb (port->base + PIO_STAT); /* delay */
+ sanei_inb (port->base + PIO_STAT); /* delay */
return;
}
@@ -290,8 +226,8 @@ pio_reset (const Port port)
for (n = PIO_APPLYRESET; --n >= 0;)
{
- outb ((PIO_CTRL_IE | PIO_CTRL_NINIT) ^ PIO_CTRL_NINIT,
- port->base + PIO_CTRL);
+ sanei_outb (port->base + PIO_CTRL,
+ (PIO_CTRL_IE | PIO_CTRL_NINIT) ^ PIO_CTRL_NINIT);
}
pio_init (port);
@@ -323,7 +259,7 @@ pio_write (const Port port, const u_char * buf, int n)
#endif
DBG (DL60, "out %02x\n", (int) *buf);
- outb (*buf, port->base + PIO_IOPORT);
+ sanei_outb (port->base + PIO_IOPORT, *buf);
pio_delay (port);
pio_delay (port);
@@ -387,7 +323,7 @@ pio_read (const Port port, u_char * buf, int n)
/* busynack */
#endif
- *buf = inb (port->base + PIO_IOPORT);
+ *buf = sanei_inb (port->base + PIO_IOPORT);
DBG (DL60, "in %02x\n", (int) *buf);
DBG (DL40, "end read byte\n");
}
@@ -465,7 +401,7 @@ pio_open (const char *dev, SANE_Status * status)
port[n].max_time_seconds = 10;
port[n].in_use = 1;
- if (ioperm (port[n].base, 3, 1))
+ if (sanei_ioperm (port[n].base, 3, 1))
{
DBG (1, "sanei_pio_open: cannot get io privilege for port 0x%03lx\n",
port[n].base);
@@ -533,73 +469,3 @@ sanei_pio_write (int fd, const u_char * buf, int n)
return pio_write (&port[fd], buf, n);
}
-
-#else /* !HAVE_IOPERM */
-
-#ifdef __BEOS__
-
-#include <fcntl.h>
-
-SANE_Status
-sanei_pio_open (const char *dev, int *fdp)
-{
- int fp;
-
- /* open internal parallel port */
- fp=open("/dev/parallel/parallel1",O_RDWR);
-
- *fdp=fp;
- if(fp<0) return SANE_STATUS_INVAL;
- return(SANE_STATUS_GOOD);
-}
-
-
-void
-sanei_pio_close (int fd)
-{
- close(fd);
- return;
-}
-
-int
-sanei_pio_read (int fd, u_char * buf, int n)
-{
- return(read(fd,buf,n));
-}
-
-int
-sanei_pio_write (int fd, const u_char * buf, int n)
-{
- return(write(fd,buf,n));
-}
-
-#else /* !__BEOS__ */
-
-SANE_Status
-sanei_pio_open (const char *dev, int *fdp)
-{
- *fdp = -1;
- return SANE_STATUS_INVAL;
-}
-
-
-void
-sanei_pio_close (int fd)
-{
- return;
-}
-
-int
-sanei_pio_read (int fd, u_char * buf, int n)
-{
- return -1;
-}
-
-int
-sanei_pio_write (int fd, const u_char * buf, int n)
-{
- return -1;
-}
-#endif /* __BEOS__ */
-
-#endif /* !HAVE_IOPERM */