1a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy/*
2a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy * Mac80211 power management interface for ST-Ericsson CW1200 mac80211 drivers
3a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy *
4a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy * Copyright (c) 2011, ST-Ericsson
5a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy * Author: Dmitry Tarnyagin <dmitry.tarnyagin@lockless.no>
6a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy *
7a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy * This program is free software; you can redistribute it and/or modify
8a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy * it under the terms of the GNU General Public License version 2 as
9a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy * published by the Free Software Foundation.
10a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy */
11a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy
12a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy#ifndef PM_H_INCLUDED
13a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy#define PM_H_INCLUDED
14a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy
15a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy/* ******************************************************************** */
16a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy/* mac80211 API								*/
17a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy
18a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy/* extern */  struct cw1200_common;
19a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy/* private */ struct cw1200_suspend_state;
20a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy
21a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachystruct cw1200_pm_state {
22a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy	struct cw1200_suspend_state *suspend_state;
23a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy	struct timer_list stay_awake;
24a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy	struct platform_device *pm_dev;
25a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy	spinlock_t lock; /* Protect access */
26a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy};
27a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy
284e17b87e792ed19e75a96eea618b90510265120cSolomon Peachy#ifdef CONFIG_PM
29a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachyint cw1200_pm_init(struct cw1200_pm_state *pm,
30a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy		    struct cw1200_common *priv);
31a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachyvoid cw1200_pm_deinit(struct cw1200_pm_state *pm);
32a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachyint cw1200_wow_suspend(struct ieee80211_hw *hw,
33a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy		       struct cfg80211_wowlan *wowlan);
34a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachyint cw1200_wow_resume(struct ieee80211_hw *hw);
35a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachyint cw1200_can_suspend(struct cw1200_common *priv);
364e17b87e792ed19e75a96eea618b90510265120cSolomon Peachyvoid cw1200_pm_stay_awake(struct cw1200_pm_state *pm,
374e17b87e792ed19e75a96eea618b90510265120cSolomon Peachy			  unsigned long tmo);
384e17b87e792ed19e75a96eea618b90510265120cSolomon Peachy#else
394e17b87e792ed19e75a96eea618b90510265120cSolomon Peachystatic inline void cw1200_pm_stay_awake(struct cw1200_pm_state *pm,
404e17b87e792ed19e75a96eea618b90510265120cSolomon Peachy					unsigned long tmo) {
414e17b87e792ed19e75a96eea618b90510265120cSolomon Peachy}
424e17b87e792ed19e75a96eea618b90510265120cSolomon Peachy#endif
43a910e4a94f6923c8c988565525f017f687bf7205Solomon Peachy#endif
44