1cfd6e5cda1321217c728355c2325f6d87c51f27
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.34.h
1 #ifndef LINUX_26_34_COMPAT_H
2 #define LINUX_26_34_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34))
7
8 #include <linux/netdevice.h>
9
10 #define netdev_mc_count(dev) ((dev)->mc_count)
11 #define netdev_mc_empty(dev) (netdev_mc_count(dev) == 0)
12
13 #define netdev_for_each_mc_addr(mclist, dev) \
14         for (mclist = dev->mc_list; mclist; mclist = mclist->next)
15 /* source: include/linux/netdevice.h */
16
17
18 /* Logging, debugging and troubleshooting/diagnostic helpers. */
19
20 /* netdev_printk helpers, similar to dev_printk */
21
22 static inline const char *netdev_name(const struct net_device *dev)
23 {
24         if (dev->reg_state != NETREG_REGISTERED)
25                 return "(unregistered net_device)";
26         return dev->name;
27 }
28
29 #define netdev_printk(level, netdev, format, args...)           \
30         dev_printk(level, (netdev)->dev.parent,                 \
31                    "%s: " format,                               \
32                    netdev_name(netdev), ##args)
33
34 #define netdev_emerg(dev, format, args...)                      \
35         netdev_printk(KERN_EMERG, dev, format, ##args)
36 #define netdev_alert(dev, format, args...)                      \
37         netdev_printk(KERN_ALERT, dev, format, ##args)
38 #define netdev_crit(dev, format, args...)                       \
39         netdev_printk(KERN_CRIT, dev, format, ##args)
40 #define netdev_err(dev, format, args...)                        \
41         netdev_printk(KERN_ERR, dev, format, ##args)
42 #define netdev_warn(dev, format, args...)                       \
43         netdev_printk(KERN_WARNING, dev, format, ##args)
44 #define netdev_notice(dev, format, args...)                     \
45         netdev_printk(KERN_NOTICE, dev, format, ##args)
46 #define netdev_info(dev, format, args...)                       \
47         netdev_printk(KERN_INFO, dev, format, ##args)
48
49 #if defined(DEBUG)
50 #define netdev_dbg(__dev, format, args...)                      \
51         netdev_printk(KERN_DEBUG, __dev, format, ##args)
52 #elif defined(CONFIG_DYNAMIC_DEBUG)
53 #define netdev_dbg(__dev, format, args...)                      \
54 do {                                                            \
55         dynamic_dev_dbg((__dev)->dev.parent, "%s: " format,     \
56                         netdev_name(__dev), ##args);            \
57 } while (0)
58 #else
59 #define netdev_dbg(__dev, format, args...)                      \
60 ({                                                              \
61         if (0)                                                  \
62                 netdev_printk(KERN_DEBUG, __dev, format, ##args); \
63         0;                                                      \
64 })
65 #endif
66
67 #if defined(VERBOSE_DEBUG)
68 #define netdev_vdbg     netdev_dbg
69 #else
70
71 #define netdev_vdbg(dev, format, args...)                       \
72 ({                                                              \
73         if (0)                                                  \
74                 netdev_printk(KERN_DEBUG, dev, format, ##args); \
75         0;                                                      \
76 })
77 #endif
78
79 /*
80  * netdev_WARN() acts like dev_printk(), but with the key difference
81  * of using a WARN/WARN_ON to get the message out, including the
82  * file/line information and a backtrace.
83  */
84 #define netdev_WARN(dev, format, args...)                       \
85         WARN(1, "netdevice: %s\n" format, netdev_name(dev), ##args);
86
87 /* netif printk helpers, similar to netdev_printk */
88
89 #define netif_printk(priv, type, level, dev, fmt, args...)      \
90 do {                                                            \
91         if (netif_msg_##type(priv))                             \
92                 netdev_printk(level, (dev), fmt, ##args);       \
93 } while (0)
94
95 #define netif_emerg(priv, type, dev, fmt, args...)              \
96         netif_printk(priv, type, KERN_EMERG, dev, fmt, ##args)
97 #define netif_alert(priv, type, dev, fmt, args...)              \
98         netif_printk(priv, type, KERN_ALERT, dev, fmt, ##args)
99 #define netif_crit(priv, type, dev, fmt, args...)               \
100         netif_printk(priv, type, KERN_CRIT, dev, fmt, ##args)
101 #define netif_err(priv, type, dev, fmt, args...)                \
102         netif_printk(priv, type, KERN_ERR, dev, fmt, ##args)
103 #define netif_warn(priv, type, dev, fmt, args...)               \
104         netif_printk(priv, type, KERN_WARNING, dev, fmt, ##args)
105 #define netif_notice(priv, type, dev, fmt, args...)             \
106         netif_printk(priv, type, KERN_NOTICE, dev, fmt, ##args)
107 #define netif_info(priv, type, dev, fmt, args...)               \
108         netif_printk(priv, type, KERN_INFO, (dev), fmt, ##args)
109
110 #if defined(DEBUG)
111 #define netif_dbg(priv, type, dev, format, args...)             \
112         netif_printk(priv, type, KERN_DEBUG, dev, format, ##args)
113 #elif defined(CONFIG_DYNAMIC_DEBUG)
114 #define netif_dbg(priv, type, netdev, format, args...)          \
115 do {                                                            \
116         if (netif_msg_##type(priv))                             \
117                 dynamic_dev_dbg((netdev)->dev.parent,           \
118                                 "%s: " format,                  \
119                                 netdev_name(netdev), ##args);   \
120 } while (0)
121 #else
122 #define netif_dbg(priv, type, dev, format, args...)                     \
123 ({                                                                      \
124         if (0)                                                          \
125                 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \
126         0;                                                              \
127 })
128 #endif
129
130 #if defined(VERBOSE_DEBUG)
131 #define netif_vdbg      netdev_dbg
132 #else
133 #define netif_vdbg(priv, type, dev, format, args...)            \
134 ({                                                              \
135         if (0)                                                  \
136                 netif_printk(KERN_DEBUG, dev, format, ##args);  \
137         0;                                                      \
138 })
139 #endif
140 /* source: include/linux/netdevice.h */
141
142
143 static inline void device_lock(struct device *dev)
144 {
145 #if defined(CONFIG_NONE) || defined(CONFIG_PREEMPT_RT) || \
146     defined(CONFIG_PREEMPT_VOLUNTARY) || defined(CONFIG_PREEMPT_DESKTOP)
147         mutex_lock(&dev->parent->mutex);
148 #else
149         down(&dev->sem);
150 #endif
151 }
152
153 static inline int device_trylock(struct device *dev)
154 {
155 #if defined(CONFIG_NONE) || defined(CONFIG_PREEMPT_RT) || \
156     defined(CONFIG_PREEMPT_VOLUNTARY) || defined(CONFIG_PREEMPT_DESKTOP)
157         return mutex_trylock(&dev->mutex);
158 #else
159         return down_trylock(&dev->sem);
160 #endif
161 }
162
163 static inline void device_unlock(struct device *dev)
164 {
165 #if defined(CONFIG_NONE) || defined(CONFIG_PREEMPT_RT) || \
166     defined(CONFIG_PREEMPT_VOLUNTARY) || defined(CONFIG_PREEMPT_DESKTOP)
167         mutex_unlock(&dev->mutex);
168 #else
169         up(&dev->sem);
170 #endif
171 }
172
173 #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
174 #define PCMCIA_DEVICE_PROD_ID3(v3, vh3) { \
175         .match_flags = PCMCIA_DEV_ID_MATCH_PROD_ID3, \
176         .prod_id = { NULL, NULL, (v3), NULL },  \
177         .prod_id_hash = { 0, 0, (vh3), 0 }, }
178 #endif
179
180 #define rcu_dereference_check(p, c) rcu_dereference(p)
181
182 /**
183  *      sysfs_attr_init - initialize a dynamically allocated sysfs attribute
184  *      @attr: struct attribute to initialize
185  *
186  *      Initialize a dynamically allocated struct attribute so we can
187  *      make lockdep happy.  This is a new requirement for attributes
188  *      and initially this is only needed when lockdep is enabled.
189  *      Lockdep gives a nice error when your attribute is added to
190  *      sysfs if you don't have this.
191  */
192 #ifdef CONFIG_DEBUG_LOCK_ALLOC
193 #define sysfs_attr_init(attr)                           \
194 do {                                                    \
195         static struct lock_class_key __key;             \
196                                                         \
197         (attr)->key = &__key;                           \
198 } while(0)
199 #else
200 #define sysfs_attr_init(attr) do {} while(0)
201 #endif
202
203 /**
204  *      sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute
205  *      @attr: struct bin_attribute to initialize
206  *
207  *      Initialize a dynamically allocated struct bin_attribute so we
208  *      can make lockdep happy.  This is a new requirement for
209  *      attributes and initially this is only needed when lockdep is
210  *      enabled.  Lockdep gives a nice error when your attribute is
211  *      added to sysfs if you don't have this.
212  */
213 #define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
214
215 #define usb_alloc_coherent(dev, size, mem_flags, dma) usb_buffer_alloc(dev, size, mem_flags, dma)
216 #define usb_free_coherent(dev, size, addr, dma) usb_buffer_free(dev, size, addr, dma)
217
218 #ifdef CONFIG_NEED_DMA_MAP_STATE
219 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)        dma_addr_t ADDR_NAME
220 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)          __u32 LEN_NAME
221 #define dma_unmap_addr(PTR, ADDR_NAME)           ((PTR)->ADDR_NAME)
222 #define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  (((PTR)->ADDR_NAME) = (VAL))
223 #define dma_unmap_len(PTR, LEN_NAME)             ((PTR)->LEN_NAME)
224 #define dma_unmap_len_set(PTR, LEN_NAME, VAL)    (((PTR)->LEN_NAME) = (VAL))
225 #else
226 #define DEFINE_DMA_UNMAP_ADDR(ADDR_NAME)
227 #define DEFINE_DMA_UNMAP_LEN(LEN_NAME)
228 #define dma_unmap_addr(PTR, ADDR_NAME)           (0)
229 #define dma_unmap_addr_set(PTR, ADDR_NAME, VAL)  do { } while (0)
230 #define dma_unmap_len(PTR, LEN_NAME)             (0)
231 #define dma_unmap_len_set(PTR, LEN_NAME, VAL)    do { } while (0)
232 #endif
233
234 static inline int dma_set_coherent_mask(struct device *dev, u64 mask)
235 {
236         if (!dma_supported(dev, mask))
237                 return -EIO;
238         dev->coherent_dma_mask = mask;
239         return 0;
240 }
241
242 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */
243
244 #endif /* LINUX_26_34_COMPAT_H */