Add missing input key definitions
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.24.h
1 #ifndef LINUX_26_24_COMPAT_H
2 #define LINUX_26_24_COMPAT_H
3
4 #include <linux/autoconf.h>
5 #include <linux/version.h>
6
7 /* Compat work for 2.6.21, 2.6.22 and 2.6.23 */
8 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
9
10 #include <asm/atomic.h>
11 #include <linux/netdevice.h>
12 #include <linux/skbuff.h>
13 #include <linux/usb.h>
14 #include <linux/types.h>
15 #include <linux/list.h>
16
17 #define KEY_BLUETOOTH   237
18 #define KEY_WLAN        238
19 #define KEY_UWB         239
20
21 /* Added on 2.6.24 in include/linux/types.h by Al viro on commit 142956af */
22 typedef unsigned long               uintptr_t;
23
24 /* From include/linux/net.h */
25 enum sock_shutdown_cmd {
26         SHUT_RD         = 0,
27         SHUT_WR         = 1,
28         SHUT_RDWR       = 2,
29 };
30
31 #if (LINUX_VERSION_CODE == KERNEL_VERSION(2,6,23)) /* Local check */
32 /* Added as of 2.6.24 in include/linux/skbuff.h.
33  *
34  * Although 2.6.23 does support for CONFIG_NETDEVICES_MULTIQUEUE
35  * this helper was not added until 2.6.24. This implementation
36  * is exactly as it is on newer kernels.
37  *
38  * For older kernels we use the an internal mac80211 hack.
39  * For details see changes to include/net/mac80211.h through
40  * compat.diff and compat/mq_compat.h */
41 static inline u16 skb_get_queue_mapping(struct sk_buff *skb)
42 {
43 #ifdef CONFIG_NETDEVICES_MULTIQUEUE
44         return skb->queue_mapping;
45 #else
46         return 0;
47 #endif
48 }
49 #endif /* Local 2.6.23 check */
50
51 /* On older kernels we handle this a bit differently, so we yield to that
52  * code for its implementation in mq_compat.h as we want to make
53  * use of the internal mac80211 __ieee80211_queue_stopped() which itself
54  * uses internal mac80211 data structure hacks. */
55 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)) /* Local check */
56 /**
57  * netif_subqueue_stopped - test status of subqueue
58  * @dev: network device
59  * @queue_index: sub queue index
60  *
61  * Check individual transmit queue of a device with multiple transmit queues.
62  */
63 static inline int __netif_subqueue_stopped(const struct net_device *dev,
64                                         u16 queue_index)
65 {
66 #ifdef CONFIG_NETDEVICES_MULTIQUEUE
67         return test_bit(__LINK_STATE_XOFF,
68         &dev->egress_subqueue[queue_index].state);
69 #else
70         return 0;
71 #endif
72 }
73
74 /* Note: although the backport implementation for netif_subqueue_stopped
75  * on older kernels is identical to upstream __netif_subqueue_stopped()
76  * (except for a const qualifier) we implement netif_subqueue_stopped()
77  * as part of mac80211 as it relies on internal mac80211 structures we
78  * use for MQ support. We this implement it in mq_compat.h */
79
80 #endif /* Local 2.6.23 check */
81
82 /*
83  * Force link bug if constructor is used, can't be done compatibly
84  * because constructor arguments were swapped since then!
85  */
86 extern void __incompatible_kmem_cache_create(void);
87
88 /* 2.6.21 and 2.6.22 kmem_cache_create() takes 6 arguments */
89 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23))
90 #define kmem_cache_create(name, objsize, align, flags, ctor)    \
91         ({                                                      \
92                 if (ctor) __incompatible_kmem_cache_create();   \
93                 kmem_cache_create((name), (objsize), (align),   \
94                                   (flags), NULL, NULL);         \
95         })
96 #endif
97
98 /* 2.6.23 kmem_cache_create() takes 5 arguments */
99 #if (LINUX_VERSION_CODE == KERNEL_VERSION(2,6,23))
100 #define kmem_cache_create(name, objsize, align, flags, ctor)    \
101         ({                                                      \
102                 if (ctor) __incompatible_kmem_cache_create();   \
103                 kmem_cache_create((name), (objsize), (align),   \
104                                   (flags), NULL);               \
105         })
106 #endif
107
108 /* From include/linux/mod_devicetable.h */
109
110 /* SSB core, see drivers/ssb/ */
111 #ifndef SSB_DEVICE
112 struct ssb_device_id {
113         __u16   vendor;
114         __u16   coreid;
115         __u8    revision;
116 };
117 #define SSB_DEVICE(_vendor, _coreid, _revision)  \
118         { .vendor = _vendor, .coreid = _coreid, .revision = _revision, }
119 #define SSB_DEVTABLE_END  \
120         { 0, },
121
122 #define SSB_ANY_VENDOR          0xFFFF
123 #define SSB_ANY_ID              0xFFFF
124 #define SSB_ANY_REV             0xFF
125 #endif
126
127
128 /* Namespace stuff, introduced on 2.6.24 */
129 #define dev_get_by_index(a, b)          dev_get_by_index(b)
130 #define __dev_get_by_index(a, b)        __dev_get_by_index(b)
131
132 /*
133  * Display a 6 byte device address (MAC) in a readable format.
134  */
135 #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
136 extern char *print_mac(char *buf, const u8 *addr);
137 #define DECLARE_MAC_BUF(var) char var[18] __maybe_unused
138
139 extern int              eth_header(struct sk_buff *skb, struct net_device *dev,
140                                 unsigned short type, void *daddr,
141                                 void *saddr, unsigned len);
142 extern int              eth_rebuild_header(struct sk_buff *skb);
143 extern void             eth_header_cache_update(struct hh_cache *hh, struct net_device *dev,
144                                 unsigned char * haddr);
145 extern int              eth_header_cache(struct neighbour *neigh,
146                         struct hh_cache *hh);
147
148 /* This structure is simply not present on 2.6.22 and 2.6.23 */
149 struct header_ops {
150         int     (*create) (struct sk_buff *skb, struct net_device *dev,
151                 unsigned short type, void *daddr,
152                 void *saddr, unsigned len);
153         int     (*parse)(const struct sk_buff *skb, unsigned char *haddr);
154         int     (*rebuild)(struct sk_buff *skb);
155         #define HAVE_HEADER_CACHE
156         int     (*cache)(struct neighbour *neigh, struct hh_cache *hh);
157         void    (*cache_update)(struct hh_cache *hh,
158                 struct net_device *dev,
159                 unsigned char *haddr);
160 };
161
162 /* net/ieee80211/ieee80211_crypt_tkip uses sg_init_table. This was added on
163  * 2.6.24. CONFIG_DEBUG_SG was added in 2.6.24 as well, so lets just ignore
164  * the debug stuff. Note that adding this required changes to the struct
165  * scatterlist on include/asm/scatterlist*, so the right way to port this
166  * is to simply ignore the new structure changes and zero the scatterlist
167  * array. We lave the kdoc intact for reference.
168  */
169
170 /**
171  * sg_mark_end - Mark the end of the scatterlist
172  * @sg:          SG entryScatterlist
173  *
174  * Description:
175  *   Marks the passed in sg entry as the termination point for the sg
176  *   table. A call to sg_next() on this entry will return NULL.
177  *
178  **/
179 static inline void sg_mark_end(struct scatterlist *sg)
180 {
181 }
182
183 /**
184  * sg_init_table - Initialize SG table
185  * @sgl:           The SG table
186  * @nents:         Number of entries in table
187  *
188  * Notes:
189  *   If this is part of a chained sg table, sg_mark_end() should be
190  *   used only on the last table part.
191  *
192  **/
193 static inline void sg_init_table(struct scatterlist *sgl, unsigned int nents)
194 {
195         memset(sgl, 0, sizeof(*sgl) * nents);
196 }
197
198 /**
199  * usb_endpoint_num - get the endpoint's number
200  * @epd: endpoint to be checked
201  *
202  * Returns @epd's number: 0 to 15.
203  */
204 static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
205 {
206         return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK;
207 }
208
209 /* Helper to make struct pci_dev is_pcie compatibility code smaller */
210 int compat_is_pcie(struct pci_dev *pdev);
211
212 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) */
213
214 #endif /* LINUX_26_24_COMPAT_H */