1*8e99ea8dSJohannes Berg /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2*8e99ea8dSJohannes Berg /* 3*8e99ea8dSJohannes Berg * Copyright (C) 2012-2014 Intel Corporation 4*8e99ea8dSJohannes Berg * Copyright (C) 2013-2015 Intel Mobile Communications GmbH 5*8e99ea8dSJohannes Berg * Copyright (C) 2016-2017 Intel Deutschland GmbH 6*8e99ea8dSJohannes Berg */ 7d172a5efSJohannes Berg #ifndef __iwl_fw_api_sf_h__ 8d172a5efSJohannes Berg #define __iwl_fw_api_sf_h__ 9d172a5efSJohannes Berg 10d172a5efSJohannes Berg /* Smart Fifo state */ 11d172a5efSJohannes Berg enum iwl_sf_state { 12d172a5efSJohannes Berg SF_LONG_DELAY_ON = 0, /* should never be called by driver */ 13d172a5efSJohannes Berg SF_FULL_ON, 14d172a5efSJohannes Berg SF_UNINIT, 15d172a5efSJohannes Berg SF_INIT_OFF, 16d172a5efSJohannes Berg SF_HW_NUM_STATES 17d172a5efSJohannes Berg }; 18d172a5efSJohannes Berg 19d172a5efSJohannes Berg /* Smart Fifo possible scenario */ 20d172a5efSJohannes Berg enum iwl_sf_scenario { 21d172a5efSJohannes Berg SF_SCENARIO_SINGLE_UNICAST, 22d172a5efSJohannes Berg SF_SCENARIO_AGG_UNICAST, 23d172a5efSJohannes Berg SF_SCENARIO_MULTICAST, 24d172a5efSJohannes Berg SF_SCENARIO_BA_RESP, 25d172a5efSJohannes Berg SF_SCENARIO_TX_RESP, 26d172a5efSJohannes Berg SF_NUM_SCENARIO 27d172a5efSJohannes Berg }; 28d172a5efSJohannes Berg 29d172a5efSJohannes Berg #define SF_TRANSIENT_STATES_NUMBER 2 /* SF_LONG_DELAY_ON and SF_FULL_ON */ 30d172a5efSJohannes Berg #define SF_NUM_TIMEOUT_TYPES 2 /* Aging timer and Idle timer */ 31d172a5efSJohannes Berg 32d172a5efSJohannes Berg /* smart FIFO default values */ 33d172a5efSJohannes Berg #define SF_W_MARK_SISO 6144 34d172a5efSJohannes Berg #define SF_W_MARK_MIMO2 8192 35d172a5efSJohannes Berg #define SF_W_MARK_MIMO3 6144 36d172a5efSJohannes Berg #define SF_W_MARK_LEGACY 4096 37d172a5efSJohannes Berg #define SF_W_MARK_SCAN 4096 38d172a5efSJohannes Berg 39d172a5efSJohannes Berg /* SF Scenarios timers for default configuration (aligned to 32 uSec) */ 40d172a5efSJohannes Berg #define SF_SINGLE_UNICAST_IDLE_TIMER_DEF 160 /* 150 uSec */ 41d172a5efSJohannes Berg #define SF_SINGLE_UNICAST_AGING_TIMER_DEF 400 /* 0.4 mSec */ 42d172a5efSJohannes Berg #define SF_AGG_UNICAST_IDLE_TIMER_DEF 160 /* 150 uSec */ 43d172a5efSJohannes Berg #define SF_AGG_UNICAST_AGING_TIMER_DEF 400 /* 0.4 mSec */ 44d172a5efSJohannes Berg #define SF_MCAST_IDLE_TIMER_DEF 160 /* 150 mSec */ 45d172a5efSJohannes Berg #define SF_MCAST_AGING_TIMER_DEF 400 /* 0.4 mSec */ 46d172a5efSJohannes Berg #define SF_BA_IDLE_TIMER_DEF 160 /* 150 uSec */ 47d172a5efSJohannes Berg #define SF_BA_AGING_TIMER_DEF 400 /* 0.4 mSec */ 48d172a5efSJohannes Berg #define SF_TX_RE_IDLE_TIMER_DEF 160 /* 150 uSec */ 49d172a5efSJohannes Berg #define SF_TX_RE_AGING_TIMER_DEF 400 /* 0.4 mSec */ 50d172a5efSJohannes Berg 51d172a5efSJohannes Berg /* SF Scenarios timers for BSS MAC configuration (aligned to 32 uSec) */ 52d172a5efSJohannes Berg #define SF_SINGLE_UNICAST_IDLE_TIMER 320 /* 300 uSec */ 53d172a5efSJohannes Berg #define SF_SINGLE_UNICAST_AGING_TIMER 2016 /* 2 mSec */ 54d172a5efSJohannes Berg #define SF_AGG_UNICAST_IDLE_TIMER 320 /* 300 uSec */ 55d172a5efSJohannes Berg #define SF_AGG_UNICAST_AGING_TIMER 2016 /* 2 mSec */ 56d172a5efSJohannes Berg #define SF_MCAST_IDLE_TIMER 2016 /* 2 mSec */ 57d172a5efSJohannes Berg #define SF_MCAST_AGING_TIMER 10016 /* 10 mSec */ 58d172a5efSJohannes Berg #define SF_BA_IDLE_TIMER 320 /* 300 uSec */ 59d172a5efSJohannes Berg #define SF_BA_AGING_TIMER 2016 /* 2 mSec */ 60d172a5efSJohannes Berg #define SF_TX_RE_IDLE_TIMER 320 /* 300 uSec */ 61d172a5efSJohannes Berg #define SF_TX_RE_AGING_TIMER 2016 /* 2 mSec */ 62d172a5efSJohannes Berg 63d172a5efSJohannes Berg #define SF_LONG_DELAY_AGING_TIMER 1000000 /* 1 Sec */ 64d172a5efSJohannes Berg 65d172a5efSJohannes Berg #define SF_CFG_DUMMY_NOTIF_OFF BIT(16) 66d172a5efSJohannes Berg 67d172a5efSJohannes Berg /** 68d172a5efSJohannes Berg * struct iwl_sf_cfg_cmd - Smart Fifo configuration command. 69d172a5efSJohannes Berg * @state: smart fifo state, types listed in &enum iwl_sf_state. 70d172a5efSJohannes Berg * @watermark: Minimum allowed available free space in RXF for transient state. 71d172a5efSJohannes Berg * @long_delay_timeouts: aging and idle timer values for each scenario 72d172a5efSJohannes Berg * in long delay state. 73d172a5efSJohannes Berg * @full_on_timeouts: timer values for each scenario in full on state. 74d172a5efSJohannes Berg */ 75d172a5efSJohannes Berg struct iwl_sf_cfg_cmd { 76d172a5efSJohannes Berg __le32 state; 77d172a5efSJohannes Berg __le32 watermark[SF_TRANSIENT_STATES_NUMBER]; 78d172a5efSJohannes Berg __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; 79d172a5efSJohannes Berg __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; 80d172a5efSJohannes Berg } __packed; /* SF_CFG_API_S_VER_2 */ 81d172a5efSJohannes Berg 82d172a5efSJohannes Berg #endif /* __iwl_fw_api_sf_h__ */ 83