compat: backport run-time power management (5e928f77)
[~emulex/for-vlad/old/compat.git] / include / linux / compat-2.6.32.h
1 #ifndef LINUX_26_32_COMPAT_H
2 #define LINUX_26_32_COMPAT_H
3
4 #include <linux/version.h>
5
6 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32))
7
8 #include <linux/netdevice.h>
9 #include <linux/compat.h>
10 #include <net/iw_handler.h>
11 #include <linux/workqueue.h>
12 #include <net/genetlink.h>
13
14 #define SDIO_VENDOR_ID_INTEL                    0x0089
15 #define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX      0x1402
16 #define SDIO_DEVICE_ID_INTEL_IWMC3200WIFI       0x1403
17 #define SDIO_DEVICE_ID_INTEL_IWMC3200TOP        0x1404
18 #define SDIO_DEVICE_ID_INTEL_IWMC3200GPS        0x1405
19 #define SDIO_DEVICE_ID_INTEL_IWMC3200BT         0x1406
20
21 /*
22  * Backports 5e928f77a09a07f9dd595bb8a489965d69a83458
23  * run-time power management cannot really be backported
24  * given that the implementation added bus specific
25  * callbacks that we won't have on older kernels. If
26  * you really want run-time power management or good
27  * power management upgrade your kernel. We'll just
28  * compile this out as if run-time power management was
29  * disabled just as the kernel disables run-time power management
30  * when CONFIG_PM_RUNTIME is disabled.
31  */
32 static inline void pm_runtime_init(struct device *dev) {}
33 static inline void pm_runtime_remove(struct device *dev) {}
34
35 static inline void flush_delayed_work(struct delayed_work *dwork)
36 {
37         if (del_timer_sync(&dwork->timer)) {
38                 /*
39                  * This is what would happen on 2.6.32 but since we don't have
40                  * access to the singlethread_cpu we can't really backport this,
41                  * so avoid really *flush*ing the work... Oh well. Any better ideas?
42
43                 struct cpu_workqueue_struct *cwq;
44                 cwq = wq_per_cpu(keventd_wq, get_cpu());
45                 __queue_work(cwq, &dwork->work);
46                 put_cpu();
47
48                 */
49         }
50         flush_work(&dwork->work);
51 }
52
53 /*
54  * struct genl_multicast_group was made netns aware through
55  * patch "genetlink: make netns aware" by johannes, we just
56  * force this to always use the default init_net
57  */
58 #define genl_info_net(x) &init_net
59 /* Just use init_net for older kernels */
60 #define get_net_ns_by_pid(x) &init_net
61
62 /* net namespace is lost */
63 #define genlmsg_multicast_netns(a, b, c, d, e)  genlmsg_multicast(b, c, d, e)
64 #define genlmsg_multicast_allns(a, b, c, d)     genlmsg_multicast(a, b, c, d)
65 #define genlmsg_unicast(net, skb, pid)  genlmsg_unicast(skb, pid)
66
67 #define dev_change_net_namespace(a, b, c) (-EOPNOTSUPP)
68
69 #define SET_NETDEV_DEVTYPE(netdev, type)
70
71 #ifdef __KERNEL__
72 /* Driver transmit return codes */
73 enum netdev_tx {
74         BACKPORT_NETDEV_TX_OK = NETDEV_TX_OK,       /* driver took care of packet */
75         BACKPORT_NETDEV_TX_BUSY = NETDEV_TX_BUSY,         /* driver tx path was busy*/
76         BACKPORT_NETDEV_TX_LOCKED = NETDEV_TX_LOCKED,  /* driver tx lock was already taken */
77 };
78 typedef enum netdev_tx netdev_tx_t;
79 #endif /* __KERNEL__ */
80
81 /*
82  * dev_pm_ops is only available on kernels >= 2.6.29, for
83  * older kernels we rely on reverting the work to old
84  * power management style stuff.
85  */
86 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
87 /*
88  * Use this if you want to use the same suspend and resume callbacks for suspend
89  * to RAM and hibernation.
90  */
91 #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
92 struct dev_pm_ops name = { \
93         .suspend = suspend_fn, \
94         .resume = resume_fn, \
95         .freeze = suspend_fn, \
96         .thaw = resume_fn, \
97         .poweroff = suspend_fn, \
98         .restore = resume_fn, \
99 }
100 #else
101 #define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn)
102 #endif /* >= 2.6.29 */
103
104 #define wireless_send_event(a, b, c, d) wireless_send_event(a, b, c, (char * ) d)
105
106 /* The export symbol in changed in compat/patches/15-symbol-export-conflicts.patch */
107 #define ieee80211_rx(hw, skb) mac80211_ieee80211_rx(hw, skb)
108
109 #define dev_to_sdio_func(d)     container_of(d, struct sdio_func, dev)
110
111 #define lockdep_assert_held(l)                  do { } while (0)
112
113 /*
114  * Similar to the struct tm in userspace <time.h>, but it needs to be here so
115  * that the kernel source is self contained.
116  */
117 struct tm {
118         /*
119          * the number of seconds after the minute, normally in the range
120          * 0 to 59, but can be up to 60 to allow for leap seconds
121          */
122         int tm_sec;
123         /* the number of minutes after the hour, in the range 0 to 59*/
124         int tm_min;
125         /* the number of hours past midnight, in the range 0 to 23 */
126         int tm_hour;
127         /* the day of the month, in the range 1 to 31 */
128         int tm_mday;
129         /* the number of months since January, in the range 0 to 11 */
130         int tm_mon;
131         /* the number of years since 1900 */
132         long tm_year;
133         /* the number of days since Sunday, in the range 0 to 6 */
134         int tm_wday;
135         /* the number of days since January 1, in the range 0 to 365 */
136         int tm_yday;
137 };
138
139 void time_to_tm(time_t totalsecs, int offset, struct tm *result);
140
141 #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) */
142
143 #endif /* LINUX_26_32_COMPAT_H */