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