Added support for SLES11SP3
[~emulex/for-vlad/old/compat.git] / include / linux / compat-3.4.h
1 #ifndef LINUX_3_4_COMPAT_H
2 #define LINUX_3_4_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
7
8 #include <linux/etherdevice.h>
9 #include <linux/skbuff.h>
10
11 #ifndef CONFIG_COMPAT_SLES_11_3
12 extern int simple_open(struct inode *inode, struct file *file);
13 #endif
14
15 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28))
16 #define skb_add_rx_frag(skb, i, page, off, size, truesize) \
17         v2_6_28_skb_add_rx_frag(skb, i, page, off, size)
18 #else
19 #define skb_add_rx_frag(skb, i, page, off, size, truesize) \
20         skb_add_rx_frag(skb, i, page, off, size)
21 #endif
22
23 #ifdef CONFIG_X86_X32_ABI
24 #define COMPAT_USE_64BIT_TIME \
25         (!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT))
26 #else
27 #define COMPAT_USE_64BIT_TIME 0
28 #endif
29
30 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12))
31 static inline void eth_hw_addr_random(struct net_device *dev)
32 {
33 #error eth_hw_addr_random() needs to be implemented for < 2.6.12
34 }
35 #else  /* kernels >= 2.6.12 */
36
37 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31))
38 static inline void eth_hw_addr_random(struct net_device *dev)
39 {
40         get_random_bytes(dev->dev_addr, ETH_ALEN);
41         dev->dev_addr[0] &= 0xfe;       /* clear multicast bit */
42         dev->dev_addr[0] |= 0x02;       /* set local assignment bit (IEEE802) */
43 }
44 #else /* kernels >= 2.6.31 */
45
46 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36))
47 /* So this is 2.6.31..2.6.35 */
48
49 /* Just have the flags present, they won't really mean anything though */
50 #define NET_ADDR_PERM          0       /* address is permanent (default) */
51 #define NET_ADDR_RANDOM                1       /* address is generated randomly */
52 #define NET_ADDR_STOLEN                2       /* address is stolen from other device */
53
54 #ifndef CONFIG_COMPAT_RHEL_6_4
55 static inline void eth_hw_addr_random(struct net_device *dev)
56 {
57         random_ether_addr(dev->dev_addr);
58 }
59 #endif /* CONFIG_COMPAT_RHEL_6_4 */
60
61 #else /* 2.6.36 and on */
62 #ifndef CONFIG_COMPAT_SLES_11_3
63 static inline void eth_hw_addr_random(struct net_device *dev)
64 {
65         dev_hw_addr_random(dev, dev->dev_addr);
66 }
67 #endif /* CONFIG_COMPAT_SLES_11_3 */
68 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) */
69
70 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)) */
71 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,12)) */
72
73 /* source include/linux/pci.h */
74 /**
75  * module_pci_driver() - Helper macro for registering a PCI driver
76  * @__pci_driver: pci_driver struct
77  *
78  * Helper macro for PCI drivers which do not do anything special in module
79  * init/exit. This eliminates a lot of boilerplate. Each module may only
80  * use this macro once, and calling it replaces module_init() and module_exit()
81  */
82 #define module_pci_driver(__pci_driver) \
83         module_driver(__pci_driver, pci_register_driver, \
84                        pci_unregister_driver)
85
86 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) */
87
88 #endif /* LINUX_5_4_COMPAT_H */