linux/drivers/net/wireless/ti/wl18xx/wl18xx.h
<<
>>
Prefs
   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
  48struct 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
  63struct 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
 115struct 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 */
 136struct 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
 174struct wl18xx_static_data_priv {
 175        char phy_version[WL18XX_PHY_VERSION_MAX_LEN];
 176};
 177
 178struct wl18xx_clk_cfg {
 179        u32 n;
 180        u32 m;
 181        u32 p;
 182        u32 q;
 183        bool swallow;
 184};
 185
 186enum {
 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