| /* |
| * (C) Copyright 2012 Quantenna Communications Inc. |
| * |
| * See file CREDITS for list of people who contributed to this |
| * project. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License as |
| * published by the Free Software Foundation; either version 2 of |
| * the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| */ |
| |
| #ifndef __RUBY_PM_H |
| #define __RUBY_PM_H |
| |
| /* Power save levels */ |
| #define BOARD_PM_LEVEL_FORCE_NO (0) |
| #define BOARD_PM_LEVEL_NO (1) |
| #define BOARD_PM_LEVEL_SLOW_DOWN (2) |
| #define BOARD_PM_LEVEL_LATENCY_UP (3) |
| #define BOARD_PM_LEVEL_DISTANCE_DOWN (4) |
| #define BOARD_PM_LEVEL_IDLE (5) |
| #define BOARD_PM_LEVEL_SUSPEND (6) |
| |
| #define BOARD_PM_LEVEL_INIT BOARD_PM_LEVEL_FORCE_NO |
| |
| /* Duty level, shared between Lhost and MuC */ |
| #define BOARD_PM_LEVEL_DUTY BOARD_PM_LEVEL_IDLE |
| |
| /* Names of power save governors */ |
| #define BOARD_PM_GOVERNOR_WLAN "wlan" |
| #define BOARD_PM_GOVERNOR_QDISC "qdisc" |
| #define BOARD_PM_GOVERNOR_QCSAPI "qcsapi" |
| |
| /* wlan timings to switch between modes */ |
| #define BOARD_PM_WLAN_IDLE_TIMEOUT (120 * HZ) |
| #define BOARD_PM_WLAN_STA_IDLE_TIMEOUT (15 * HZ) |
| #define BOARD_PM_WLAN_DEFAULT_TIMEOUT (0) |
| |
| /* qdisc parameters to switch between modes */ |
| #define BOARD_PM_QDISC_TIMER_TIMEOUT (50/*ms*/ * HZ / 1000) |
| #define BOARD_PM_QDISC_SPEEDUP_THRESHOLD (400) |
| #define BOARD_PM_QDISC_SLOWDOWN_THRESHOLD (100) |
| #define BOARD_PM_QDISC_SLOWDOWN_COUNT (80) |
| #define BOARD_PM_QDISC_SLOWDOWN_TIMEOUT (3 * HZ) |
| #define BOARD_PM_QDISC_DEFAULT_TIMEOUT (0) |
| |
| /* Beacon TSF setting */ |
| #define BOARD_PM_WAKE_BEACON_TSF_DEADLINE_PCT (50) |
| #define BOARD_PM_WAKE_BEACON_TSF_ALERT_PCT (25) |
| |
| /* Default setting, shared between Lhost and MuC */ |
| #define BOARD_PM_PDUTY_PERIOD_MS_DEFAULT 80 |
| #define BOARD_PM_PDUTY_PCT_LOW_DEFAULT 80 |
| #define BOARD_PM_SUSPEND_PERIOD_MS_DEFAULT 100 |
| #define BOARD_PM_SUSPEND_PCT_LOW_DEFAULT 99 |
| |
| /* Multiple Periods Support */ |
| #define BOARD_PM_PERIOD_CHANGE_INTERVAL 1 |
| #define BOARD_PM_PERIOD_CNT 3 |
| |
| enum qtn_pm_param { |
| QTN_PM_CURRENT_LEVEL, |
| |
| QTN_PM_SUSPEND, |
| QTN_PM_SUSPEND_PERIOD_MS, |
| QTN_PM_SUSPEND_PCT_LOW, |
| QTN_PM_SUSPEND_HRESET, |
| QTN_PM_SUSPEND_ALLCHAINS_DISABLE, |
| |
| QTN_PM_PDUTY, |
| QTN_PM_PDUTY_PERIOD_MS, |
| QTN_PM_PDUTY_PCT_LOW, |
| QTN_PM_PDUTY_HRESET, |
| QTN_PM_PDUTY_RXCHAINS_DISABLE, |
| |
| QTN_PM_MUC_SLEEP, |
| |
| QTN_PM_RXCHAIN_IDLE_COUNT, |
| QTN_PM_RXCHAIN_IDLE_LEVEL, |
| QTN_PM_TXCHAIN_IDLE_COUNT, |
| QTN_PM_TXCHAIN_IDLE_LEVEL, |
| |
| QTN_PM_PAUSE_MGMT_PROBERESP, |
| QTN_PM_PAUSE_MGMT_ASSOCRESP, |
| QTN_PM_PAUSE_MGMT_AUTH, |
| QTN_PM_PAUSE_DATA = QTN_PM_PAUSE_MGMT_AUTH, |
| |
| /* For Multiple Periods Support */ |
| QTN_PM_PERIOD_CHANGE_INTERVAL, /* How long period setting will be changed(unit: second) */ |
| QTN_PM_PERIOD_CNT, /* How many periods in period group(Max 3) */ |
| QTN_PM_PERIOD_GROUP, /* Period group(Max 3 periods, each <= 255ms, unit: millisecond)*/ |
| |
| QTN_PM_IOCTL_MAX |
| }; |
| |
| #define QTN_PM_PARAM_NAMES { \ |
| "level", /* QTN_PM_CURRENT_LEVEL */ \ |
| "suspend_level", /* QTN_PM_SUSPEND */ \ |
| "suspend_period", /* QTN_PM_SUSPEND_PERIOD_MS */ \ |
| "suspend_pct", /* QTN_PM_SUSPEND_PCT_LOW */ \ |
| "suspend_hreset", /* QTN_PM_SUSPEND_HRESET */ \ |
| "suspend_allchains", /* QTN_PM_SUSPEND_ALLCHAINS_DISABLE */ \ |
| "pduty_level", /* QTN_PM_PDUTY */ \ |
| "pduty_period", /* QTN_PM_PDUTY_PERIOD_MS */ \ |
| "pduty_pct", /* QTN_PM_PDUTY_PCT_LOW */ \ |
| "pduty_hreset", /* QTN_PM_PDUTY_HRESET */ \ |
| "pduty_rxchains", /* QTN_PM_PDUTY_RXCHAINS_DISABLE */ \ |
| "muc_sleep_level", /* QTN_PM_MUC_SLEEP */ \ |
| "rxchain_count", /* QTN_PM_RXCHAIN_IDLE_COUNT */ \ |
| "rxchain_level", /* QTN_PM_RXCHAIN_IDLE_LEVEL */ \ |
| "txchain_count", /* QTN_PM_TXCHAIN_IDLE_COUNT */ \ |
| "txchain_level", /* QTN_PM_TXCHAIN_IDLE_LEVEL */ \ |
| "pause_proberesp", /* QTN_PM_PAUSE_MGMT_PROBERESP */ \ |
| "pause_assocresp", /* QTN_PM_PAUSE_MGMT_ASSOCRESP */ \ |
| "pause_auth", /* QTN_PM_PAUSE_MGMT_ASSOCRESP */ \ |
| "period_change_interval", /* QTN_PM_PERIOD_CHANGE_INTERVAL */ \ |
| "period_cnt", /* QTN_PM_PERIOD_CNT */ \ |
| "period_group" /* QTN_PM_PERIOD_GROUP */ \ |
| } |
| |
| #define QTN_PM_PARAM_DEFAULTS { \ |
| BOARD_PM_LEVEL_INIT, /* QTN_PM_CURRENT_LEVEL */ \ |
| BOARD_PM_LEVEL_SUSPEND, /* QTN_PM_SUSPEND */ \ |
| BOARD_PM_SUSPEND_PERIOD_MS_DEFAULT, /* QTN_PM_SUSPEND_PERIOD_MS */ \ |
| BOARD_PM_SUSPEND_PCT_LOW_DEFAULT, /* QTN_PM_SUSPEND_PCT_LOW */ \ |
| 1, /* QTN_PM_SUSPEND_HRESET */ \ |
| 1, /* QTN_PM_SUSPEND_ALL_CHAINS_DISABLE */ \ |
| BOARD_PM_LEVEL_DUTY, /* QTN_PM_PDUTY */ \ |
| BOARD_PM_PDUTY_PERIOD_MS_DEFAULT, /* QTN_PM_PDUTY_PERIOD_MS */ \ |
| BOARD_PM_PDUTY_PCT_LOW_DEFAULT, /* QTN_PM_PDUTY_PCT_LOW */ \ |
| 0, /* QTN_PM_PDUTY_HRESET */ \ |
| 1, /* QTN_PM_PDUTY_RXCHAINS_DISABLE */ \ |
| BOARD_PM_LEVEL_LATENCY_UP, /* QTN_PM_MUC_SLEEP */ \ |
| 4, /* QTN_PM_RXCHAIN_IDLE_COUNT */ \ |
| BOARD_PM_LEVEL_DISTANCE_DOWN, /* QTN_PM_RXCHAIN_IDLE_LEVEL */ \ |
| 4, /* QTN_PM_TXCHAIN_IDLE_COUNT */ \ |
| BOARD_PM_LEVEL_DISTANCE_DOWN, /* QTN_PM_TXCHAIN_IDLE_LEVEL */ \ |
| 60000, /* QTN_PM_PAUSE_MGMT_PROBERESP */ \ |
| 5000, /* QTN_PM_PAUSE_MGMT_ASSOCRESP */ \ |
| 5000, /* QTN_PM_PAUSE_MGMT_AUTH */ \ |
| BOARD_PM_PERIOD_CHANGE_INTERVAL, /* QTN_PM_PERIOD_CHANGE_INTERVAL */ \ |
| BOARD_PM_PERIOD_CNT, /* QTN_PM_PERIOD_CNT */ \ |
| 0x50321E /* QTN_PM_PERIOD_GROUP(30ms, 50ms, 80ms) */ \ |
| } |
| |
| #define QTN_PM_UNPACK_PARAM(x) ((x) & 0xFF) |
| #define QTN_PM_UNPACK_VALUE(x) ((x) >> 8) |
| #define QTN_PM_PACK_PARAM_VALUE(p, v) (((p) & 0xFF) | (((v) << 8) & 0xFFFFFF00)) |
| |
| #endif /* __RUBY_PM_H */ |
| |