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 |