1 /****************************************************************************** 2 * 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * GPL LICENSE SUMMARY 7 * 8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 9 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 10 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of version 2 of the GNU General Public License as 14 * published by the Free Software Foundation. 15 * 16 * This program is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * General Public License for more details. 20 * 21 * The full GNU General Public License is included in this distribution 22 * in the file called COPYING. 23 * 24 * Contact Information: 25 * Intel Linux Wireless <linuxwifi@intel.com> 26 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 27 * 28 * BSD LICENSE 29 * 30 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. 31 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH 32 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH 33 * All rights reserved. 34 * 35 * Redistribution and use in source and binary forms, with or without 36 * modification, are permitted provided that the following conditions 37 * are met: 38 * 39 * * Redistributions of source code must retain the above copyright 40 * notice, this list of conditions and the following disclaimer. 41 * * Redistributions in binary form must reproduce the above copyright 42 * notice, this list of conditions and the following disclaimer in 43 * the documentation and/or other materials provided with the 44 * distribution. 45 * * Neither the name Intel Corporation nor the names of its 46 * contributors may be used to endorse or promote products derived 47 * from this software without specific prior written permission. 48 * 49 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 50 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 51 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 52 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 53 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 54 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 55 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 57 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 58 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 59 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 60 * 61 *****************************************************************************/ 62 63 #ifndef __iwl_fw_api_sf_h__ 64 #define __iwl_fw_api_sf_h__ 65 66 /* Smart Fifo state */ 67 enum iwl_sf_state { 68 SF_LONG_DELAY_ON = 0, /* should never be called by driver */ 69 SF_FULL_ON, 70 SF_UNINIT, 71 SF_INIT_OFF, 72 SF_HW_NUM_STATES 73 }; 74 75 /* Smart Fifo possible scenario */ 76 enum iwl_sf_scenario { 77 SF_SCENARIO_SINGLE_UNICAST, 78 SF_SCENARIO_AGG_UNICAST, 79 SF_SCENARIO_MULTICAST, 80 SF_SCENARIO_BA_RESP, 81 SF_SCENARIO_TX_RESP, 82 SF_NUM_SCENARIO 83 }; 84 85 #define SF_TRANSIENT_STATES_NUMBER 2 /* SF_LONG_DELAY_ON and SF_FULL_ON */ 86 #define SF_NUM_TIMEOUT_TYPES 2 /* Aging timer and Idle timer */ 87 88 /* smart FIFO default values */ 89 #define SF_W_MARK_SISO 6144 90 #define SF_W_MARK_MIMO2 8192 91 #define SF_W_MARK_MIMO3 6144 92 #define SF_W_MARK_LEGACY 4096 93 #define SF_W_MARK_SCAN 4096 94 95 /* SF Scenarios timers for default configuration (aligned to 32 uSec) */ 96 #define SF_SINGLE_UNICAST_IDLE_TIMER_DEF 160 /* 150 uSec */ 97 #define SF_SINGLE_UNICAST_AGING_TIMER_DEF 400 /* 0.4 mSec */ 98 #define SF_AGG_UNICAST_IDLE_TIMER_DEF 160 /* 150 uSec */ 99 #define SF_AGG_UNICAST_AGING_TIMER_DEF 400 /* 0.4 mSec */ 100 #define SF_MCAST_IDLE_TIMER_DEF 160 /* 150 mSec */ 101 #define SF_MCAST_AGING_TIMER_DEF 400 /* 0.4 mSec */ 102 #define SF_BA_IDLE_TIMER_DEF 160 /* 150 uSec */ 103 #define SF_BA_AGING_TIMER_DEF 400 /* 0.4 mSec */ 104 #define SF_TX_RE_IDLE_TIMER_DEF 160 /* 150 uSec */ 105 #define SF_TX_RE_AGING_TIMER_DEF 400 /* 0.4 mSec */ 106 107 /* SF Scenarios timers for BSS MAC configuration (aligned to 32 uSec) */ 108 #define SF_SINGLE_UNICAST_IDLE_TIMER 320 /* 300 uSec */ 109 #define SF_SINGLE_UNICAST_AGING_TIMER 2016 /* 2 mSec */ 110 #define SF_AGG_UNICAST_IDLE_TIMER 320 /* 300 uSec */ 111 #define SF_AGG_UNICAST_AGING_TIMER 2016 /* 2 mSec */ 112 #define SF_MCAST_IDLE_TIMER 2016 /* 2 mSec */ 113 #define SF_MCAST_AGING_TIMER 10016 /* 10 mSec */ 114 #define SF_BA_IDLE_TIMER 320 /* 300 uSec */ 115 #define SF_BA_AGING_TIMER 2016 /* 2 mSec */ 116 #define SF_TX_RE_IDLE_TIMER 320 /* 300 uSec */ 117 #define SF_TX_RE_AGING_TIMER 2016 /* 2 mSec */ 118 119 #define SF_LONG_DELAY_AGING_TIMER 1000000 /* 1 Sec */ 120 121 #define SF_CFG_DUMMY_NOTIF_OFF BIT(16) 122 123 /** 124 * struct iwl_sf_cfg_cmd - Smart Fifo configuration command. 125 * @state: smart fifo state, types listed in &enum iwl_sf_state. 126 * @watermark: Minimum allowed available free space in RXF for transient state. 127 * @long_delay_timeouts: aging and idle timer values for each scenario 128 * in long delay state. 129 * @full_on_timeouts: timer values for each scenario in full on state. 130 */ 131 struct iwl_sf_cfg_cmd { 132 __le32 state; 133 __le32 watermark[SF_TRANSIENT_STATES_NUMBER]; 134 __le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; 135 __le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES]; 136 } __packed; /* SF_CFG_API_S_VER_2 */ 137 138 #endif /* __iwl_fw_api_sf_h__ */ 139