diff options
Diffstat (limited to 'backend/umax_pp_low.c')
| -rw-r--r-- | backend/umax_pp_low.c | 378 | 
1 files changed, 1 insertions, 377 deletions
| diff --git a/backend/umax_pp_low.c b/backend/umax_pp_low.c index 35cefa9..d1f3c16 100644 --- a/backend/umax_pp_low.c +++ b/backend/umax_pp_low.c @@ -53,9 +53,7 @@  #ifdef HAVE_SYS_TYPES_H  #include <sys/types.h>  #endif -#ifdef HAVE_SYS_IO_H -#include <sys/io.h> -#endif +#include "../include/sane/sanei_directio.h"  #ifdef HAVE_UNISTD_H  #include <unistd.h>  #endif @@ -85,380 +83,6 @@  #include <linux/ppdev.h>  #endif -/*************************************************/ -/* here we define sanei_inb/sanei_outb based on  */ -/* OS dependent inb/outb definitions             */ -/* SANE_INB is defined whenever a valid inb/outb */ -/* definition has been found                     */ -/* once all these work, it might be moved to     */ -/* sanei_pio.c                                   */ -/*************************************************/ - -#ifdef ENABLE_PARPORT_DIRECTIO - -#if (! defined SANE_INB ) && ( defined HAVE_SYS_HW_H )	/* OS/2 EMX case */ -#define SANE_INB 1 -static int -sanei_ioperm (int start, int length, int enable) -{ -  if (enable) -    return _portaccess (port, port + length - 1); -  return 0; -} - -static unsigned char -sanei_inb (unsigned int port) -{ -  return _inp8 (port) & 0xFF; -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ -  _outp8 (port, value); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ -  _inps8 (port, (unsigned char *) addr, count); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ -  _inps32 (port, (unsigned long *) addr, count); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  _outps8 (port, (unsigned char *) addr, count); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  _outps32 (port, (unsigned long *) addr, count); -} -#endif /* OS/2 EMX case */ - - - -#if (! defined SANE_INB ) && ( defined HAVE_MACHINE_CPUFUNC_H )	/* FreeBSD case */ -#define SANE_INB 2 -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_I386_SET_IOPERM -  return i386_set_ioperm (start, length, enable); -#else -  int fd = 0; - -  /* makes compilers happy */ -  start = length + enable; -  fd = open ("/dev/io", O_RDONLY); -  if (fd > 0) -    return 0; -  return -1; -#endif -} - -static unsigned char -sanei_inb (unsigned int port) -{ -  return inb (port); -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ -  outb (port, value); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ -  insb (port, addr, count); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ -  insl (port, addr, count); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  outsb (port, addr, count); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  outsl (port, addr, count); -} -#endif /* FreeBSD case */ - - -/* linux GCC on i386 */ -#if ( ! defined SANE_INB ) && ( defined HAVE_SYS_IO_H ) && ( defined __GNUC__ ) && ( defined __i386__ ) -#define SANE_INB 3 - -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_IOPERM -  return ioperm (start, length, enable); -#else -  /* linux without ioperm ? hum ... */ -  /* makes compilers happy */ -  start = length + enable; -  return 0; -#endif -} - -static unsigned char -sanei_inb (unsigned int port) -{ -  return inb (port); -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ -  outb (value, port); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ -  insb (port, addr, count); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ -  insl (port, addr, count); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  outsb (port, addr, count); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  /* oddly, 32 bit I/O are done with outsw instead of the expected outsl */ -  outsw (port, addr, count); -} -#endif /* linux GCC on i386 */ - - -/* linux GCC non i386 */ -#if ( ! defined SANE_INB ) && ( defined HAVE_SYS_IO_H ) && ( defined __GNUC__ ) && ( ! defined __i386__ ) -#define SANE_INB 4 -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_IOPERM -  return ioperm (start, length, enable); -#else -  /* linux without ioperm ? hum ... */ -  /* makes compilers happy */ -  start = length + enable; -  return 0; -#endif -} - -static unsigned char -sanei_inb (unsigned int port) -{ -  return inb (port); -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ -  outb (value, port); -} - -static void -sanei_insb (unsigned int port, unsigned char *addr, unsigned long count) -{ -  unsigned int i; - -  for (i = 0; i < count; i++) -    addr[i] = sanei_inb (port); -} - -static void -sanei_insl (unsigned int port, unsigned char *addr, unsigned long count) -{ -  unsigned int i; - -  for (i = 0; i < count * 4; i++) -    addr[i] = sanei_inb (port); -} - -static void -sanei_outsb (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  unsigned int i; - -  for (i = 0; i < count; i++) -    sanei_outb (port, addr[i]); -} - -static void -sanei_outsl (unsigned int port, const unsigned char *addr, -	     unsigned long count) -{ -  unsigned int i; - -  for (i = 0; i < count * 4; i++) -    sanei_outb (port, addr[i]); -} -#endif /* linux GCC non i386 */ - - -/* ICC on i386 */ -#if ( ! defined SANE_INB ) && ( defined __INTEL_COMPILER ) && ( defined __i386__ ) -#define SANE_INB 5 -static int -sanei_ioperm (int start, int length, int enable) -{ -#ifdef HAVE_IOPERM -  return ioperm (start, length, enable); -#else -  /* ICC without ioperm() ... */ -  /* makes compilers happy */ -  start = length + enable; -  return 0; -#endif -} -static unsigned char -sanei_inb (unsigned int port) -{ -  unsigned char ret; - -  __asm__ __volatile__ ("inb %%dx,%%al":"=a" (ret):"d" ((u_int) port)); -  return ret; -} - -static void -sanei_outb (unsigned int port, unsigned char value) -{ -  __asm__ __volatile__ ("outb %%al,%%dx"::"a" (value), "d" ((u_int) port)); -} - -static void -sanei_insb (unsigned int port, void *addr, unsigned long count) -{ -  __asm__ __volatile__ ("rep ; insb":"=D" (addr), "=c" (count):"d" (port), -			"0" (addr), "1" (count)); -} - -static void -sanei_insl (unsigned int port, void *addr, unsigned long count) -{ -  __asm__ __volatile__ ("rep ; insl":"=D" (addr), "=c" (count):"d" (port), -			"0" (addr), "1" (count)); -} - -static void -sanei_outsb (unsigned int port, const void *addr, unsigned long count) -{ -  __asm__ __volatile__ ("rep ; outsb":"=S" (addr), "=c" (count):"d" (port), -			"0" (addr), "1" (count)); -} - -static void -sanei_outsl (unsigned int port, const void *addr, unsigned long count) -{ -  __asm__ __volatile__ ("rep ; outsl":"=S" (addr), "=c" (count):"d" (port), -			"0" (addr), "1" (count)); -} - -#endif /* ICC on i386 */ - -/* direct io requested, but no valid inb/oub */ -#if ( ! defined SANE_INB) && ( defined ENABLE_PARPORT_DIRECTIO ) -#warning "ENABLE_PARPORT_DIRECTIO cannot be used du to lack of inb/out definition" -#undef ENABLE_PARPORT_DIRECTIO -#endif - -#endif /* ENABLE_PARPORT_DIRECTIO */ -/* - * no inb/outb without --enable-parport-directio * - */ -#ifndef ENABLE_PARPORT_DIRECTIO -#define SANE_INB 0 -static int -sanei_ioperm (__sane_unused__ int start, __sane_unused__ int length, -              __sane_unused__ int enable) -{ -  /* returns failure */ -  return -1; -} - -static unsigned char -sanei_inb (__sane_unused__ unsigned int port) -{ -  return 255; -} - -static void -sanei_outb (__sane_unused__ unsigned int port, -            __sane_unused__ unsigned char value) -{ -} - -static void -sanei_insb (__sane_unused__ unsigned int port, -            __sane_unused__ unsigned char *addr, -            __sane_unused__ unsigned long count) -{ -} - -static void -sanei_insl (__sane_unused__ unsigned int port, -            __sane_unused__ unsigned char *addr, -            __sane_unused__ unsigned long count) -{ -} - -static void -sanei_outsb (__sane_unused__ unsigned int port, -             __sane_unused__ const unsigned char *addr, -	     __sane_unused__ unsigned long count) -{ -} - -static void -sanei_outsl (__sane_unused__ unsigned int port, -             __sane_unused__ const unsigned char *addr, -	     __sane_unused__ unsigned long count) -{ -} -#endif /* ENABLE_PARPORT_DIRECTIO is not defined */ - -/* we need either direct io or ppdev */ -#if ! defined ENABLE_PARPORT_DIRECTIO && ! defined HAVE_LINUX_PPDEV_H && ! defined HAVE_DEV_PPBUS_PPI_H -#define IO_SUPPORT_MISSING -#endif - -  #include "umax_pp_low.h"  #ifdef DMALLOC | 
