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