diff options
Diffstat (limited to 'sanei/sanei_pio.c')
| -rw-r--r-- | sanei/sanei_pio.c | 154 | 
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 */  | 
