plustek: Driver doesn't work on >= 2.4.0-test8


Previous by date: 16 Oct 2000 10:47:30 -0000 Re: Driver doesn't work on >= 2.4.0-test8, Jaeger, Gerhard
Next by date: 16 Oct 2000 10:47:30 -0000 Re: 0.36 not working with plustek 4830P, Jaeger, Gerhard
Previous in thread: 16 Oct 2000 10:47:30 -0000 Re: Driver doesn't work on >= 2.4.0-test8, Jaeger, Gerhard
Next in thread: 16 Oct 2000 10:47:30 -0000 Re: Driver doesn't work on >= 2.4.0-test8, Mark Bialkowski

Subject: Re: Driver doesn't work on >= 2.4.0-test8
From: "Jaeger, Gerhard" ####@####.####
Date: 16 Oct 2000 10:47:30 -0000
Message-Id: <00101612503501.01257@gja>

Okay, "I did it again" ...........

Well I downloaded the patches to get test8 and test9 
of the 2.4 Kernel.
Then I updated the file sysdep-2.1.h which you
will find below.
Replace the old one in the plustek_driver/h directory
by the one below and the driver should run
even on the newer test kernels.

Hopefuly there aren't too much changes in this
kernel in the next test releases...

So, please try it and let us know if it works
Gerhard


/*
 * sysdep-2.1.h
 * a trial to centralize changes between the different kernel-versions
 * some stuff is maybe not relevant, but anyway...
 *
 *
 * export rules changed in 2.1.18
 * poll.h is there
 * cpu_to_le15 etc. appeared in 2.1.10
 * they "p" and "s" forms appeared in 2.1.43
 */
#ifndef _SYSDEP_21_H_
#define _SYSDEP_21_H_

#ifndef LINUX_VERSION_CODE
#  include <linux/version.h>
#endif

#ifndef VERSION_CODE
#  define VERSION_CODE(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) )
#endif

/* only allow > 2.0.x */
#if LINUX_VERSION_CODE < VERSION_CODE(2,0,0)
#  error "This kernel is too old: not supported by this file"
#endif
#if LINUX_VERSION_CODE < VERSION_CODE(2,1,0)
#  define LINUX_20
#elif LINUX_VERSION_CODE < VERSION_CODE(2,4,0)
#  define LINUX_21
#else
#  define LINUX_24
#endif

#include <linux/types.h> /* used later in this header */


/* Modularization issues */
#if LINUX_VERSION_CODE < VERSION_CODE(2,1,18)
#  define __USE_OLD_SYMTAB__
#  define EXPORT_NO_SYMBOLS register_symtab(NULL);
#  define REGISTER_SYMTAB(tab) register_symtab(tab)
#else
#  define REGISTER_SYMTAB(tab) /* nothing */
#endif

#ifdef __USE_OLD_SYMTAB__
#  define __MODULE_STRING(s)         /* nothing */
#  define MODULE_PARM(v,t)           /* nothing */
#  define MODULE_PARM_DESC(v,t)      /* nothing */
#  define MODULE_AUTHOR(n)           /* nothing */
#  define MODULE_DESCRIPTION(d)      /* nothing */
#  define MODULE_SUPPORTED_DEVICE(n) /* nothing */
#endif

#if LINUX_VERSION_CODE < VERSION_CODE(2,1,31)
# define CLOSETYPE     		void
# define CLOSERETURN(arg)
#else
# define CLOSETYPE     		int
# define CLOSERETURN(arg)	return arg
#endif

/*
 * "select" changed in 2.1.23. The implementation is twin, but this
 * header is new
 */
#if LINUX_VERSION_CODE > VERSION_CODE(2,1,22)
#  include <linux/poll.h>
#else
#  define __USE_OLD_SELECT__
#endif

/* Other change in the fops are solved using pseudo-types */
#if defined(LINUX_21) || defined(LINUX_24)
#  define lseek_t      long long
#  define lseek_off_t  long long
#else
#  define lseek_t      int
#  define lseek_off_t  off_t
#endif

/* changed the prototype of read/write */
#if defined(LINUX_21) || defined (LINUX_24) || defined(__alpha__)
# define count_t unsigned long
# define read_write_t long
#else
# define count_t int
# define read_write_t int
#endif


#if LINUX_VERSION_CODE < VERSION_CODE(2,1,31)
# define release_t void
#  define release_return(x) return
#else
#  define release_t int
#  define release_return(x) return (x)
#endif

/*
 * access to user space: use the 2.1 functions,
 * and implement them as macros for 2.0
 */

#ifdef LINUX_20
#  include <asm/segment.h>
#  define access_ok(t,a,sz)           (verify_area((t),(a),(sz)) ? 0 : 1)
#  define verify_area_20              verify_area
#  define copy_to_user(t,f,n)         (memcpy_tofs(t,f,n), 0)
#  define __copy_to_user(t,f,n)       copy_to_user((t),(f),(n))
#  define copy_to_user_ret(t,f,n,r)   copy_to_user((t),(f),(n))
#  define copy_from_user(t,f,n)       (memcpy_fromfs((t),(f),(n)), 0)
#  define __copy_from_user(t,f,n)     copy_from_user((t),(f),(n))
#  define copy_from_user_ret(t,f,n,r) copy_from_user((t),(f),(n))
#  define PUT_USER(val,add)           (put_user((val),(add)), 0)
#  define __PUT_USER(val,add)         PUT_USER((val),(add))
#  define PUT_USER_RET(val,add,ret)   PUT_USER((val),(add))
#  define GET_USER(dest,add)          ((dest)=get_user((add)), 0)
#  define __GET_USER(dest,add)        GET_USER((dest),(add))
#  define GET_USER_RET(dest,add,ret)  GET_USER((dest),(add))
#else
#  include <asm/uaccess.h>
#  include <asm/io.h>
#  define verify_area_20(t,a,sz) (0) /* == success */
#  define PUT_USER put_user
#  define __PUT_USER __put_user
#  define PUT_USER_RET put_user_ret
#  define GET_USER get_user
#  define __GET_USER __get_user
#  define GET_USER_RET get_user_ret

/* starting with 2.4.0-test8, they removed the put_user_ret and get_user_ret
 * macros, so we recode'em
 */
#ifdef LINUX_24
#ifndef put_user_ret
#  define put_user_ret(x,ptr,ret) ({ if (put_user(x,ptr)) return ret; })
#endif

#ifndef get_user_ret
#  define get_user_ret(x,ptr,ret) ({ if (get_user(x,ptr)) return ret; })
#endif

#endif
#endif

/* ioremap */
#ifdef LINUX_20
# define ioremap vremap
# define iounmap vfree
#endif

/* The use_count of exec_domain and binfmt changed in 2.1.23 */

#ifdef LINUX_20
#  define INCRCOUNT(p)  ((p)->module ? __MOD_INC_USE_COUNT((p)->module) : 0)
#  define CURRCOUNT(p)  ((p)->module && (p)->module->usecount)
#  define DECRCOUNT(p)  ((p)->module ? __MOD_DEC_USE_COUNT((p)->module) : 0)
#else
#  define INCRCOUNT(p)  ((p)->use_count++)
#  define CURRCOUNT(p)  ((p)->use_count)
#  define DECRCOUNT(p)  ((p)->use_count--)
#endif

/* register_dynamic no more existent -- just have 0 as inum */
#if LINUX_VERSION_CODE >= VERSION_CODE(2,1,29)
#  define proc_register_dynamic proc_register
#endif

#if LINUX_VERSION_CODE < VERSION_CODE(2,1,37)
#  define test_and_set_bit(nr,addr)  test_bit((nr),(addr))
#  define test_and_clear_bit(nr,addr) clear_bit((nr),(addr))
#  define test_and_change_bit(nr,addr) change_bit((nr),(addr))
#endif

/* 2.1.30 removed these functions. Let's define them, just in case */
#if LINUX_VERSION_CODE > VERSION_CODE(2,1,29)
#  define queue_task_irq      queue_task
#  define queue_task_irq_off  queue_task
#endif

/* 2.1.10 and 2.1.43 introduced new functions. They are worth using */

#if LINUX_VERSION_CODE < VERSION_CODE(2,1,10)

#  include <asm/byteorder.h>
#  ifdef __LITTLE_ENDIAN
#    define cpu_to_le16(x) (x)
#    define cpu_to_le32(x) (x)
#    define cpu_to_be16(x) htons((x))
#    define cpu_to_be32(x) htonl((x))
#  else
#    define cpu_to_be16(x) (x)
#    define cpu_to_be32(x) (x)
     extern inline __u16 cpu_to_le16(__u16 x) { return (x<<8) | (x>>8);}
     extern inline __u32 cpu_to_le32(__u32 x) { return((x>>24) |
             ((x>>8)&0xff00) | ((x<<8)&0xff0000) | (x<<24));}
#  endif

#  define le16_to_cpu(x)  cpu_to_le16(x)
#  define le32_to_cpu(x)  cpu_to_le32(x)
#  define be16_to_cpu(x)  cpu_to_be16(x)
#  define be32_to_cpu(x)  cpu_to_be32(x)

#endif

#if LINUX_VERSION_CODE < VERSION_CODE(2,1,43)
#  define cpu_to_le16p(addr) (cpu_to_le16(*(addr)))
#  define cpu_to_le32p(addr) (cpu_to_le32(*(addr)))
#  define cpu_to_be16p(addr) (cpu_to_be16(*(addr)))
#  define cpu_to_be32p(addr) (cpu_to_be32(*(addr)))

   extern inline void cpu_to_le16s(__u16 *a) {*a = cpu_to_le16(*a);}
   extern inline void cpu_to_le32s(__u16 *a) {*a = cpu_to_le32(*a);}
   extern inline void cpu_to_be16s(__u16 *a) {*a = cpu_to_be16(*a);}
   extern inline void cpu_to_be32s(__u16 *a) {*a = cpu_to_be32(*a);}

#  define le16_to_cpup(x) cpu_to_le16p(x)
#  define le32_to_cpup(x) cpu_to_le32p(x)
#  define be16_to_cpup(x) cpu_to_be16p(x)
#  define be32_to_cpup(x) cpu_to_be32p(x)

#  define le16_to_cpus(x) cpu_to_le16s(x)
#  define le32_to_cpus(x) cpu_to_le32s(x)
#  define be16_to_cpus(x) cpu_to_be16s(x)
#  define be32_to_cpus(x) cpu_to_be32s(x)
#endif

#if LINUX_VERSION_CODE < VERSION_CODE(2,1,15)
#  define __USE_OLD_REBUILD_HEADER__
#endif

#if LINUX_VERSION_CODE < VERSION_CODE(2,1,30)
#  define in_interrupt() (intr_count!=0)
#endif

#endif /* _SYSDEP_21_H_ */


Previous by date: 16 Oct 2000 10:47:30 -0000 Re: Driver doesn't work on >= 2.4.0-test8, Jaeger, Gerhard
Next by date: 16 Oct 2000 10:47:30 -0000 Re: 0.36 not working with plustek 4830P, Jaeger, Gerhard
Previous in thread: 16 Oct 2000 10:47:30 -0000 Re: Driver doesn't work on >= 2.4.0-test8, Jaeger, Gerhard
Next in thread: 16 Oct 2000 10:47:30 -0000 Re: Driver doesn't work on >= 2.4.0-test8, Mark Bialkowski


Powered by ezmlm-browse 0.20.