compat: add some workarounds for Debian squeeze
[~tnikolova/compat/.git] / include / linux / compat-2.6.33.h
1 #ifndef LINUX_26_33_COMPAT_H
2 #define LINUX_26_33_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
7
8 #include <linux/skbuff.h>
9 #include <linux/pci.h>
10 #if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE)
11 #include <pcmcia/cs_types.h>
12 #include <pcmcia/cistpl.h>
13 #include <pcmcia/ds.h>
14 #endif
15 #include <linux/firmware.h>
16
17 #define release_firmware compat_release_firmware
18 #define request_firmware compat_request_firmware
19 #define request_firmware_nowait compat_request_firmware_nowait
20
21 #if defined(CONFIG_FW_LOADER) || defined(CONFIG_FW_LOADER_MODULE)
22 int compat_request_firmware(const struct firmware **fw, const char *name,
23                      struct device *device);
24 int compat_request_firmware_nowait(
25         struct module *module, int uevent,
26         const char *name, struct device *device, gfp_t gfp, void *context,
27         void (*cont)(const struct firmware *fw, void *context));
28
29 void compat_release_firmware(const struct firmware *fw);
30 #else
31 static inline int compat_request_firmware(const struct firmware **fw,
32                                    const char *name,
33                                    struct device *device)
34 {
35         return -EINVAL;
36 }
37 static inline int request_firmware_nowait(
38         struct module *module, int uevent,
39         const char *name, struct device *device, gfp_t gfp, void *context,
40         void (*cont)(const struct firmware *fw, void *context))
41 {
42         return -EINVAL;
43 }
44
45 static inline void compat_release_firmware(const struct firmware *fw)
46 {
47 }
48 #endif
49
50 #define KEY_RFKILL              247     /* Key that controls all radios */
51
52 #define IFF_DONT_BRIDGE 0x800           /* disallow bridging this ether dev */
53 /* source: include/linux/if.h */
54
55 /* this will never happen on older kernels */
56 #define NETDEV_POST_INIT 0xffff
57
58 /* mask netdev_alloc_skb_ip_align as debian squeeze also backports this */
59 #define netdev_alloc_skb_ip_align(a, b) compat_netdev_alloc_skb_ip_align(a, b)
60
61 static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
62                 unsigned int length)
63 {
64         struct sk_buff *skb = netdev_alloc_skb(dev, length + NET_IP_ALIGN);
65
66         if (NET_IP_ALIGN && skb)
67                 skb_reserve(skb, NET_IP_ALIGN);
68         return skb;
69 }
70
71 #if defined(CONFIG_PCCARD) || defined(CONFIG_PCCARD_MODULE)
72
73 #if defined(CONFIG_PCMCIA) || defined(CONFIG_PCMCIA_MODULE)
74
75 #define pcmcia_request_window(a, b, c) pcmcia_request_window(&a, b, c)
76
77 #define pcmcia_map_mem_page(a, b, c) pcmcia_map_mem_page(b, c)
78
79 /* loop over CIS entries */
80 int pcmcia_loop_tuple(struct pcmcia_device *p_dev, cisdata_t code,
81                       int (*loop_tuple) (struct pcmcia_device *p_dev,
82                                          tuple_t *tuple,
83                                          void *priv_data),
84                       void *priv_data);
85
86 #endif /* CONFIG_PCMCIA */
87
88 /* loop over CIS entries */
89 int pccard_loop_tuple(struct pcmcia_socket *s, unsigned int function,
90                       cisdata_t code, cisparse_t *parse, void *priv_data,
91                       int (*loop_tuple) (tuple_t *tuple,
92                                          cisparse_t *parse,
93                                          void *priv_data));
94
95 #endif /* CONFIG_PCCARD */
96
97 /**
98  * list_for_each_entry_continue_rcu - continue iteration over list of given type
99  * @pos:        the type * to use as a loop cursor.
100  * @head:       the head for your list.
101  * @member:     the name of the list_struct within the struct.
102  *
103  * Continue to iterate over list of given type, continuing after
104  * the current position.
105  */
106 #define list_for_each_entry_continue_rcu(pos, head, member)             \
107         for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \
108              prefetch(pos->member.next), &pos->member != (head);        \
109              pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
110
111 #define sock_recv_ts_and_drops(msg, sk, skb) sock_recv_timestamp(msg, sk, skb)
112
113 /* mask pci_pcie_cap as debian squeeze also backports this */
114 #define pci_pcie_cap(a) compat_pci_pcie_cap(a)
115
116 /**
117  * pci_pcie_cap - get the saved PCIe capability offset
118  * @dev: PCI device
119  *
120  * PCIe capability offset is calculated at PCI device initialization
121  * time and saved in the data structure. This function returns saved
122  * PCIe capability offset. Using this instead of pci_find_capability()
123  * reduces unnecessary search in the PCI configuration space. If you
124  * need to calculate PCIe capability offset from raw device for some
125  * reasons, please use pci_find_capability() instead.
126  */
127 static inline int pci_pcie_cap(struct pci_dev *dev)
128 {
129         return pci_find_capability(dev, PCI_CAP_ID_EXP);
130 }
131
132 /**
133  * pci_is_pcie - check if the PCI device is PCI Express capable
134  * @dev: PCI device
135  *
136  * Retrun true if the PCI device is PCI Express capable, false otherwise.
137  */
138 static inline bool pci_is_pcie(struct pci_dev *dev)
139 {
140 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
141         return dev->is_pcie;
142 #else
143         return !!pci_pcie_cap(dev);
144 #endif
145 }
146
147 #ifdef __GNUC__
148 #define __always_unused                 __attribute__((unused))
149 #else
150 #define __always_unused                 /* unimplemented */
151 #endif
152
153 /* mask IS_ERR_OR_NULL as debian squeeze also backports this */
154 #define IS_ERR_OR_NULL(a) compat_IS_ERR_OR_NULL(a)
155
156 static inline long __must_check IS_ERR_OR_NULL(const void *ptr)
157 {
158         return !ptr || IS_ERR_VALUE((unsigned long)ptr);
159 }
160
161 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33)) */
162
163 #endif /* LINUX_26_33_COMPAT_H */