kopia lustrzana https://gitlab.com/sane-project/backends
Factoring of umax_pp_low functions concerning sys/io.h to sanei lib
rodzic
374521c4b6
commit
7b5386ff6e
|
@ -1903,6 +1903,7 @@ libsane_umax_pp_la_LIBADD = $(COMMON_LIBS) \
|
|||
../sanei/sanei_init_debug.lo \
|
||||
../sanei/sanei_constrain_value.lo \
|
||||
../sanei/sanei_config.lo \
|
||||
../sanei/sanei_directio.lo \
|
||||
sane_strstatus.lo \
|
||||
$(MATH_LIB)
|
||||
EXTRA_DIST += umax_pp.conf.in
|
||||
|
@ -2001,6 +2002,7 @@ PRELOADABLE_BACKENDS_LIBS = \
|
|||
../sanei/sanei_tcp.lo \
|
||||
../sanei/sanei_udp.lo \
|
||||
../sanei/sanei_magic.lo \
|
||||
../sanei/sanei_directio.lo \
|
||||
$(LIBV4L_LIBS) $(MATH_LIB) \
|
||||
$(IEEE1284_LIBS) \
|
||||
$(TIFF_LIBS) \
|
||||
|
@ -2035,6 +2037,7 @@ PRELOADABLE_BACKENDS_DEPS = ../sanei/sanei_config2.lo \
|
|||
../sanei/sanei_tcp.lo \
|
||||
../sanei/sanei_udp.lo \
|
||||
../sanei/sanei_magic.lo \
|
||||
../sanei/sanei_directio.lo \
|
||||
$(SANEI_SANEI_JPEG_LO)
|
||||
endif
|
||||
nodist_libsane_la_SOURCES = dll-s.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
|
||||
|
|
|
@ -11,8 +11,9 @@ EXTRA_DIST = lalloca.h lassert.h lgetopt.h md5.h font_6x11.h
|
|||
EXTRA_DIST += sane/config.h.in sane/sanei.h sane/sanei_ab306.h \
|
||||
sane/sanei_access.h sane/sanei_auth.h sane/sanei_backend.h \
|
||||
sane/sanei_cderror.h sane/sanei_codec_ascii.h sane/sanei_codec_bin.h \
|
||||
sane/sanei_config.h sane/sanei_debug.h sane/sanei_jinclude.h \
|
||||
sane/sanei_jpeg.h sane/sanei_lm983x.h sane/sanei_net.h sane/sanei_pa4s2.h \
|
||||
sane/sanei_pio.h sane/sanei_pp.h sane/sanei_pv8630.h sane/sanei_scsi.h \
|
||||
sane/sanei_tcp.h sane/sanei_thread.h sane/sanei_udp.h sane/sanei_usb.h \
|
||||
sane/sanei_config.h sane/sanei_debug.h sane/sanei_directio.h \
|
||||
sane/sanei_jinclude.h sane/sanei_jpeg.h sane/sanei_lm983x.h \
|
||||
sane/sanei_net.h sane/sanei_pa4s2.h sane/sanei_pio.h sane/sanei_pp.h \
|
||||
sane/sanei_pv8630.h sane/sanei_scsi.h sane/sanei_tcp.h \
|
||||
sane/sanei_thread.h sane/sanei_udp.h sane/sanei_usb.h \
|
||||
sane/sanei_wire.h sane/sanei_magic.h sane/sanei_ir.h
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
#ifndef __SANEI_DIRECTIO_H__
|
||||
#define __SANEI_DIRECTIO_H__
|
||||
|
||||
#ifdef HAVE_SYS_IO_H
|
||||
#include <sys/io.h>
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_PARPORT_DIRECTIO
|
||||
|
||||
#if (! defined SANE_INB ) && ( defined HAVE_SYS_HW_H ) /* OS/2 EMX case */
|
||||
#define SANE_INB 1
|
||||
#endif /* OS/2 EMX case */
|
||||
|
||||
|
||||
|
||||
#if (! defined SANE_INB ) && ( defined HAVE_MACHINE_CPUFUNC_H ) /* FreeBSD case */
|
||||
#define SANE_INB 2
|
||||
#endif /* FreeBSD case */
|
||||
|
||||
|
||||
/* linux GCC on i386 */
|
||||
#if ( ! defined SANE_INB ) && ( defined HAVE_SYS_IO_H ) && ( defined __GNUC__ ) && ( defined __i386__ )
|
||||
#define SANE_INB 3
|
||||
#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
|
||||
#endif /* linux GCC non i386 */
|
||||
|
||||
|
||||
/* ICC on i386 */
|
||||
#if ( ! defined SANE_INB ) && ( defined __INTEL_COMPILER ) && ( defined __i386__ )
|
||||
#define SANE_INB 5
|
||||
#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
|
||||
#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
|
||||
|
||||
|
||||
extern int sanei_ioperm (int start, int length, int enable);
|
||||
extern unsigned char sanei_inb (unsigned int port);
|
||||
extern void sanei_outb (unsigned int port, unsigned char value);
|
||||
extern void sanei_insb (unsigned int port, unsigned char *addr,
|
||||
unsigned long count);
|
||||
extern void sanei_insl (unsigned int port, unsigned char *addr,
|
||||
unsigned long count);
|
||||
extern void sanei_outsb (unsigned int port, const unsigned char *addr,
|
||||
unsigned long count);
|
||||
extern void sanei_outsl (unsigned int port, const unsigned char *addr,
|
||||
unsigned long count);
|
||||
|
||||
#endif // __SANEI_DIRECTIO_H__
|
|
@ -9,7 +9,7 @@ AM_CPPFLAGS += -I. -I$(srcdir) -I$(top_builddir)/include \
|
|||
|
||||
noinst_LTLIBRARIES = libsanei.la
|
||||
|
||||
libsanei_la_SOURCES = sanei_ab306.c sanei_constrain_value.c \
|
||||
libsanei_la_SOURCES = sanei_directio.c sanei_ab306.c sanei_constrain_value.c \
|
||||
sanei_init_debug.c sanei_net.c sanei_wire.c sanei_codec_ascii.c \
|
||||
sanei_codec_bin.c sanei_scsi.c sanei_config.c sanei_config2.c \
|
||||
sanei_pio.c sanei_pa4s2.c sanei_auth.c sanei_usb.c sanei_thread.c \
|
||||
|
|
|
@ -0,0 +1,367 @@
|
|||
/*************************************************/
|
||||
/* 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 */
|
||||
/*************************************************/
|
||||
|
||||
#include "../include/sane/config.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "../include/sane/sane.h"
|
||||
#include "../include/sane/sanei.h"
|
||||
#include "../include/sane/sanei_directio.h"
|
||||
|
||||
#ifdef ENABLE_PARPORT_DIRECTIO
|
||||
|
||||
#define TEST_SANE_INB(val) ( SANE_INB == val )
|
||||
|
||||
#if ( TEST_SANE_INB(1) ) /* OS/2 EMX case */
|
||||
int
|
||||
sanei_ioperm (int start, int length, int enable)
|
||||
{
|
||||
if (enable)
|
||||
return _portaccess (port, port + length - 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned char
|
||||
sanei_inb (unsigned int port)
|
||||
{
|
||||
return _inp8 (port) & 0xFF;
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outb (unsigned int port, unsigned char value)
|
||||
{
|
||||
_outp8 (port, value);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insb (unsigned int port, unsigned char *addr, unsigned long count)
|
||||
{
|
||||
_inps8 (port, (unsigned char *) addr, count);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insl (unsigned int port, unsigned char *addr, unsigned long count)
|
||||
{
|
||||
_inps32 (port, (unsigned long *) addr, count);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outsb (unsigned int port, const unsigned char *addr,
|
||||
unsigned long count)
|
||||
{
|
||||
_outps8 (port, (unsigned char *) addr, count);
|
||||
}
|
||||
|
||||
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 ( TEST_SANE_INB(2) ) /* FreeBSD case */
|
||||
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
|
||||
}
|
||||
|
||||
unsigned char
|
||||
sanei_inb (unsigned int port)
|
||||
{
|
||||
return inb (port);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outb (unsigned int port, unsigned char value)
|
||||
{
|
||||
outb (port, value);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insb (unsigned int port, unsigned char *addr, unsigned long count)
|
||||
{
|
||||
insb (port, addr, count);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insl (unsigned int port, unsigned char *addr, unsigned long count)
|
||||
{
|
||||
insl (port, addr, count);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outsb (unsigned int port, const unsigned char *addr,
|
||||
unsigned long count)
|
||||
{
|
||||
outsb (port, addr, count);
|
||||
}
|
||||
|
||||
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 ( TEST_SANE_INB(3) ) /* FreeBSD case */
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
unsigned char
|
||||
sanei_inb (unsigned int port)
|
||||
{
|
||||
return inb (port);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outb (unsigned int port, unsigned char value)
|
||||
{
|
||||
outb (value, port);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insb (unsigned int port, unsigned char *addr, unsigned long count)
|
||||
{
|
||||
insb (port, addr, count);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insl (unsigned int port, unsigned char *addr, unsigned long count)
|
||||
{
|
||||
insl (port, addr, count);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outsb (unsigned int port, const unsigned char *addr,
|
||||
unsigned long count)
|
||||
{
|
||||
outsb (port, addr, count);
|
||||
}
|
||||
|
||||
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 ( TEST_SANE_INB(4) )
|
||||
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
|
||||
}
|
||||
|
||||
unsigned char
|
||||
sanei_inb (unsigned int port)
|
||||
{
|
||||
return inb (port);
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outb (unsigned int port, unsigned char value)
|
||||
{
|
||||
outb (value, port);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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]);
|
||||
}
|
||||
|
||||
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 ( TEST_SANE_INB(5) )
|
||||
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
|
||||
}
|
||||
unsigned char
|
||||
sanei_inb (unsigned int port)
|
||||
{
|
||||
unsigned char ret;
|
||||
|
||||
__asm__ __volatile__ ("inb %%dx,%%al":"=a" (ret):"d" ((u_int) port));
|
||||
return ret;
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outb (unsigned int port, unsigned char value)
|
||||
{
|
||||
__asm__ __volatile__ ("outb %%al,%%dx"::"a" (value), "d" ((u_int) port));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
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 */
|
||||
|
||||
#endif /* ENABLE_PARPORT_DIRECTIO */
|
||||
/*
|
||||
* no inb/outb without --enable-parport-directio *
|
||||
*/
|
||||
#ifndef ENABLE_PARPORT_DIRECTIO
|
||||
int
|
||||
sanei_ioperm (__sane_unused__ int start, __sane_unused__ int length,
|
||||
__sane_unused__ int enable)
|
||||
{
|
||||
/* returns failure */
|
||||
return -1;
|
||||
}
|
||||
|
||||
unsigned char
|
||||
sanei_inb (__sane_unused__ unsigned int port)
|
||||
{
|
||||
return 255;
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outb (__sane_unused__ unsigned int port,
|
||||
__sane_unused__ unsigned char value)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insb (__sane_unused__ unsigned int port,
|
||||
__sane_unused__ unsigned char *addr,
|
||||
__sane_unused__ unsigned long count)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
sanei_insl (__sane_unused__ unsigned int port,
|
||||
__sane_unused__ unsigned char *addr,
|
||||
__sane_unused__ unsigned long count)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
sanei_outsb (__sane_unused__ unsigned int port,
|
||||
__sane_unused__ const unsigned char *addr,
|
||||
__sane_unused__ unsigned long count)
|
||||
{
|
||||
}
|
||||
|
||||
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 */
|
Ładowanie…
Reference in New Issue