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