Towards compiling on 2.4
[people/mcb30/quickusb.git] / kernel / kernel_compat.h
1 #ifndef QUICKUSB_KERNEL_COMPAT_H
2 #define QUICKUSB_KERNEL_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
7
8 #include <asm/atomic.h>
9 #include <linux/slab.h>
10 #include <linux/usb.h>
11
12 #define __user
13
14 struct device;
15
16 struct kref {
17         atomic_t refcount;
18 };
19
20 static inline void kref_init ( struct kref *kref ) {
21         atomic_set ( &kref->refcount, 1 );
22 }
23
24 static inline void kref_get ( struct kref *kref ) {
25         atomic_inc ( &kref->refcount );
26 }
27
28 static inline void kref_put ( struct kref *kref,
29                               void (*release) ( struct kref *kref ) ) {
30         if ( atomic_dec_and_test ( &kref->refcount ) )
31                 release ( kref );
32 }
33
34 #define container_of(ptr, type, member) ( {                     \
35         const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
36         (type *)( (char *)__mptr - offsetof(type,member) ); } )
37
38 static inline struct usb_device *usb_get_dev ( struct usb_device *usb ) {
39         usb_inc_dev_use ( usb );
40         return usb;
41 }
42
43 static inline void usb_put_dev ( struct usb_device *usb ) {
44         usb_free_dev ( usb );
45 }
46
47 static inline unsigned iminor ( struct inode *inode ) {
48         return MINOR ( inode->i_rdev );
49 }
50
51 static inline struct class_simple *class_simple_create ( struct module *owner,
52                                                          const char *name ) {
53         return NULL;
54 }
55
56 static inline void class_simple_destroy ( struct class_simple *class ) {
57         /* Do nothing */
58 }
59
60 #define class_simple_device_add(...) NULL
61
62 static inline void class_simple_device_remove ( dev_t dev ) {
63         /* Do nothing */
64 }
65
66 static devfs_handle_t devfs_handle;
67 static struct file_operations quickusb_fops;
68
69 static inline int devfs_mk_cdev ( dev_t dev, umode_t mode,
70                                   const char *name ) {
71         devfs_handle = devfs_register ( NULL, name, DEVFS_FL_DEFAULT,
72                                         MAJOR ( dev ), MINOR ( dev ),
73                                         mode, &quickusb_fops, NULL );
74         return ( devfs_handle == NULL ) ? -EIO : 0;
75 }
76
77 static inline void devfs_remove ( const char *name ) {
78         devfs_unregister ( devfs_handle );
79 }
80
81 #define module_param( name, type, perm ) MODULE_PARM ( name, "i" )
82
83 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) */
84
85 #endif /* QUICKUSB_KERNEL_COMPAT_H */
86
87 /*
88  * Local variables:
89  *  c-basic-offset: 8
90  *  c-indent-level: 8
91  *  tab-width: 8
92  * End:
93  */