blob: 96a600fc1b60c26fa55dfefd2f3376cfe6e4cfc5 [file] [log] [blame]
#ifndef _COMPAT_LINUX_PM_QOS_H
#define _COMPAT_LINUX_PM_QOS_H 1
#include <linux/version.h>
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
/*
* Kernels >= 2.6.25 have pm-qos and its initialized as part of
* the bootup process
*/
static inline int backport_pm_qos_power_init(void)
{
return 0;
}
static inline int backport_pm_qos_power_deinit(void)
{
return 0;
}
#else
/*
* Backport work for QoS dependencies (kernel/pm_qos_params.c)
* pm-qos stuff written by mark gross mgross@linux.intel.com.
*
* ipw2100 now makes use of:
*
* pm_qos_add_requirement(),
* pm_qos_update_requirement() and
* pm_qos_remove_requirement() from it
*
* mac80211 uses the network latency to determine if to enable or not
* dynamic PS. mac80211 also and registers a notifier for when
* the latency changes. Since older kernels do no thave pm-qos stuff
* we just implement it completley here and register it upon cfg80211
* init. I haven't tested ipw2100 on 2.6.24 though.
*
* This pm-qos implementation is copied verbatim from the kernel
* written by mark gross mgross@linux.intel.com. You don't have
* to do anythinig to use pm-qos except use the same exported
* routines as used in newer kernels. The backport_pm_qos_power_init()
* defned below is used by the compat module to initialize pm-qos.
*/
int backport_pm_qos_power_init(void);
int backport_pm_qos_power_deinit(void);
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
#include_next <linux/pm_qos.h>
#else
#include <linux/pm_qos_params.h>
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) */
#ifndef PM_QOS_DEFAULT_VALUE
#define PM_QOS_DEFAULT_VALUE -1
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,36)
struct pm_qos_request_list {
u32 qos;
void *request;
};
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
#define pm_qos_add_request(_req, _class, _value) do { \
(_req)->request = #_req; \
(_req)->qos = _class; \
pm_qos_add_requirement((_class), (_req)->request, (_value)); \
} while(0)
#define pm_qos_update_request(_req, _value) \
pm_qos_update_requirement((_req)->qos, (_req)->request, (_value))
#define pm_qos_remove_request(_req) \
pm_qos_remove_requirement((_req)->qos, (_req)->request)
#else
#define pm_qos_add_request(_req, _class, _value) do { \
(_req)->request = pm_qos_add_request((_class), (_value)); \
} while (0)
#define pm_qos_update_request(_req, _value) \
pm_qos_update_request((_req)->request, (_value))
#define pm_qos_remove_request(_req) \
pm_qos_remove_request((_req)->request)
#endif /* < 2.6.35 */
#endif /* < 2.6.36 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
#define pm_qos_request(_qos) pm_qos_requirement(_qos)
#endif
#endif /* _COMPAT_LINUX_PM_QOS_H */