2024-09-09 08:52:07 +00:00
|
|
|
#ifndef LINUX_26_32_COMPAT_H
|
|
|
|
#define LINUX_26_32_COMPAT_H
|
|
|
|
|
|
|
|
#include <linux/version.h>
|
|
|
|
|
|
|
|
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32))
|
|
|
|
|
|
|
|
#include <linux/netdevice.h>
|
|
|
|
#include <linux/compat.h>
|
|
|
|
#include <net/iw_handler.h>
|
|
|
|
#include <linux/workqueue.h>
|
|
|
|
#include <net/genetlink.h>
|
|
|
|
|
|
|
|
#define SDIO_VENDOR_ID_INTEL 0x0089
|
|
|
|
#define SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX 0x1402
|
|
|
|
#define SDIO_DEVICE_ID_INTEL_IWMC3200WIFI 0x1403
|
|
|
|
#define SDIO_DEVICE_ID_INTEL_IWMC3200TOP 0x1404
|
|
|
|
#define SDIO_DEVICE_ID_INTEL_IWMC3200GPS 0x1405
|
|
|
|
#define SDIO_DEVICE_ID_INTEL_IWMC3200BT 0x1406
|
|
|
|
|
|
|
|
static inline void flush_delayed_work(struct delayed_work *dwork)
|
|
|
|
{
|
|
|
|
if (del_timer_sync(&dwork->timer)) {
|
|
|
|
/*
|
|
|
|
* This is what would happen on 2.6.32 but since we don't have
|
|
|
|
* access to the singlethread_cpu we can't really backport this,
|
|
|
|
* so avoid really *flush*ing the work... Oh well. Any better ideas?
|
|
|
|
|
|
|
|
struct cpu_workqueue_struct *cwq;
|
|
|
|
cwq = wq_per_cpu(keventd_wq, get_cpu());
|
|
|
|
__queue_work(cwq, &dwork->work);
|
|
|
|
put_cpu();
|
|
|
|
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
flush_work(&dwork->work);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct genl_multicast_group was made netns aware through
|
|
|
|
* patch "genetlink: make netns aware" by johannes, we just
|
|
|
|
* force this to always use the default init_net
|
|
|
|
*/
|
|
|
|
#define genl_info_net(x) &init_net
|
|
|
|
/* Just use init_net for older kernels */
|
|
|
|
#define get_net_ns_by_pid(x) &init_net
|
|
|
|
|
|
|
|
/* net namespace is lost */
|
|
|
|
#define genlmsg_multicast_netns(a, b, c, d, e) genlmsg_multicast(b, c, d, e)
|
|
|
|
#define genlmsg_multicast_allns(a, b, c, d) genlmsg_multicast(a, b, c, d)
|
|
|
|
#define genlmsg_unicast(net, skb, pid) genlmsg_unicast(skb, pid)
|
|
|
|
|
|
|
|
#define dev_change_net_namespace(a, b, c) (-EOPNOTSUPP)
|
|
|
|
|
|
|
|
#define SET_NETDEV_DEVTYPE(netdev, type)
|
|
|
|
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
/* Driver transmit return codes */
|
|
|
|
enum netdev_tx {
|
|
|
|
BACKPORT_NETDEV_TX_OK = NETDEV_TX_OK, /* driver took care of packet */
|
|
|
|
BACKPORT_NETDEV_TX_BUSY = NETDEV_TX_BUSY, /* driver tx path was busy*/
|
|
|
|
BACKPORT_NETDEV_TX_LOCKED = NETDEV_TX_LOCKED, /* driver tx lock was already taken */
|
|
|
|
};
|
|
|
|
typedef enum netdev_tx netdev_tx_t;
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* dev_pm_ops is only available on kernels >= 2.6.29, for
|
|
|
|
* older kernels we rely on reverting the work to old
|
2024-09-09 08:57:42 +00:00
|
|
|
* power management style stuff.
|
2024-09-09 08:52:07 +00:00
|
|
|
*/
|
2024-09-09 08:57:42 +00:00
|
|
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
|
2024-09-09 08:52:07 +00:00
|
|
|
/*
|
|
|
|
* Use this if you want to use the same suspend and resume callbacks for suspend
|
|
|
|
* to RAM and hibernation.
|
|
|
|
*/
|
|
|
|
#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn) \
|
|
|
|
struct dev_pm_ops name = { \
|
|
|
|
.suspend = suspend_fn, \
|
|
|
|
.resume = resume_fn, \
|
|
|
|
.freeze = suspend_fn, \
|
|
|
|
.thaw = resume_fn, \
|
|
|
|
.poweroff = suspend_fn, \
|
|
|
|
.restore = resume_fn, \
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
#define SIMPLE_DEV_PM_OPS(name, suspend_fn, resume_fn)
|
|
|
|
#endif /* >= 2.6.29 */
|
|
|
|
|
|
|
|
#define wireless_send_event(a, b, c, d) wireless_send_event(a, b, c, (char * ) d)
|
|
|
|
|
|
|
|
/* The export symbol in changed in compat/patches/15-symbol-export-conflicts.patch */
|
|
|
|
#define ieee80211_rx(hw, skb) mac80211_ieee80211_rx(hw, skb)
|
|
|
|
|
|
|
|
#define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev)
|
|
|
|
|
|
|
|
#define lockdep_assert_held(l) do { } while (0)
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Similar to the struct tm in userspace <time.h>, but it needs to be here so
|
|
|
|
* that the kernel source is self contained.
|
|
|
|
*/
|
|
|
|
struct tm {
|
|
|
|
/*
|
|
|
|
* the number of seconds after the minute, normally in the range
|
|
|
|
* 0 to 59, but can be up to 60 to allow for leap seconds
|
|
|
|
*/
|
|
|
|
int tm_sec;
|
|
|
|
/* the number of minutes after the hour, in the range 0 to 59*/
|
|
|
|
int tm_min;
|
|
|
|
/* the number of hours past midnight, in the range 0 to 23 */
|
|
|
|
int tm_hour;
|
|
|
|
/* the day of the month, in the range 1 to 31 */
|
|
|
|
int tm_mday;
|
|
|
|
/* the number of months since January, in the range 0 to 11 */
|
|
|
|
int tm_mon;
|
|
|
|
/* the number of years since 1900 */
|
|
|
|
long tm_year;
|
|
|
|
/* the number of days since Sunday, in the range 0 to 6 */
|
|
|
|
int tm_wday;
|
|
|
|
/* the number of days since January 1, in the range 0 to 365 */
|
|
|
|
int tm_yday;
|
|
|
|
};
|
|
|
|
|
|
|
|
void time_to_tm(time_t totalsecs, int offset, struct tm *result);
|
|
|
|
|
|
|
|
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) */
|
|
|
|
|
|
|
|
#endif /* LINUX_26_32_COMPAT_H */
|