hi,
 i am doing a CRO simulator project .when i compiled
driver code there was a long list of errors. i think
that the errors may be due to 
the version of the gcc.i am using gcc 3. kernel 2.4.do
u have any idea how to debug.
i am attaching code(ecak.c,.h....) and error
report(errorreport.txt)  





                
__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail
-------------- next part --------------
/*
 * ecak.c -- Electronics Circuits Analysis Kit developed at MIPS Technologies
 *
 * 
 */

#ifndef __KERNEL__
#  define __KERNEL__
#endif
#ifndef MODULE
#  define MODULE
#endif

#include <linux/config.h> /* configure for hardware platform like i386, ISA, 
etc. */
#include <linux/module.h> /* includes structures and functions for dynamic 
loading of modules in to
                           * kernel */

#include <linux/sched.h>  /* for process scheduling */
#include <linux/kernel.h> /* printk() and other kernel functions */
#include <linux/fs.h>     /* The character device definitions are here */
#include <linux/errno.h>  /* error codes */
#include <linux/malloc.h>         /* for memory allocation function prototypes 
*/
#include <linux/mm.h>     /* for page request priorities - eg: GPF_KERNEL */  
#include <linux/ioport.h> /* defenitions of routines for detecting,reserving 
and allocating system
                           * resources */
#include <linux/interrupt.h> /* interrupt request, release etc. */
#include <linux/tqueue.h> /* for task queueing - we use for sleeping reading 
process when data is
                           * not available */

#include <asm/io.h>       /* for inb(), outb() etc. */
#include <asm/uaccess.h>  /* for put_user() */

#include "sysdep.h"       /* for copatibility over different kernel versions */

#include "ecak.h"         /* Our own ioctl numbers */

#define ECAK_PORTS 8      /* use 8 ports by default */

static int major = 100;   /* hope it's not used */
static unsigned long ecak_base = 0x378; /* parallel port base address is 
default 378h */
static int ecak_irq = 7;  /* parallel port IRQ is default 7 */


MODULE_AUTHOR ("MIPS"); 

unsigned long ecak_buffer = 0;
unsigned long volatile 
ecak_head,ecak_tail,tail_bak,ecak_low_nibble,ecak_high_nibble,ecak_zero_cross;
DECLARE_WAIT_QUEUE_HEAD(ecak_queue);


/* open */

int ecak_open (struct inode *inode, struct file *filp)
{
    MOD_INC_USE_COUNT;
    ecak_head = ecak_tail = ecak_buffer;
    return 0;
}


/* release */

int ecak_release (struct inode *inode, struct file *filp)
{
    MOD_DEC_USE_COUNT;
    return 0;
}


/* read */

ssize_t ecak_i_read (struct file *filp, char *buf, size_t count, loff_t *f_pos)
{
    int count0;

printk("\n red1 : head %d tail %d",(int)(ecak_head - 
ecak_buffer),(int)(ecak_tail - ecak_buffer));

    while (ecak_head == ecak_tail) {
        interruptible_sleep_on(&ecak_queue);
        if (signal_pending (current))  /* a signal arrived */
          return -ERESTARTSYS; /* tell the fs layer to handle it */
        /* else, loop */
    }
    /* count0 is the number of readable data bytes */
    count0 = ecak_head - ecak_tail;
    if (count0 < 0) /* wrapped */
        count0 = ecak_buffer + PAGE_SIZE - ecak_tail;
    if (count0 < count) count = count0;

    tail_bak = ecak_tail;
    while(ecak_tail < (tail_bak + count))
    {
        put_user(*(char*)(ecak_tail),buf);
        if(ecak_tail == (ecak_buffer + PAGE_SIZE))
                ecak_tail = ecak_buffer;
        else
                ecak_tail++;
    }

printk("\n red1 : head %d tail %d",(int)(ecak_head - 
ecak_buffer),(int)(ecak_tail - ecak_buffer));

    return count;
}



/* I/O Controls */

int ecak_ioctl(
struct inode *inode,
struct file *file,
unsigned int ioctl_num,/* The number of the ioctl */
unsigned long ioctl_param) /* The parameter to it */
{
/* Switch according to the ioctl called */
switch (ioctl_num) {
case IOCTL_SET_DSO:
/* switch to Digital Storage Oscilloscope mode */ 
outb( ( (inb(CONTROL)) | 0x01 ), CONTROL );
break;

}

return 0;
}


struct file_operations ecak_i_fops = {
    read: ecak_i_read,
    ioctl: ecak_ioctl,
    open: ecak_open,
    release: ecak_release,
};


/* interrupt service routine */

void ecak_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{

printk("\n int1 : head %d tail %d",(int)(ecak_head - 
ecak_buffer),(int)(ecak_tail - ecak_buffer));

   

     outb( ( (inb(CONTROL)) & 0x02 ), CONTROL );/* Sets 1G = 1 , 2G = 0  for 
reading lower nibble from latch 74LS244 */
    *(char*)(ecak_low_nibble)=inb(ecak_base);

     outb( ( (inb(CONTROL)) & 0x08 ), CONTROL );/* Sets 1G = 0 , 2G = 1  for 
reading higher nibble from latch 74LS244 */
    *(char*)(ecak_high_nibble)=inb(ecak_base);
  
     *(char*)(ecak_zero_cross) = *(char*)(ecak_low_nibble) & 0x80 ;/* 
Extracting Zero - crossing detector value i.e, D7 bit of parallel port */
     *(char*)(ecak_zero_cross) = *(char*)(ecak_zero_cross)  >> 7;

     /* combines lower nibble and higher nibble to form an 8-bit data and 
stores it in the kernel buffer*/

     *(char*)(ecak_low_nibble) = *(char*)(ecak_low_nibble) & 0x0F ;
     *(char*)(ecak_high_nibble) = *(char*)(ecak_high_nibble) & 0x0F ;

     *(char*)(ecak_high_nibble) = *(char*)(ecak_high_nibble) << 4;
  
      *(char*)(ecak_head) = *(char*)(ecak_low_nibble) + 
*(char*)(ecak_high_nibble);    



        if(ecak_head == (ecak_buffer + PAGE_SIZE))
                ecak_head = ecak_buffer;
        else
                ecak_head++;     

     /*  stores  zero_crossing value in the kernel buffer*/

        *(char*)(ecak_head) = *(char*)(ecak_zero_cross);    

        if(ecak_head == (ecak_buffer + PAGE_SIZE))
                ecak_head = ecak_buffer;
        else
                ecak_head++;


printk("\n int2 : head %d tail %d",(int)(ecak_head - 
ecak_buffer),(int)(ecak_tail - ecak_buffer));

    wake_up_interruptible(&ecak_queue); /* awake any reading process */
}


/* Finally, init and cleanup */

int ecak_init(void)
{
    int result;

    /* Set up owner pointers.*/
    SET_MODULE_OWNER(&ecak_i_fops);

    /* Get our needed resources. */
        result = check_region(ecak_base, ECAK_PORTS);
        if (result) {
            printk(KERN_INFO "ecak: can't get I/O port address 0x%lx\n",
                   ecak_base);
            return result;
        }
        request_region(ecak_base, ECAK_PORTS, "ecak");

        /* we should check the return value */
    result = register_chrdev(major, "ecak", &ecak_i_fops);
    if (result < 0) {
        printk(KERN_INFO "ecak: can't get major number\n");
        release_region(ecak_base,ECAK_PORTS);
        return result;
    }

    ecak_buffer = __get_free_pages(GFP_KERNEL,0); /* never fails */
    ecak_head = ecak_tail = ecak_buffer;


    /*
     * Now we deal with the interrupt
     */

        result = request_irq(ecak_irq, ecak_interrupt,
                             SA_INTERRUPT, "ecak", NULL);
        if (result) {
            printk(KERN_INFO "ecak: can't get assigned irq %i\n",
                   ecak_irq);
            ecak_irq = -1;
        }
        else { /* actually enable it */
            outb(0x10,ecak_base+2);
        }
    return 0;
}

void ecak_cleanup(void)
{
    if (ecak_irq >= 0) {
        outb(0x0, ecak_base + 2);   /* disable the interrupt */
        free_irq(ecak_irq, NULL);
    }
        
    unregister_chrdev(major, "ecak");
    release_region(ecak_base, ECAK_PORTS);
    if (ecak_buffer) free_page(ecak_buffer);
}

module_init(ecak_init);
module_exit(ecak_cleanup);
-------------- next part --------------
/* ecak.h - the header file with the ioctl definitions.
*
* The declarations here have to be in a header file, 
* because they need to be known to the kernel 
* module (in ecak.c)
*/

#ifndef CHARDEV_H
#define CHARDEV_H

#include <linux/ioctl.h> 



/* The major device number. Can't rely on dynamic 
* registration, because ioctls need to know 
* it. */
#define MAJOR_NUM 100

#define ECAK_MAGIC_NUMBER 0x8c

#define IOCTL_POWER_ON _IO(ECAK_MAGIC_NUMBER, 0x40)
/* This IOCTL is used to power on the H/W */

/* _IO means that we're creating an ioctl command 
* number without any parameter 
*
* The first arguments, ECAK_MAGIC_NUMBER, is the magic 
* number we're using.
*
* The second argument is the number of the command 
* (there could be several with different meanings).
*/


#define IOCTL_INIT_DSO _IO(ECAK_MAGIC_NUMBER, 0X41)
/* This IOCTL is used to give initial SOC signal to ADC */

#define IOCTL_SET_DSO _IO(ECAK_MAGIC_NUMBER, 0x42)
/* This IOCTL is used for changing to DSO mode */

#define IOCTL_SET_FUNCGEN _IO(ECAK_MAGIC_NUMBER, 0x43)
/* This IOCTL is used for changing to Function generator mode */

#define IOCTL_POWER_OFF _IO(ECAK_MAGIC_NUMBER, 0X44)
/* This IOCTL is powers off the H/W */

/* The name of the device file */
#define DEVICE_FILE_NAME "/dev/ecak"

/* The different addresses of port */
#define BASE 0x378
#define DATA BASE+0
#define STATUS BASE+1
#define CONTROL BASE+2
#define IRQ 7

#endif

-------------- next part --------------
/*
 * sysdep.h -- centralizing compatibiity isues between 2.0, 2.2, 2.4
 * $Id: sysdep.h,v 1.60 2001/07/11 07:24:20 rubini Exp $
 */


#ifndef _SYSDEP_H_
#define _SYSDEP_H_

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

#ifndef KERNEL_VERSION /* pre-2.1.90 didn't have it */
#  define KERNEL_VERSION(vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) )
#endif

/* only allow 2.0.x  2.2.y and 2.4.z */

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,0,0) /* not < 2.0 */
#  error "This kernel is too old: not supported by this file"
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) /* not > 2.4, by now */
#  error "This kernel is too recent: not supported by this file"
#endif
#if (LINUX_VERSION_CODE & 0xff00) == 1 /* not 2.1 */
#  error "Please don't use linux-2.1, use 2.2 or 2.4 instead"
#endif
#if (LINUX_VERSION_CODE & 0xff00) == 3 /* not 2.3 */
#  error "Please don't use linux-2.3, use 2.4 instead"
#endif

/* remember about the current version */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
#  define LINUX_20
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
#  define LINUX_22
#else
#  define LINUX_24
#endif

/* we can't support versioning in pre-2.4 because we #define some functions */
#if !defined(LINUX_24) && defined(CONFIG_MODVERSIONS)
#  error "This sysdep.h can't support CONFIG_MODVERSIONS"
#  error "and old kernels at the same time."
#  error "Either use 2.4 or avoid using versioning"
#endif

#ifndef LINUX_20 /* include vmalloc.h if this is 2.2/2.4 */
#  ifdef VM_READ /* a typical flag defined by mm.h */
#    include <linux/vmalloc.h>
#  endif
#endif

#include <linux/sched.h>

/* Modularization issues */
#ifdef LINUX_20
#  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

/*
 * In version 2.2 (up to 2.2.19, at least), the macro for request_module()
 * when no kmod is there is wrong. It's a "do {} while 0" but it shouldbe int
 */
#ifdef LINUX_22
#  ifndef CONFIG_KMOD
#    undef request_module
#    define request_module(name) -ENOSYS
#  endif
#endif


#ifndef LINUX_20
#  include <linux/init.h>     /* module_init/module_exit */
#endif

#ifndef module_init
#  define module_init(x)        int init_module(void) { return x(); }
#  define module_exit(x)        void cleanup_module(void) { x(); }
#endif

#ifndef SET_MODULE_OWNER
#  define SET_MODULE_OWNER(structure) /* nothing */
#endif

/*
 * "select" changed in 2.1.23. The implementation is twin, but this
 * header is new
 *
 */
#ifdef LINUX_20
#  define __USE_OLD_SELECT__
#else
#  include <linux/poll.h>
#endif

#ifdef LINUX_20
#  define INODE_FROM_F(filp) ((filp)->f_inode)
#else
#  define INODE_FROM_F(filp) ((filp)->f_dentry->d_inode)
#endif

/* Other changes in the fops are solved using wrappers */

/*
 * Wait queues changed with 2.3
 */
#ifndef DECLARE_WAIT_QUEUE_HEAD
#  define DECLARE_WAIT_QUEUE_HEAD(head) struct wait_queue *head = NULL
   typedef  struct wait_queue *wait_queue_head_t;
#  define init_waitqueue_head(head) (*(head)) = NULL

/* offer wake_up_sync as an alias for wake_up */
#  define wake_up_sync(head) wake_up(head)
#  define wake_up_interruptible_sync(head) wake_up_interruptible(head)

/* Pretend we have add_wait_queue_exclusive */
#  define add_wait_queue_exclusive(q,entry) add_wait_queue ((q), (entry))

#endif /* no DECLARE_WAIT_QUEUE_HEAD */

/*
 * Define wait_event for 2.0 kernels.  (This ripped off directly from
 * the 2.2.18 sched.h)
 */
#ifdef LINUX_20

#define __wait_event(wq, condition)                                     \
do {                                                                    \
        struct wait_queue __wait;                                       \
                                                                        \
        __wait.task = current;                                          \
        add_wait_queue(&wq, &__wait);                                   \
        for (;;) {                                                      \
                current->state = TASK_UNINTERRUPTIBLE;                  \
                mb();                                                   \
                if (condition)                                          \
                        break;                                          \
                schedule();                                             \
        }                                                               \
        current->state = TASK_RUNNING;                                  \
        remove_wait_queue(&wq, &__wait);                                \
} while (0)

#define wait_event(wq, condition)                                       \
do {                                                                    \
        if (condition)                                                  \
                break;                                                  \
        __wait_event(wq, condition);                                    \
} while (0)

#define __wait_event_interruptible(wq, condition, ret)                  \
do {                                                                    \
        struct wait_queue __wait;                                       \
                                                                        \
        __wait.task = current;                                          \
        add_wait_queue(&wq, &__wait);                                   \
        for (;;) {                                                      \
                current->state = TASK_INTERRUPTIBLE;                    \
                mb();                                                   \
                if (condition)                                          \
                        break;                                          \
                if (!signal_pending(current)) {                         \
                        schedule();                                     \
                        continue;                                       \
                }                                                       \
                ret = -ERESTARTSYS;                                     \
                break;                                                  \
        }                                                               \
        current->state = TASK_RUNNING;                                  \
        remove_wait_queue(&wq, &__wait);                                \
} while (0)
        
#define wait_event_interruptible(wq, condition)                         \
({                                                                      \
        int __ret = 0;                                                  \
        if (!(condition))                                               \
                __wait_event_interruptible(wq, condition, __ret);       \
        __ret;                                                          \
})
#endif


/*
 * 2.3 added tasklets
 */
#ifdef LINUX_24
#  define HAVE_TASKLETS
#endif




/* FIXME: implement the other versions of wake_up etc */


/*
 * access to user space: use the 2.2 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),(void *) (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_from_user(t,f,n)       (memcpy_fromfs((t), (f), (n)), 0)
#  define   __copy_to_user(t,f,n)       copy_to_user((t), (f), (n))
#  define __copy_from_user(t,f,n)     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 GET_USER(dest,add)          ((dest)=get_user((add)), 0)
#  define __GET_USER(dest,add)        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   GET_USER   get_user
#  define __GET_USER __get_user
#endif

/*
 * Allocation issues
 */
#ifdef GFP_USER /* only if mm.h has been included */
#  ifdef LINUX_20
#    define __GFP_DMA GFP_DMA /* 2.0 didn't have the leading __ */
#  endif
#  ifndef LINUX_24
#    define __GFP_HIGHMEM  0  /* was not there */
#    define GFP_HIGHUSER   0   /* idem */
#  endif

#  ifdef LINUX_20
#    define __get_free_pages(a,b) __get_free_pages((a),(b),0)
#  endif
#  ifndef LINUX_24
#    define get_zeroed_page get_free_page
#  endif
#endif

/* ioremap */
#if defined(LINUX_20) && defined(_LINUX_MM_H)
#  define ioremap_nocache ioremap
#  ifndef __i386__
   /* This simple approach works for non-PC platforms. */
#    define ioremap vremap
#    define iounmap vfree
#  else /* the PC has <expletive> ISA; 2.2 and 2.4 remap it, 2.0 needs not */
extern inline void *ioremap(unsigned long phys_addr, unsigned long size)
{
    if (phys_addr >= 0xA0000 && phys_addr + size <= 0x100000)
        return (void *)phys_addr;
    return vremap(phys_addr, size);
}

extern inline void iounmap(void *addr)
{
    if ((unsigned long)addr >= 0xA0000
            && (unsigned long)addr < 0x100000)
        return;
    vfree(addr);
}
#  endif
#endif

/* Also, define check_mem_region etc */
#ifndef LINUX_24
#  define check_mem_region(a,b)     0 /* success */
#  define request_mem_region(a,b,c) /* nothing */
#  define release_mem_region(a,b)   /* nothing */
#endif

/* implement capable() for 2.0 */
#ifdef LINUX_20
#  define capable(anything)  suser()
#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 DECRCOUNT(p)  ((p)->module ? __MOD_DEC_USE_COUNT((p)->module) : 0)
#  define CURRCOUNT(p)  ((p)->module && (p)->module->usecount)
#else
#  define INCRCOUNT(p)  ((p)->use_count++)
#  define DECRCOUNT(p)  ((p)->use_count--)
#  define CURRCOUNT(p)  ((p)->use_count)
#endif

/*
 * /proc has changed a lot across the versions...
 */
#ifdef LINUX_20
#  define USE_PROC_REGISTER
#endif


/*
 * 2.2 didn't have create_proc_{read|info}_entry yet.
 * And it looks like there are no other "interesting" entry point, as
 * the rest is somehow esotique (mknod, symlink, ...)
 */
#ifdef LINUX_22
#  ifdef PROC_SUPER_MAGIC  /* Only if procfs is being used */
extern inline struct proc_dir_entry *create_proc_read_entry(const char *name,
                          mode_t mode, struct proc_dir_entry *base, 
                          read_proc_t *read_proc, void * data)
{
    struct proc_dir_entry *res=create_proc_entry(name,mode,base);
    if (res) {
        res->read_proc=read_proc;
        res->data=data;
    }
    return res;
}

#    ifndef create_proc_info_entry /* added in 2.2.18 */
typedef int (get_info_t)(char *, char **, off_t, int, int);
extern inline struct proc_dir_entry *create_proc_info_entry(const char *name,
        mode_t mode, struct proc_dir_entry *base, get_info_t *get_info)
{
        struct proc_dir_entry *res=create_proc_entry(name,mode,base);
        if (res) res->get_info=get_info;
        return res;
}
#    endif  /* no create_proc_info_entry */
#  endif
#endif

#ifdef LINUX_20
#  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.0 had no read and write memory barriers, and 2.2 lacks the
   set_ functions */
#ifndef LINUX_24
#  ifdef LINUX_20
#    define wmb() mb() /* this is a big penalty on non-reordering platfs */
#    define rmb() mb() /* this is a big penalty on non-reordering platfs */
#  endif /* LINUX_20 */

#define set_mb() do { var = value; mb(); } while (0)
#define set_wmb() do { var = value; wmb(); } while (0)
#endif /* ! LINUX_24 */



/* 2.1.30 removed these functions. Let's define them, just in case */
#ifndef LINUX_20
#  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 */

#ifdef LINUX_20

#  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)

#  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

#ifdef LINUX_20
#  define __USE_OLD_REBUILD_HEADER__
#endif

/*
 * 2.0 didn't include sema_init, so we make our own - but only if it
 * looks like semaphore.h got included.
 */
#ifdef LINUX_20
#  ifdef MUTEX_LOCKED   /* Only if semaphore.h included */
     extern inline void sema_init (struct semaphore *sem, int val)
     {
         sem->count = val;
         sem->waking = sem->lock = 0;
         sem->wait = NULL;
     }
#  endif
#endif /* LINUX_20 */

/*
 * In 2.0, there is no real need for spinlocks, and they weren't really
 * implemented anyway.
 *
 * XXX the _irqsave variant should be defined eventually to do the
 * right thing.
 */
#ifdef LINUX_20
typedef int spinlock_t;
#  define spin_lock(lock)
#  define spin_unlock(lock)
#  define spin_lock_init(lock)

#  define spin_lock_irqsave(lock,flags) do { \
        save_flags(flags); cli(); } while (0);
#  define spin_unlock_irqrestore(lock,flags) restore_flags(flags);
#endif

/*
 * 2.1 stuffed the "flush" method into the middle of the file_operations
 * structure.  The FOP_NO_FLUSH symbol is for drivers that do not implement
 * flush (most of them), it can be inserted in initializers for all 2.x
 * kernel versions.
 */
#ifdef LINUX_20
#  define FOP_NO_FLUSH   /* nothing */
#  define TAG_LLSEEK    lseek
#  define TAG_POLL      select
#else
#  define FOP_NO_FLUSH  NULL,
#  define TAG_LLSEEK    llseek
#  define TAG_POLL      poll
#endif



/*
 * fasync changed in 2.2.
 */
#ifdef LINUX_20
/*  typedef struct inode *fasync_file; */
#  define fasync_file struct inode *
#else
  typedef int fasync_file;
#endif

/* kill_fasync had less arguments, and a different indirection in the first */
#ifndef LINUX_24
#  define kill_fasync(ptrptr,sig,band)  kill_fasync(*(ptrptr),(sig))
#endif

/* other things that are virtualized: define the new functions for the old k */
#ifdef LINUX_20
#  define in_interrupt() (intr_count!=0)
#  define mdelay(x) udelay((x)*1000)
#  define signal_pending(current)  ((current)->signal & ~(current)->blocked)
#endif

#ifdef LINUX_PCI_H /* only if PCI stuff is being used */
#  ifdef LINUX_20
#    include "pci-compat.h" /* a whole set of replacement functions */
#  else
#    define  pci_release_device(d) /* placeholder, used in 2.0 to free stuff */
#  endif
#endif



/*
 * Some task state stuff
 */

#ifndef set_current_state
#  define set_current_state(s) current->state = (s);
#endif

#ifdef LINUX_20
extern inline void schedule_timeout(int timeout)
{
    current->timeout = jiffies + timeout;
    current->state = TASK_INTERRUPTIBLE;
    schedule();
    current->timeout = 0;
}

extern inline long sleep_on_timeout(wait_queue_head_t *q, signed long timeout)
{
    signed long early = 0;
        
    current->timeout = jiffies + timeout;
    sleep_on (q);
    if (current->timeout > 0) {
        early = current->timeout - jiffies;
        current->timeout = 0;
    }
    return early;
}


extern inline long interruptible_sleep_on_timeout(wait_queue_head_t *q,
                signed long timeout)
{
    signed long early = 0;
        
    current->timeout = jiffies + timeout;
    interruptible_sleep_on (q);
    if (current->timeout > 0) {
        early = current->timeout - jiffies;
        current->timeout = 0;
    }
    return early;
}

#endif /* LINUX_20 */

/*
 * Schedule_task was a late 2.4 addition.
 */
#ifndef LINUX_24
extern inline int schedule_task(struct tq_struct *task)
{
        queue_task(task, &tq_scheduler);
        return 1;
}
#endif


/*
 * Timing issues
 */
#ifdef LINUX_20
#  define get_fast_time do_gettimeofday
#endif

#ifdef _LINUX_DELAY_H /* only if linux/delay.h is included */
#  ifndef mdelay /* linux-2.0 */
#    ifndef MAX_UDELAY_MS
#      define MAX_UDELAY_MS   5
#    endif
#    define mdelay(n) (\
        (__builtin_constant_p(n) && (n)<=MAX_UDELAY_MS) ? udelay((n)*1000) : \
        ({unsigned long msec=(n); while (msec--) udelay(1000);}))
#  endif /* mdelay */
#endif /* _LINUX_DELAY_H */


/*
 * No del_timer_sync before 2.4
 */
#ifndef LINUX_24
#  define del_timer_sync(timer) del_timer(timer)  /* and hope */
#endif

/*
 * mod_timer wasn't present in 2.0
 */
#ifdef LINUX_20
static inline int mod_timer(struct timer_list *timer, unsigned long expires)
{
    int pending = del_timer(timer);
    if (pending) {
        timer->expires = expires;
        add_timer(timer);
    }
    return pending;
}
#endif
/*
 * Various changes in mmap and friends.
 */

#ifndef NOPAGE_SIGBUS
#  define NOPAGE_SIGBUS  NULL  /* return value of the nopage memory method */
#  define NOPAGE_OOM     NULL  /* No real equivalent in older kernels */
#endif

#ifndef VM_RESERVED            /* Added 2.4.0-test10 */
#  define VM_RESERVED 0
#endif

#ifdef LINUX_24 /* use "vm_pgoff" to get an offset */
#define VMA_OFFSET(vma)  ((vma)->vm_pgoff << PAGE_SHIFT)
#else /* use "vm_offset" */
#define VMA_OFFSET(vma)  ((vma)->vm_offset)
#endif

#ifdef MAP_NR
#define virt_to_page(page) (mem_map + MAP_NR(page))
#endif

#ifndef get_page
#  define get_page(p) atomic_inc(&(p)->count)
#endif

/*
 * No DMA lock in 2.0.
 */
#ifdef LINUX_20
static inline unsigned long claim_dma_lock(void)
{
    unsigned long flags;
    save_flags(flags);
    cli();
    return flags;
}

static inline void release_dma_lock(unsigned long flags)
{
    restore_flags(flags);
}
#endif


/*
 * I/O memory was not managed by ealier kernels, define them as success
 */

#if 0 /* FIXME: what is the right way to do request_mem_region? */
#ifndef LINUX_24
#  define check_mem_region(start, len)          0
#  define request_mem_region(start, len, name)  0
#  define release_mem_region(start, len)        0

   /*
    * Also, request_ and release_ region used to return void. Return 0 instead
    */
#  define request_region(s, l, n)  ({request_region((s),(l),(n));0;})
#  define release_region(s, l)     ({release_region((s),(l));0;})

#endif /* not LINUX_24 */
#endif

/*
 * Block layer stuff.
 */
#ifndef LINUX_24

/* BLK_DEFAULT_QUEUE for use with these macros only!!!! */
#define BLK_DEFAULT_QUEUE(major) blk_dev[(major)].request_fn
#define blk_init_queue(where,request_fn) where = request_fn;
#define blk_cleanup_queue(where) where = NULL;

/* No QUEUE_EMPTY in older kernels */
#ifndef QUEUE_EMPTY  /* Driver can redefine it too */
#  define QUEUE_EMPTY (CURRENT != NULL)
#endif

#ifdef RO_IOCTLS
static inline int blk_ioctl(kdev_t dev, unsigned int cmd, unsigned long arg)
{
    int err;

    switch (cmd) {
      case BLKRAGET: /* return the readahead value */
        if (!arg)  return -EINVAL;
        err = ! access_ok(VERIFY_WRITE, arg, sizeof(long));
        if (err) return -EFAULT;
        PUT_USER(read_ahead[MAJOR(dev)],(long *) arg);
        return 0;

      case BLKRASET: /* set the readahead value */
        if (!capable(CAP_SYS_ADMIN)) return -EACCES;
        if (arg > 0xff) return -EINVAL; /* limit it */
        read_ahead[MAJOR(dev)] = arg;
        return 0;

      case BLKFLSBUF: /* flush */
        if (! capable(CAP_SYS_ADMIN)) return -EACCES; /* only root */
        fsync_dev(dev);
        invalidate_buffers(dev);
        return 0;

        RO_IOCTLS(dev, arg);
    }
    return -ENOTTY;
}
#endif  /* RO_IOCTLS */

#ifdef LINUX_EXTENDED_PARTITION /* defined in genhd.h */
static inline void register_disk(struct gendisk *gdev, kdev_t dev,
                unsigned minors, struct file_operations *ops, long size)
{
    if (! gdev)
        return;
    resetup_one_dev(gdev, MINOR(dev) >> gdev->minor_shift);
}
#endif /* LINUX_EXTENDED_PARTITION */


#else  /* it is Linux 2.4 */
#define HAVE_BLKPG_H
#endif /* LINUX_24 */



#ifdef LINUX_20 /* physical and virtual addresses had the same value */
#  define __pa(a) (a)
#  define __va(a) (a)
#endif

/*
 * Network driver compatibility
 */

/*
 * 2.0 dev_kfree_skb had an extra arg.  The following is a little dangerous
 * in that it assumes that FREE_WRITE is always wanted.  Very few 2.0 drivers
 * use FREE_READ, but the number is *not* zero...
 *
 * Also: implement the non-checking versions of a couple skb functions -
 * but they still check in 2.0.
 */
#ifdef LINUX_20
#  define dev_kfree_skb(skb) dev_kfree_skb((skb), FREE_WRITE);

#  define __skb_push(skb, len) skb_push((skb), (len))
#  define __skb_put(skb, len)  skb_put((skb), (len))
#endif

/*
 * Softnet changes in 2.4
 */
#ifndef LINUX_24
#  ifdef _LINUX_NETDEVICE_H /* only if netdevice.h was included */
#  define netif_start_queue(dev) clear_bit(0, (void *) &(dev)->tbusy);
#  define netif_stop_queue(dev)  set_bit(0, (void *) &(dev)->tbusy);

static inline void netif_wake_queue(struct device *dev)
{
    clear_bit(0, (void *) &(dev)->tbusy);
    mark_bh(NET_BH);
}

/* struct device became struct net_device */
#  define net_device device
#  endif /* netdevice.h */
#endif /* ! LINUX_24 */

/*
 * Memory barrier stuff, define what's missing from older kernel versions
 */
#ifdef switch_to /* this is always a macro, defined in <asm/sysstem.h> */

#  ifndef set_mb
#    define set_mb(var, value) do {(var) = (value); mb();}  while 0
#  endif
#  ifndef set_rmb
#    define set_rmb(var, value) do {(var) = (value); rmb();}  while 0
#  endif
#  ifndef set_wmb
#    define set_wmb(var, value) do {(var) = (value); wmb();}  while 0
#  endif

/* The hw barriers are defined as sw barriers. A correct thing if this
   specific kernel/platform is supported but has no specific instruction */
#  ifndef mb
#    define mb barrier
#  endif
#  ifndef rmb
#    define rmb barrier
#  endif
#  ifndef wmb
#    define wmb barrier
#  endif

#endif /* switch to (i.e. <asm/system.h>) */


#endif /* _SYSDEP_H_ */
-------------- next part --------------
In file included from /usr/include/linux/bitops.h:69,
                 from /usr/include/asm/system.h:7,
                 from /usr/include/linux/sched.h:16,
                 from ecak.c:18:
/usr/include/asm/bitops.h:327:2: warning: #warning This includefile is not 
available on all architectures.
/usr/include/asm/bitops.h:328:2: warning: #warning Using kernel headers in 
userspace: atomicity not guaranteed
In file included from /usr/include/linux/signal.h:4,
                 from /usr/include/linux/sched.h:25,
                 from ecak.c:18:
/usr/include/asm/signal.h:107: syntax error before "sigset_t"
/usr/include/asm/signal.h:110: syntax error before '}' token
In file included from /usr/include/linux/sched.h:81,
                 from ecak.c:18:
/usr/include/linux/timer.h:45: syntax error before "spinlock_t"
/usr/include/linux/timer.h:53: syntax error before '}' token
/usr/include/linux/timer.h:67: syntax error before "tvec_base_t"
/usr/include/linux/timer.h:101: syntax error before "tvec_bases"
/usr/include/linux/timer.h: In function `init_timer':
/usr/include/linux/timer.h:105: dereferencing pointer to incomplete type
/usr/include/linux/timer.h:105: dereferencing pointer to incomplete type
/usr/include/linux/timer.h:106: dereferencing pointer to incomplete type
/usr/include/linux/timer.h: In function `timer_pending':
/usr/include/linux/timer.h:121: dereferencing pointer to incomplete type
In file included from ecak.c:22:
/usr/include/linux/malloc.h:3:2: warning: #warning The Use of linux/malloc.h is 
deprecated, use linux/slab.h
In file included from ecak.c:26:
/usr/include/linux/interrupt.h:44:25: asm/hardirq.h: No such file or directory
/usr/include/linux/interrupt.h:45:25: asm/softirq.h: No such file or directory
In file included from ecak.c:26:
/usr/include/linux/interrupt.h: At top level:
/usr/include/linux/interrupt.h:77: syntax error before '(' token
/usr/include/linux/interrupt.h:78: syntax error before '(' token
/usr/include/linux/interrupt.h:106: syntax error before "atomic_t"
/usr/include/linux/interrupt.h:109: syntax error before '}' token
/usr/include/linux/interrupt.h:127: `CONFIG_X86_L1_CACHE_SHIFT' undeclared here 
(not in a function)
/usr/include/linux/interrupt.h:127: requested alignment is not a constant
/usr/include/linux/interrupt.h:154: syntax error before '(' token
/usr/include/linux/interrupt.h: In function `tasklet_schedule':
/usr/include/linux/interrupt.h:158: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: At top level:
/usr/include/linux/interrupt.h:162: syntax error before '(' token
/usr/include/linux/interrupt.h: In function `tasklet_hi_schedule':
/usr/include/linux/interrupt.h:166: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: In function `tasklet_disable_nosync':
/usr/include/linux/interrupt.h:173: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: In function `tasklet_enable':
/usr/include/linux/interrupt.h:187: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: In function `tasklet_hi_enable':
/usr/include/linux/interrupt.h:193: dereferencing pointer to incomplete type
/usr/include/linux/interrupt.h: At top level:
/usr/include/linux/interrupt.h:224: syntax error before "global_bh_lock"
/usr/include/linux/interrupt.h: In function `mark_bh':
/usr/include/linux/interrupt.h:228: invalid use of undefined type `struct 
tasklet_struct'
In file included from ecak.c:28:
/usr/include/linux/tqueue.h: At top level:
/usr/include/linux/tqueue.h:94: syntax error before "tqueue_lock"
In file included from ecak.c:30:
/usr/include/asm/io.h:4:2: warning: #warning <asm/io.h> is deprecated, use 
<sys/io.h> instead
ecak.c:31:47: asm/uaccess.h: No such file or directory
In file included from ecak.c:33:
sysdep.h:231:27: asm/uaccess.h: No such file or directory
ecak.c:53: warning: `struct file' declared inside parameter list
ecak.c:53: warning: its scope is only this definition or declaration, which is 
probably not what you want
ecak.c:53: warning: `struct inode' declared inside parameter list
ecak.c: In function `ecak_open':
ecak.c:55: union has no member named `usecount'
ecak.c: At top level:
ecak.c:63: warning: `struct file' declared inside parameter list
ecak.c:63: warning: `struct inode' declared inside parameter list
ecak.c: In function `ecak_release':
ecak.c:65: union has no member named `usecount'
ecak.c: At top level:
ecak.c:72: warning: `struct file' declared inside parameter list
ecak.c: In function `ecak_i_read':
ecak.c:80: `current' undeclared (first use in this function)
ecak.c:80: (Each undeclared identifier is reported only once
ecak.c:80: for each function it appears in.)
ecak.c:81: `ERESTARTSYS' undeclared (first use in this function)
ecak.c: At top level:
ecak.c:113: warning: `struct file' declared inside parameter list
ecak.c:113: warning: `struct inode' declared inside parameter list
ecak.c:128: variable `ecak_i_fops' has initializer but incomplete type
ecak.c:129: unknown field `read' specified in initializer
ecak.c:129: warning: excess elements in struct initializer
ecak.c:129: warning: (near initialization for `ecak_i_fops')
ecak.c:130: unknown field `ioctl' specified in initializer
ecak.c:130: warning: excess elements in struct initializer
ecak.c:130: warning: (near initialization for `ecak_i_fops')
ecak.c:131: unknown field `open' specified in initializer
ecak.c:131: warning: excess elements in struct initializer
ecak.c:131: warning: (near initialization for `ecak_i_fops')
ecak.c:132: unknown field `release' specified in initializer
ecak.c:132: warning: excess elements in struct initializer
ecak.c:132: warning: (near initialization for `ecak_i_fops')
ecak.c: In function `ecak_init':
ecak.c:198: `KERN_INFO' undeclared (first use in this function)
ecak.c:198: syntax error before string constant
ecak.c:207: syntax error before string constant
ecak.c:212: `GFP_KERNEL' undeclared (first use in this function)
ecak.c:223: syntax error before string constant
ecak.c: At top level:
ecak.c:128: storage size of `ecak_i_fops' isn't known
From [EMAIL PROTECTED]  Thu Aug 12 15:58:45 2004
From: [EMAIL PROTECTED] (Arun Thomas)
Date: Thu Aug 12 15:53:27 2004
Subject: [Mailinglist] How to view dvi files (or pdf or ps) with lynx?
Message-ID: <[EMAIL PROTECTED]>

Hello,

   Did you try out official Debian's site "www.debian.org"??



                       
Arun Thomas

S-7 IT

RASET



Mob: (+91) 9895352284


______________________________________________________
Get Paid... With Your Free Email at
http://www.zwallet.com/index.html?user=wifia

Reply via email to