1 /* 2 * This file is part of wl18xx 3 * 4 * Copyright (C) 2011 Texas Instruments Inc. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * version 2 as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 18 * 02110-1301 USA 19 * 20 */ 21 22 #ifndef __WL18XX_PRIV_H__ 23 #define __WL18XX_PRIV_H__ 24 25 #include "conf.h" 26 27 /* minimum FW required for driver */ 28 #define WL18XX_CHIP_VER 8 29 #define WL18XX_IFTYPE_VER 9 30 #define WL18XX_MAJOR_VER WLCORE_FW_VER_IGNORE 31 #define WL18XX_SUBTYPE_VER WLCORE_FW_VER_IGNORE 32 #define WL18XX_MINOR_VER 58 33 34 #define WL18XX_CMD_MAX_SIZE 740 35 36 #define WL18XX_AGGR_BUFFER_SIZE (13 * PAGE_SIZE) 37 38 #define WL18XX_NUM_TX_DESCRIPTORS 32 39 #define WL18XX_NUM_RX_DESCRIPTORS 32 40 41 #define WL18XX_NUM_MAC_ADDRESSES 2 42 43 #define WL18XX_RX_BA_MAX_SESSIONS 13 44 45 #define WL18XX_MAX_AP_STATIONS 10 46 #define WL18XX_MAX_LINKS 16 47 48 struct wl18xx_priv { 49 /* buffer for sending commands to FW */ 50 u8 cmd_buf[WL18XX_CMD_MAX_SIZE]; 51 52 struct wl18xx_priv_conf conf; 53 54 /* Index of last released Tx desc in FW */ 55 u8 last_fw_rls_idx; 56 57 /* number of keys requiring extra spare mem-blocks */ 58 int extra_spare_key_count; 59 }; 60 61 #define WL18XX_FW_MAX_TX_STATUS_DESC 33 62 63 struct wl18xx_fw_status_priv { 64 /* 65 * Index in released_tx_desc for first byte that holds 66 * released tx host desc 67 */ 68 u8 fw_release_idx; 69 70 /* 71 * Array of host Tx descriptors, where fw_release_idx 72 * indicated the first released idx. 73 */ 74 u8 released_tx_desc[WL18XX_FW_MAX_TX_STATUS_DESC]; 75 76 /* A bitmap representing the currently suspended links. The suspend 77 * is short lived, for multi-channel Tx requirements. 78 */ 79 __le32 link_suspend_bitmap; 80 81 /* packet threshold for an "almost empty" AC, 82 * for Tx schedulng purposes 83 */ 84 u8 tx_ac_threshold; 85 86 /* number of packets to queue up for a link in PS */ 87 u8 tx_ps_threshold; 88 89 /* number of packet to queue up for a suspended link */ 90 u8 tx_suspend_threshold; 91 92 /* Should have less than this number of packets in queue of a slow 93 * link to qualify as high priority link 94 */ 95 u8 tx_slow_link_prio_threshold; 96 97 /* Should have less than this number of packets in queue of a fast 98 * link to qualify as high priority link 99 */ 100 u8 tx_fast_link_prio_threshold; 101 102 /* Should have less than this number of packets in queue of a slow 103 * link before we stop queuing up packets for it. 104 */ 105 u8 tx_slow_stop_threshold; 106 107 /* Should have less than this number of packets in queue of a fast 108 * link before we stop queuing up packets for it. 109 */ 110 u8 tx_fast_stop_threshold; 111 112 u8 padding[3]; 113 }; 114 115 struct wl18xx_fw_packet_counters { 116 /* Cumulative counter of released packets per AC */ 117 u8 tx_released_pkts[NUM_TX_QUEUES]; 118 119 /* Cumulative counter of freed packets per HLID */ 120 u8 tx_lnk_free_pkts[WL18XX_MAX_LINKS]; 121 122 /* Cumulative counter of released Voice memory blocks */ 123 u8 tx_voice_released_blks; 124 125 /* Tx rate of the last transmitted packet */ 126 u8 tx_last_rate; 127 128 /* Tx rate or Tx rate estimate pre-calculated by fw in mbps units */ 129 u8 tx_last_rate_mbps; 130 131 /* hlid for which the rates were reported */ 132 u8 hlid; 133 } __packed; 134 135 /* FW status registers */ 136 struct wl18xx_fw_status { 137 __le32 intr; 138 u8 fw_rx_counter; 139 u8 drv_rx_counter; 140 u8 reserved; 141 u8 tx_results_counter; 142 __le32 rx_pkt_descs[WL18XX_NUM_RX_DESCRIPTORS]; 143 144 __le32 fw_localtime; 145 146 /* 147 * A bitmap (where each bit represents a single HLID) 148 * to indicate if the station is in PS mode. 149 */ 150 __le32 link_ps_bitmap; 151 152 /* 153 * A bitmap (where each bit represents a single HLID) to indicate 154 * if the station is in Fast mode 155 */ 156 __le32 link_fast_bitmap; 157 158 /* Cumulative counter of total released mem blocks since FW-reset */ 159 __le32 total_released_blks; 160 161 /* Size (in Memory Blocks) of TX pool */ 162 __le32 tx_total; 163 164 struct wl18xx_fw_packet_counters counters; 165 166 __le32 log_start_addr; 167 168 /* Private status to be used by the lower drivers */ 169 struct wl18xx_fw_status_priv priv; 170 } __packed; 171 172 #define WL18XX_PHY_VERSION_MAX_LEN 20 173 174 struct wl18xx_static_data_priv { 175 char phy_version[WL18XX_PHY_VERSION_MAX_LEN]; 176 }; 177 178 struct wl18xx_clk_cfg { 179 u32 n; 180 u32 m; 181 u32 p; 182 u32 q; 183 bool swallow; 184 }; 185 186 enum { 187 CLOCK_CONFIG_16_2_M = 1, 188 CLOCK_CONFIG_16_368_M, 189 CLOCK_CONFIG_16_8_M, 190 CLOCK_CONFIG_19_2_M, 191 CLOCK_CONFIG_26_M, 192 CLOCK_CONFIG_32_736_M, 193 CLOCK_CONFIG_33_6_M, 194 CLOCK_CONFIG_38_468_M, 195 CLOCK_CONFIG_52_M, 196 197 NUM_CLOCK_CONFIGS, 198 }; 199 200 #endif /* __WL18XX_PRIV_H__ */ 201