2012-05-10 12:13:13 +03:00
/*
* This file is part of wl18xx
*
* Copyright ( C ) 2011 Texas Instruments Inc .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation .
*
* 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 . , 51 Franklin St , Fifth Floor , Boston , MA
* 02110 - 1301 USA
*
*/
# ifndef __WL18XX_PRIV_H__
# define __WL18XX_PRIV_H__
2012-05-10 12:13:29 +03:00
# include "conf.h"
2012-05-10 12:13:13 +03:00
2012-06-25 17:46:40 +03:00
/* minimum FW required for driver */
# define WL18XX_CHIP_VER 8
2014-12-29 08:24:07 +02:00
# define WL18XX_IFTYPE_VER 9
2012-11-27 15:52:01 +02:00
# define WL18XX_MAJOR_VER WLCORE_FW_VER_IGNORE
# define WL18XX_SUBTYPE_VER WLCORE_FW_VER_IGNORE
2016-06-28 13:41:35 +03:00
# define WL18XX_MINOR_VER 58
2012-06-25 17:46:40 +03:00
2012-05-10 12:13:13 +03:00
# define WL18XX_CMD_MAX_SIZE 740
2012-07-29 18:21:12 +03:00
# define WL18XX_AGGR_BUFFER_SIZE (13 * PAGE_SIZE)
2012-07-31 14:48:46 +03:00
# define WL18XX_NUM_TX_DESCRIPTORS 32
# define WL18XX_NUM_RX_DESCRIPTORS 32
2014-07-11 03:01:37 +03:00
# define WL18XX_NUM_MAC_ADDRESSES 2
2012-08-02 20:37:21 +03:00
2014-02-10 13:47:25 +02:00
# define WL18XX_RX_BA_MAX_SESSIONS 13
2013-03-12 17:19:35 +02:00
2014-02-10 13:47:25 +02:00
# define WL18XX_MAX_AP_STATIONS 10
# define WL18XX_MAX_LINKS 16
2014-02-10 13:47:22 +02:00
2012-05-10 12:13:13 +03:00
struct wl18xx_priv {
/* buffer for sending commands to FW */
u8 cmd_buf [ WL18XX_CMD_MAX_SIZE ] ;
2012-05-10 12:13:25 +03:00
2012-05-10 12:13:29 +03:00
struct wl18xx_priv_conf conf ;
2012-05-10 12:13:25 +03:00
/* Index of last released Tx desc in FW */
u8 last_fw_rls_idx ;
2012-05-10 12:13:37 +03:00
2012-11-28 11:42:48 +02:00
/* number of keys requiring extra spare mem-blocks */
int extra_spare_key_count ;
2012-05-10 12:13:13 +03:00
} ;
2012-05-10 12:13:21 +03:00
# define WL18XX_FW_MAX_TX_STATUS_DESC 33
struct wl18xx_fw_status_priv {
/*
* Index in released_tx_desc for first byte that holds
* released tx host desc
*/
u8 fw_release_idx ;
/*
* Array of host Tx descriptors , where fw_release_idx
* indicated the first released idx .
*/
u8 released_tx_desc [ WL18XX_FW_MAX_TX_STATUS_DESC ] ;
2012-11-28 11:42:40 +02:00
/* A bitmap representing the currently suspended links. The suspend
* is short lived , for multi - channel Tx requirements .
*/
__le32 link_suspend_bitmap ;
/* packet threshold for an "almost empty" AC,
* for Tx schedulng purposes
*/
u8 tx_ac_threshold ;
/* number of packets to queue up for a link in PS */
u8 tx_ps_threshold ;
/* number of packet to queue up for a suspended link */
u8 tx_suspend_threshold ;
/* Should have less than this number of packets in queue of a slow
* link to qualify as high priority link
*/
u8 tx_slow_link_prio_threshold ;
/* Should have less than this number of packets in queue of a fast
* link to qualify as high priority link
*/
u8 tx_fast_link_prio_threshold ;
/* Should have less than this number of packets in queue of a slow
* link before we stop queuing up packets for it .
*/
u8 tx_slow_stop_threshold ;
/* Should have less than this number of packets in queue of a fast
* link before we stop queuing up packets for it .
*/
u8 tx_fast_stop_threshold ;
u8 padding [ 3 ] ;
2012-05-10 12:13:21 +03:00
} ;
2014-02-10 13:47:21 +02:00
struct wl18xx_fw_packet_counters {
/* Cumulative counter of released packets per AC */
u8 tx_released_pkts [ NUM_TX_QUEUES ] ;
/* Cumulative counter of freed packets per HLID */
2014-02-10 13:47:22 +02:00
u8 tx_lnk_free_pkts [ WL18XX_MAX_LINKS ] ;
2014-02-10 13:47:21 +02:00
/* Cumulative counter of released Voice memory blocks */
u8 tx_voice_released_blks ;
/* Tx rate of the last transmitted packet */
u8 tx_last_rate ;
2016-07-11 17:22:32 +03:00
/* Tx rate or Tx rate estimate pre-calculated by fw in mbps units */
u8 tx_last_rate_mbps ;
/* hlid for which the rates were reported */
u8 hlid ;
2014-02-10 13:47:21 +02:00
} __packed ;
/* FW status registers */
struct wl18xx_fw_status {
__le32 intr ;
u8 fw_rx_counter ;
u8 drv_rx_counter ;
u8 reserved ;
u8 tx_results_counter ;
__le32 rx_pkt_descs [ WL18XX_NUM_RX_DESCRIPTORS ] ;
__le32 fw_localtime ;
/*
* A bitmap ( where each bit represents a single HLID )
* to indicate if the station is in PS mode .
*/
__le32 link_ps_bitmap ;
/*
* A bitmap ( where each bit represents a single HLID ) to indicate
* if the station is in Fast mode
*/
__le32 link_fast_bitmap ;
/* Cumulative counter of total released mem blocks since FW-reset */
__le32 total_released_blks ;
/* Size (in Memory Blocks) of TX pool */
__le32 tx_total ;
struct wl18xx_fw_packet_counters counters ;
__le32 log_start_addr ;
/* Private status to be used by the lower drivers */
struct wl18xx_fw_status_priv priv ;
} __packed ;
2012-05-10 12:14:11 +03:00
# define WL18XX_PHY_VERSION_MAX_LEN 20
struct wl18xx_static_data_priv {
char phy_version [ WL18XX_PHY_VERSION_MAX_LEN ] ;
} ;
2012-05-10 12:13:41 +03:00
struct wl18xx_clk_cfg {
u32 n ;
u32 m ;
u32 p ;
u32 q ;
bool swallow ;
} ;
enum {
CLOCK_CONFIG_16_2_M = 1 ,
CLOCK_CONFIG_16_368_M ,
CLOCK_CONFIG_16_8_M ,
CLOCK_CONFIG_19_2_M ,
CLOCK_CONFIG_26_M ,
CLOCK_CONFIG_32_736_M ,
CLOCK_CONFIG_33_6_M ,
CLOCK_CONFIG_38_468_M ,
CLOCK_CONFIG_52_M ,
NUM_CLOCK_CONFIGS ,
} ;
2012-05-10 12:13:13 +03:00
# endif /* __WL18XX_PRIV_H__ */