~ubuntu-branches/ubuntu/natty/linux-backports-modules-2.6.38/natty-updates

« back to all changes in this revision

Viewing changes to updates/compat-wireless-2.6.36/drivers/net/wireless/ath/ath9k/rc.h

  • Committer: Bazaar Package Importer
  • Author(s): Tim Gardner, Tim Gardner
  • Date: 2011-06-08 10:44:09 UTC
  • Revision ID: james.westby@ubuntu.com-20110608104409-fnl8carkdo15bwsz
Tags: 2.6.38-10.6
[ Tim Gardner ]

Shorten compat-wireless package name to cw to accomodate
CDROM file name length restrictions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (c) 2004 Sam Leffler, Errno Consulting
3
 
 * Copyright (c) 2004 Video54 Technologies, Inc.
4
 
 * Copyright (c) 2008-2009 Atheros Communications Inc.
5
 
 *
6
 
 * Permission to use, copy, modify, and/or distribute this software for any
7
 
 * purpose with or without fee is hereby granted, provided that the above
8
 
 * copyright notice and this permission notice appear in all copies.
9
 
 *
10
 
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
 
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
 
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
 
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
 
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
 
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
 
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
 
 */
18
 
 
19
 
#ifndef RC_H
20
 
#define RC_H
21
 
 
22
 
#include "hw.h"
23
 
 
24
 
struct ath_softc;
25
 
 
26
 
#define ATH_RATE_MAX     30
27
 
#define RATE_TABLE_SIZE  72
28
 
#define MAX_TX_RATE_PHY  48
29
 
 
30
 
 
31
 
#define RC_INVALID      0x0000
32
 
#define RC_LEGACY       0x0001
33
 
#define RC_SS           0x0002
34
 
#define RC_DS           0x0004
35
 
#define RC_TS           0x0008
36
 
#define RC_HT_20        0x0010
37
 
#define RC_HT_40        0x0020
38
 
 
39
 
#define RC_STREAM_MASK  0xe
40
 
#define RC_DS_OR_LATER(f)       ((((f) & RC_STREAM_MASK) == RC_DS) || \
41
 
                                (((f) & RC_STREAM_MASK) == (RC_DS | RC_TS)))
42
 
#define RC_TS_ONLY(f)           (((f) & RC_STREAM_MASK) == RC_TS)
43
 
#define RC_SS_OR_LEGACY(f)      ((f) & (RC_SS | RC_LEGACY))
44
 
 
45
 
#define RC_HT_2040              (RC_HT_20 | RC_HT_40)
46
 
#define RC_ALL_STREAM           (RC_SS | RC_DS | RC_TS)
47
 
#define RC_L_SD                 (RC_LEGACY | RC_SS | RC_DS)
48
 
#define RC_L_SDT                (RC_LEGACY | RC_SS | RC_DS | RC_TS)
49
 
#define RC_HT_S_20              (RC_HT_20 | RC_SS)
50
 
#define RC_HT_D_20              (RC_HT_20 | RC_DS)
51
 
#define RC_HT_T_20              (RC_HT_20 | RC_TS)
52
 
#define RC_HT_S_40              (RC_HT_40 | RC_SS)
53
 
#define RC_HT_D_40              (RC_HT_40 | RC_DS)
54
 
#define RC_HT_T_40              (RC_HT_40 | RC_TS)
55
 
 
56
 
#define RC_HT_SD_20             (RC_HT_20 | RC_SS | RC_DS)
57
 
#define RC_HT_DT_20             (RC_HT_20 | RC_DS | RC_TS)
58
 
#define RC_HT_SD_40             (RC_HT_40 | RC_SS | RC_DS)
59
 
#define RC_HT_DT_40             (RC_HT_40 | RC_DS | RC_TS)
60
 
 
61
 
#define RC_HT_SD_2040           (RC_HT_2040 | RC_SS | RC_DS)
62
 
#define RC_HT_SDT_2040          (RC_HT_2040 | RC_SS | RC_DS | RC_TS)
63
 
 
64
 
#define RC_HT_SDT_20            (RC_HT_20 | RC_SS | RC_DS | RC_TS)
65
 
#define RC_HT_SDT_40            (RC_HT_40 | RC_SS | RC_DS | RC_TS)
66
 
 
67
 
#define RC_ALL                  (RC_LEGACY | RC_HT_2040 | RC_ALL_STREAM)
68
 
 
69
 
enum {
70
 
        WLAN_RC_PHY_OFDM,
71
 
        WLAN_RC_PHY_CCK,
72
 
        WLAN_RC_PHY_HT_20_SS,
73
 
        WLAN_RC_PHY_HT_20_DS,
74
 
        WLAN_RC_PHY_HT_20_TS,
75
 
        WLAN_RC_PHY_HT_40_SS,
76
 
        WLAN_RC_PHY_HT_40_DS,
77
 
        WLAN_RC_PHY_HT_40_TS,
78
 
        WLAN_RC_PHY_HT_20_SS_HGI,
79
 
        WLAN_RC_PHY_HT_20_DS_HGI,
80
 
        WLAN_RC_PHY_HT_20_TS_HGI,
81
 
        WLAN_RC_PHY_HT_40_SS_HGI,
82
 
        WLAN_RC_PHY_HT_40_DS_HGI,
83
 
        WLAN_RC_PHY_HT_40_TS_HGI,
84
 
        WLAN_RC_PHY_MAX
85
 
};
86
 
 
87
 
#define WLAN_RC_PHY_DS(_phy)   ((_phy == WLAN_RC_PHY_HT_20_DS)          \
88
 
                                || (_phy == WLAN_RC_PHY_HT_40_DS)       \
89
 
                                || (_phy == WLAN_RC_PHY_HT_20_DS_HGI)   \
90
 
                                || (_phy == WLAN_RC_PHY_HT_40_DS_HGI))
91
 
#define WLAN_RC_PHY_TS(_phy)   ((_phy == WLAN_RC_PHY_HT_20_TS)          \
92
 
                                || (_phy == WLAN_RC_PHY_HT_40_TS)       \
93
 
                                || (_phy == WLAN_RC_PHY_HT_20_TS_HGI)   \
94
 
                                || (_phy == WLAN_RC_PHY_HT_40_TS_HGI))
95
 
#define WLAN_RC_PHY_20(_phy)   ((_phy == WLAN_RC_PHY_HT_20_SS)          \
96
 
                                || (_phy == WLAN_RC_PHY_HT_20_DS)       \
97
 
                                || (_phy == WLAN_RC_PHY_HT_20_TS)       \
98
 
                                || (_phy == WLAN_RC_PHY_HT_20_SS_HGI)   \
99
 
                                || (_phy == WLAN_RC_PHY_HT_20_DS_HGI)   \
100
 
                                || (_phy == WLAN_RC_PHY_HT_20_TS_HGI))
101
 
#define WLAN_RC_PHY_40(_phy)   ((_phy == WLAN_RC_PHY_HT_40_SS)          \
102
 
                                || (_phy == WLAN_RC_PHY_HT_40_DS)       \
103
 
                                || (_phy == WLAN_RC_PHY_HT_40_TS)       \
104
 
                                || (_phy == WLAN_RC_PHY_HT_40_SS_HGI)   \
105
 
                                || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)   \
106
 
                                || (_phy == WLAN_RC_PHY_HT_40_TS_HGI))
107
 
#define WLAN_RC_PHY_SGI(_phy)  ((_phy == WLAN_RC_PHY_HT_20_SS_HGI)      \
108
 
                                || (_phy == WLAN_RC_PHY_HT_20_DS_HGI)   \
109
 
                                || (_phy == WLAN_RC_PHY_HT_20_TS_HGI)   \
110
 
                                || (_phy == WLAN_RC_PHY_HT_40_SS_HGI)   \
111
 
                                || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)   \
112
 
                                || (_phy == WLAN_RC_PHY_HT_40_TS_HGI))
113
 
 
114
 
#define WLAN_RC_PHY_HT(_phy)    (_phy >= WLAN_RC_PHY_HT_20_SS)
115
 
 
116
 
#define WLAN_RC_CAP_MODE(capflag) (((capflag & WLAN_RC_HT_FLAG) ?       \
117
 
        ((capflag & WLAN_RC_40_FLAG) ? RC_HT_40 : RC_HT_20) : RC_LEGACY))
118
 
 
119
 
#define WLAN_RC_CAP_STREAM(capflag) (((capflag & WLAN_RC_TS_FLAG) ?     \
120
 
        (RC_TS) : ((capflag & WLAN_RC_DS_FLAG) ? RC_DS : RC_SS)))
121
 
 
122
 
/* Return TRUE if flag supports HT20 && client supports HT20 or
123
 
 * return TRUE if flag supports HT40 && client supports HT40.
124
 
 * This is used becos some rates overlap between HT20/HT40.
125
 
 */
126
 
#define WLAN_RC_PHY_HT_VALID(flag, capflag)                     \
127
 
        (((flag & RC_HT_20) && !(capflag & WLAN_RC_40_FLAG)) || \
128
 
         ((flag & RC_HT_40) && (capflag & WLAN_RC_40_FLAG)))
129
 
 
130
 
#define WLAN_RC_DS_FLAG         (0x01)
131
 
#define WLAN_RC_TS_FLAG         (0x02)
132
 
#define WLAN_RC_40_FLAG         (0x04)
133
 
#define WLAN_RC_SGI_FLAG        (0x08)
134
 
#define WLAN_RC_HT_FLAG         (0x10)
135
 
 
136
 
/**
137
 
 * struct ath_rate_table - Rate Control table
138
 
 * @valid: valid for use in rate control
139
 
 * @valid_single_stream: valid for use in rate control for
140
 
 *      single stream operation
141
 
 * @phy: CCK/OFDM
142
 
 * @ratekbps: rate in Kbits per second
143
 
 * @user_ratekbps: user rate in Kbits per second
144
 
 * @ratecode: rate that goes into HW descriptors
145
 
 * @short_preamble: Mask for enabling short preamble in ratecode for CCK
146
 
 * @dot11rate: value that goes into supported
147
 
 *      rates info element of MLME
148
 
 * @ctrl_rate: Index of next lower basic rate, used for duration computation
149
 
 * @max_4ms_framelen: maximum frame length(bytes) for tx duration
150
 
 * @probe_interval: interval for rate control to probe for other rates
151
 
 * @rssi_reduce_interval: interval for rate control to reduce rssi
152
 
 * @initial_ratemax: initial ratemax value
153
 
 */
154
 
struct ath_rate_table {
155
 
        int rate_cnt;
156
 
        int mcs_start;
157
 
        struct {
158
 
                u16 rate_flags;
159
 
                u8 phy;
160
 
                u32 ratekbps;
161
 
                u32 user_ratekbps;
162
 
                u8 ratecode;
163
 
                u8 dot11rate;
164
 
                u8 ctrl_rate;
165
 
                u8 cw40index;
166
 
                u8 sgi_index;
167
 
                u8 ht_index;
168
 
        } info[RATE_TABLE_SIZE];
169
 
        u32 probe_interval;
170
 
        u8 initial_ratemax;
171
 
};
172
 
 
173
 
struct ath_rateset {
174
 
        u8 rs_nrates;
175
 
        u8 rs_rates[ATH_RATE_MAX];
176
 
};
177
 
 
178
 
/**
179
 
 * struct ath_rate_priv - Rate Control priv data
180
 
 * @state: RC state
181
 
 * @probe_rate: rate we are probing at
182
 
 * @probe_time: msec timestamp for last probe
183
 
 * @hw_maxretry_pktcnt: num of packets since we got HW max retry error
184
 
 * @max_valid_rate: maximum number of valid rate
185
 
 * @per_down_time: msec timestamp for last PER down step
186
 
 * @valid_phy_ratecnt: valid rate count
187
 
 * @rate_max_phy: phy index for the max rate
188
 
 * @per: PER for every valid rate in %
189
 
 * @probe_interval: interval for ratectrl to probe for other rates
190
 
 * @prev_data_rix: rate idx of last data frame
191
 
 * @ht_cap: HT capabilities
192
 
 * @neg_rates: Negotatied rates
193
 
 * @neg_ht_rates: Negotiated HT rates
194
 
 */
195
 
struct ath_rate_priv {
196
 
        u8 rate_table_size;
197
 
        u8 probe_rate;
198
 
        u8 hw_maxretry_pktcnt;
199
 
        u8 max_valid_rate;
200
 
        u8 valid_rate_index[RATE_TABLE_SIZE];
201
 
        u8 ht_cap;
202
 
        u8 valid_phy_ratecnt[WLAN_RC_PHY_MAX];
203
 
        u8 valid_phy_rateidx[WLAN_RC_PHY_MAX][RATE_TABLE_SIZE];
204
 
        u8 rate_max_phy;
205
 
        u8 per[RATE_TABLE_SIZE];
206
 
        u32 probe_time;
207
 
        u32 per_down_time;
208
 
        u32 probe_interval;
209
 
        u32 prev_data_rix;
210
 
        u32 tx_triglevel_max;
211
 
        struct ath_rateset neg_rates;
212
 
        struct ath_rateset neg_ht_rates;
213
 
        struct ath_rate_softc *asc;
214
 
};
215
 
 
216
 
#define ATH_TX_INFO_FRAME_TYPE_INTERNAL (1 << 0)
217
 
#define ATH_TX_INFO_FRAME_TYPE_PAUSE    (1 << 1)
218
 
#define ATH_TX_INFO_XRETRY              (1 << 3)
219
 
#define ATH_TX_INFO_UNDERRUN            (1 << 4)
220
 
 
221
 
enum ath9k_internal_frame_type {
222
 
        ATH9K_IFT_NOT_INTERNAL,
223
 
        ATH9K_IFT_PAUSE,
224
 
        ATH9K_IFT_UNPAUSE
225
 
};
226
 
 
227
 
int ath_rate_control_register(void);
228
 
void ath_rate_control_unregister(void);
229
 
 
230
 
#endif /* RC_H */