Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
2eb05816
Commit
2eb05816
authored
Aug 26, 2011
by
Stanislaw Gruszka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iwlegacy: s/IL_RATE/RATE/
Signed-off-by:
Stanislaw Gruszka
<
sgruszka@redhat.com
>
parent
6ce1dc45
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
364 additions
and
364 deletions
+364
-364
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
+80
-80
drivers/net/wireless/iwlegacy/iwl-3945.c
drivers/net/wireless/iwlegacy/iwl-3945.c
+46
-46
drivers/net/wireless/iwlegacy/iwl-3945.h
drivers/net/wireless/iwlegacy/iwl-3945.h
+2
-2
drivers/net/wireless/iwlegacy/iwl-4965-lib.c
drivers/net/wireless/iwlegacy/iwl-4965-lib.c
+4
-4
drivers/net/wireless/iwlegacy/iwl-4965-rs.c
drivers/net/wireless/iwlegacy/iwl-4965-rs.c
+90
-90
drivers/net/wireless/iwlegacy/iwl-4965-sta.c
drivers/net/wireless/iwlegacy/iwl-4965-sta.c
+2
-2
drivers/net/wireless/iwlegacy/iwl-4965-tx.c
drivers/net/wireless/iwlegacy/iwl-4965-tx.c
+1
-1
drivers/net/wireless/iwlegacy/iwl-commands.h
drivers/net/wireless/iwlegacy/iwl-commands.h
+1
-1
drivers/net/wireless/iwlegacy/iwl-core.c
drivers/net/wireless/iwlegacy/iwl-core.c
+8
-8
drivers/net/wireless/iwlegacy/iwl-legacy-rs.h
drivers/net/wireless/iwlegacy/iwl-legacy-rs.h
+122
-122
drivers/net/wireless/iwlegacy/iwl-sta.c
drivers/net/wireless/iwlegacy/iwl-sta.c
+1
-1
drivers/net/wireless/iwlegacy/iwl3945-base.c
drivers/net/wireless/iwlegacy/iwl3945-base.c
+4
-4
drivers/net/wireless/iwlegacy/iwl4965-base.c
drivers/net/wireless/iwlegacy/iwl4965-base.c
+3
-3
No files found.
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
View file @
2eb05816
...
...
@@ -42,19 +42,19 @@
#define RS_NAME "iwl-3945-rs"
static
s32
il3945_expected_tpt_g
[
IL_
RATE_COUNT_3945
]
=
{
static
s32
il3945_expected_tpt_g
[
RATE_COUNT_3945
]
=
{
7
,
13
,
35
,
58
,
0
,
0
,
76
,
104
,
130
,
168
,
191
,
202
};
static
s32
il3945_expected_tpt_g_prot
[
IL_
RATE_COUNT_3945
]
=
{
static
s32
il3945_expected_tpt_g_prot
[
RATE_COUNT_3945
]
=
{
7
,
13
,
35
,
58
,
0
,
0
,
0
,
80
,
93
,
113
,
123
,
125
};
static
s32
il3945_expected_tpt_a
[
IL_
RATE_COUNT_3945
]
=
{
static
s32
il3945_expected_tpt_a
[
RATE_COUNT_3945
]
=
{
0
,
0
,
0
,
0
,
40
,
57
,
72
,
98
,
121
,
154
,
177
,
186
};
static
s32
il3945_expected_tpt_b
[
IL_
RATE_COUNT_3945
]
=
{
static
s32
il3945_expected_tpt_b
[
RATE_COUNT_3945
]
=
{
7
,
13
,
35
,
58
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
...
...
@@ -64,39 +64,39 @@ struct il3945_tpt_entry {
};
static
struct
il3945_tpt_entry
il3945_tpt_table_a
[]
=
{
{
-
60
,
IL_
RATE_54M_INDEX
},
{
-
64
,
IL_
RATE_48M_INDEX
},
{
-
72
,
IL_
RATE_36M_INDEX
},
{
-
80
,
IL_
RATE_24M_INDEX
},
{
-
84
,
IL_
RATE_18M_INDEX
},
{
-
85
,
IL_
RATE_12M_INDEX
},
{
-
87
,
IL_
RATE_9M_INDEX
},
{
-
89
,
IL_
RATE_6M_INDEX
}
{
-
60
,
RATE_54M_INDEX
},
{
-
64
,
RATE_48M_INDEX
},
{
-
72
,
RATE_36M_INDEX
},
{
-
80
,
RATE_24M_INDEX
},
{
-
84
,
RATE_18M_INDEX
},
{
-
85
,
RATE_12M_INDEX
},
{
-
87
,
RATE_9M_INDEX
},
{
-
89
,
RATE_6M_INDEX
}
};
static
struct
il3945_tpt_entry
il3945_tpt_table_g
[]
=
{
{
-
60
,
IL_
RATE_54M_INDEX
},
{
-
64
,
IL_
RATE_48M_INDEX
},
{
-
68
,
IL_
RATE_36M_INDEX
},
{
-
80
,
IL_
RATE_24M_INDEX
},
{
-
84
,
IL_
RATE_18M_INDEX
},
{
-
85
,
IL_
RATE_12M_INDEX
},
{
-
86
,
IL_
RATE_11M_INDEX
},
{
-
88
,
IL_
RATE_5M_INDEX
},
{
-
90
,
IL_
RATE_2M_INDEX
},
{
-
92
,
IL_
RATE_1M_INDEX
}
{
-
60
,
RATE_54M_INDEX
},
{
-
64
,
RATE_48M_INDEX
},
{
-
68
,
RATE_36M_INDEX
},
{
-
80
,
RATE_24M_INDEX
},
{
-
84
,
RATE_18M_INDEX
},
{
-
85
,
RATE_12M_INDEX
},
{
-
86
,
RATE_11M_INDEX
},
{
-
88
,
RATE_5M_INDEX
},
{
-
90
,
RATE_2M_INDEX
},
{
-
92
,
RATE_1M_INDEX
}
};
#define
IL_
RATE_MAX_WINDOW 62
#define
IL_
RATE_FLUSH (3*HZ)
#define
IL_
RATE_WIN_FLUSH (HZ/2)
#define RATE_MAX_WINDOW 62
#define RATE_FLUSH (3*HZ)
#define RATE_WIN_FLUSH (HZ/2)
#define IL39_RATE_HIGH_TH 11520
#define IL_SUCCESS_UP_TH 8960
#define IL_SUCCESS_DOWN_TH 10880
#define
IL_
RATE_MIN_FAILURE_TH 6
#define
IL_
RATE_MIN_SUCCESS_TH 8
#define
IL_
RATE_DECREASE_TH 1920
#define
IL_
RATE_RETRY_TH 15
#define RATE_MIN_FAILURE_TH 6
#define RATE_MIN_SUCCESS_TH 8
#define RATE_DECREASE_TH 1920
#define RATE_RETRY_TH 15
static
u8
il3945_get_rate_index_by_rssi
(
s32
rssi
,
enum
ieee80211_band
band
)
{
...
...
@@ -157,16 +157,16 @@ static int il3945_rate_scale_flush_wins(struct il3945_rs_sta *rs_sta)
/*
* For each rate, if we have collected data on that rate
* and it has been more than
IL_
RATE_WIN_FLUSH
* and it has been more than RATE_WIN_FLUSH
* since we flushed, clear out the gathered stats
*/
for
(
i
=
0
;
i
<
IL_
RATE_COUNT_3945
;
i
++
)
{
for
(
i
=
0
;
i
<
RATE_COUNT_3945
;
i
++
)
{
if
(
!
rs_sta
->
win
[
i
].
counter
)
continue
;
spin_lock_irqsave
(
&
rs_sta
->
lock
,
flags
);
if
(
time_after
(
jiffies
,
rs_sta
->
win
[
i
].
stamp
+
IL_
RATE_WIN_FLUSH
))
{
RATE_WIN_FLUSH
))
{
D_RATE
(
"flushing %d samples of rate "
"index %d
\n
"
,
rs_sta
->
win
[
i
].
counter
,
i
);
...
...
@@ -179,8 +179,8 @@ static int il3945_rate_scale_flush_wins(struct il3945_rs_sta *rs_sta)
return
unflushed
;
}
#define
IL_
RATE_FLUSH_MAX 5000
/* msec */
#define
IL_
RATE_FLUSH_MIN 50
/* msec */
#define RATE_FLUSH_MAX 5000
/* msec */
#define RATE_FLUSH_MIN 50
/* msec */
#define IL_AVERAGE_PACKETS 1500
static
void
il3945_bg_rate_scale_flush
(
unsigned
long
data
)
...
...
@@ -217,12 +217,12 @@ static void il3945_bg_rate_scale_flush(unsigned long data)
if
(
pps
)
{
duration
=
(
IL_AVERAGE_PACKETS
*
1000
)
/
pps
;
if
(
duration
<
IL_
RATE_FLUSH_MIN
)
duration
=
IL_
RATE_FLUSH_MIN
;
else
if
(
duration
>
IL_
RATE_FLUSH_MAX
)
duration
=
IL_
RATE_FLUSH_MAX
;
if
(
duration
<
RATE_FLUSH_MIN
)
duration
=
RATE_FLUSH_MIN
;
else
if
(
duration
>
RATE_FLUSH_MAX
)
duration
=
RATE_FLUSH_MAX
;
}
else
duration
=
IL_
RATE_FLUSH_MAX
;
duration
=
RATE_FLUSH_MAX
;
rs_sta
->
flush_time
=
msecs_to_jiffies
(
duration
);
...
...
@@ -234,7 +234,7 @@ static void il3945_bg_rate_scale_flush(unsigned long data)
rs_sta
->
last_partial_flush
=
jiffies
;
}
else
{
rs_sta
->
flush_time
=
IL_
RATE_FLUSH
;
rs_sta
->
flush_time
=
RATE_FLUSH
;
rs_sta
->
flush_pending
=
0
;
}
/* If there weren't any unflushed entries, we don't schedule the timer
...
...
@@ -278,13 +278,13 @@ static void il3945_collect_tx_data(struct il3945_rs_sta *rs_sta,
* we keep these bitmaps!).
* */
while
(
retries
>
0
)
{
if
(
win
->
counter
>=
IL_
RATE_MAX_WINDOW
)
{
if
(
win
->
counter
>=
RATE_MAX_WINDOW
)
{
/* remove earliest */
win
->
counter
=
IL_
RATE_MAX_WINDOW
-
1
;
win
->
counter
=
RATE_MAX_WINDOW
-
1
;
if
(
win
->
data
&
(
1ULL
<<
(
IL_
RATE_MAX_WINDOW
-
1
)))
{
win
->
data
&=
~
(
1ULL
<<
(
IL_
RATE_MAX_WINDOW
-
1
));
if
(
win
->
data
&
(
1ULL
<<
(
RATE_MAX_WINDOW
-
1
)))
{
win
->
data
&=
~
(
1ULL
<<
(
RATE_MAX_WINDOW
-
1
));
win
->
success_counter
--
;
}
}
...
...
@@ -315,8 +315,8 @@ static void il3945_collect_tx_data(struct il3945_rs_sta *rs_sta,
fail_count
=
win
->
counter
-
win
->
success_counter
;
/* Calculate average throughput, if we have enough history. */
if
(
fail_count
>=
IL_
RATE_MIN_FAILURE_TH
||
win
->
success_counter
>=
IL_
RATE_MIN_SUCCESS_TH
)
if
(
fail_count
>=
RATE_MIN_FAILURE_TH
||
win
->
success_counter
>=
RATE_MIN_SUCCESS_TH
)
win
->
average_tpt
=
((
win
->
success_ratio
*
rs_sta
->
expected_tpt
[
index
]
+
64
)
/
128
);
else
...
...
@@ -351,20 +351,20 @@ void il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_i
rs_sta
->
il
=
il
;
rs_sta
->
start_rate
=
IL_
RATE_INVALID
;
rs_sta
->
start_rate
=
RATE_INVALID
;
/* default to just 802.11b */
rs_sta
->
expected_tpt
=
il3945_expected_tpt_b
;
rs_sta
->
last_partial_flush
=
jiffies
;
rs_sta
->
last_flush
=
jiffies
;
rs_sta
->
flush_time
=
IL_
RATE_FLUSH
;
rs_sta
->
flush_time
=
RATE_FLUSH
;
rs_sta
->
last_tx_packets
=
0
;
rs_sta
->
rate_scale_flush
.
data
=
(
unsigned
long
)
rs_sta
;
rs_sta
->
rate_scale_flush
.
function
=
il3945_bg_rate_scale_flush
;
for
(
i
=
0
;
i
<
IL_
RATE_COUNT_3945
;
i
++
)
for
(
i
=
0
;
i
<
RATE_COUNT_3945
;
i
++
)
il3945_clear_win
(
&
rs_sta
->
win
[
i
]);
/* TODO: what is a good starting rate for STA? About middle? Maybe not
...
...
@@ -457,11 +457,11 @@ static void il3945_rs_tx_status(void *il_rate, struct ieee80211_supported_band *
retries
=
info
->
status
.
rates
[
0
].
count
;
/* Sanity Check for retries */
if
(
retries
>
IL_
RATE_RETRY_TH
)
retries
=
IL_
RATE_RETRY_TH
;
if
(
retries
>
RATE_RETRY_TH
)
retries
=
RATE_RETRY_TH
;
first_index
=
sband
->
bitrates
[
info
->
status
.
rates
[
0
].
idx
].
hw_value
;
if
(
first_index
<
0
||
first_index
>=
IL_
RATE_COUNT_3945
)
{
if
(
first_index
<
0
||
first_index
>=
RATE_COUNT_3945
)
{
D_RATE
(
"leave: Rate out of bounds: %d
\n
"
,
first_index
);
return
;
}
...
...
@@ -549,8 +549,8 @@ static void il3945_rs_tx_status(void *il_rate, struct ieee80211_supported_band *
static
u16
il3945_get_adjacent_rate
(
struct
il3945_rs_sta
*
rs_sta
,
u8
index
,
u16
rate_mask
,
enum
ieee80211_band
band
)
{
u8
high
=
IL_
RATE_INVALID
;
u8
low
=
IL_
RATE_INVALID
;
u8
high
=
RATE_INVALID
;
u8
low
=
RATE_INVALID
;
struct
il_priv
*
il
__maybe_unused
=
rs_sta
->
il
;
/* 802.11A walks to the next literal adjacent rate in
...
...
@@ -570,7 +570,7 @@ static u16 il3945_get_adjacent_rate(struct il3945_rs_sta *rs_sta,
/* Find the next rate that is in the rate mask */
i
=
index
+
1
;
for
(
mask
=
(
1
<<
i
);
i
<
IL_
RATE_COUNT_3945
;
for
(
mask
=
(
1
<<
i
);
i
<
RATE_COUNT_3945
;
i
++
,
mask
<<=
1
)
{
if
(
rate_mask
&
mask
)
{
high
=
i
;
...
...
@@ -582,12 +582,12 @@ static u16 il3945_get_adjacent_rate(struct il3945_rs_sta *rs_sta,
}
low
=
index
;
while
(
low
!=
IL_
RATE_INVALID
)
{
while
(
low
!=
RATE_INVALID
)
{
if
(
rs_sta
->
tgg
)
low
=
il3945_rates
[
low
].
prev_rs_tgg
;
else
low
=
il3945_rates
[
low
].
prev_rs
;
if
(
low
==
IL_
RATE_INVALID
)
if
(
low
==
RATE_INVALID
)
break
;
if
(
rate_mask
&
(
1
<<
low
))
break
;
...
...
@@ -595,12 +595,12 @@ static u16 il3945_get_adjacent_rate(struct il3945_rs_sta *rs_sta,
}
high
=
index
;
while
(
high
!=
IL_
RATE_INVALID
)
{
while
(
high
!=
RATE_INVALID
)
{
if
(
rs_sta
->
tgg
)
high
=
il3945_rates
[
high
].
next_rs_tgg
;
else
high
=
il3945_rates
[
high
].
next_rs
;
if
(
high
==
IL_
RATE_INVALID
)
if
(
high
==
RATE_INVALID
)
break
;
if
(
rate_mask
&
(
1
<<
high
))
break
;
...
...
@@ -631,8 +631,8 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
{
struct
ieee80211_supported_band
*
sband
=
txrc
->
sband
;
struct
sk_buff
*
skb
=
txrc
->
skb
;
u8
low
=
IL_
RATE_INVALID
;
u8
high
=
IL_
RATE_INVALID
;
u8
low
=
RATE_INVALID
;
u8
high
=
RATE_INVALID
;
u16
high_low
;
int
index
;
struct
il3945_rs_sta
*
rs_sta
=
il_sta
;
...
...
@@ -665,10 +665,10 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
max_rate_idx
=
txrc
->
max_rate_idx
;
if
(
sband
->
band
==
IEEE80211_BAND_5GHZ
&&
max_rate_idx
!=
-
1
)
max_rate_idx
+=
IL_FIRST_OFDM_RATE
;
if
(
max_rate_idx
<
0
||
max_rate_idx
>=
IL_
RATE_COUNT
)
if
(
max_rate_idx
<
0
||
max_rate_idx
>=
RATE_COUNT
)
max_rate_idx
=
-
1
;
index
=
min
(
rs_sta
->
last_txrate_idx
&
0xffff
,
IL_
RATE_COUNT_3945
-
1
);
index
=
min
(
rs_sta
->
last_txrate_idx
&
0xffff
,
RATE_COUNT_3945
-
1
);
if
(
sband
->
band
==
IEEE80211_BAND_5GHZ
)
rate_mask
=
rate_mask
<<
IL_FIRST_OFDM_RATE
;
...
...
@@ -678,11 +678,11 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
/* for recent assoc, choose best rate regarding
* to rssi value
*/
if
(
rs_sta
->
start_rate
!=
IL_
RATE_INVALID
)
{
if
(
rs_sta
->
start_rate
!=
RATE_INVALID
)
{
if
(
rs_sta
->
start_rate
<
index
&&
(
rate_mask
&
(
1
<<
rs_sta
->
start_rate
)))
index
=
rs_sta
->
start_rate
;
rs_sta
->
start_rate
=
IL_
RATE_INVALID
;
rs_sta
->
start_rate
=
RATE_INVALID
;
}
/* force user max rate if set by user */
...
...
@@ -695,8 +695,8 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
fail_count
=
win
->
counter
-
win
->
success_counter
;
if
(
fail_count
<
IL_
RATE_MIN_FAILURE_TH
&&
win
->
success_counter
<
IL_
RATE_MIN_SUCCESS_TH
)
{
if
(
fail_count
<
RATE_MIN_FAILURE_TH
&&
win
->
success_counter
<
RATE_MIN_SUCCESS_TH
)
{
spin_unlock_irqrestore
(
&
rs_sta
->
lock
,
flags
);
D_RATE
(
"Invalid average_tpt on rate %d: "
...
...
@@ -722,13 +722,13 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
/* If user set max rate, dont allow higher than user constrain */
if
(
max_rate_idx
!=
-
1
&&
max_rate_idx
<
high
)
high
=
IL_
RATE_INVALID
;
high
=
RATE_INVALID
;
/* Collect Measured throughputs of adjacent rates */
if
(
low
!=
IL_
RATE_INVALID
)
if
(
low
!=
RATE_INVALID
)
low_tpt
=
rs_sta
->
win
[
low
].
average_tpt
;
if
(
high
!=
IL_
RATE_INVALID
)
if
(
high
!=
RATE_INVALID
)
high_tpt
=
rs_sta
->
win
[
high
].
average_tpt
;
spin_unlock_irqrestore
(
&
rs_sta
->
lock
,
flags
);
...
...
@@ -736,7 +736,7 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
scale_action
=
0
;
/* Low success ratio , need to drop the rate */
if
(
win
->
success_ratio
<
IL_
RATE_DECREASE_TH
||
!
current_tpt
)
{
if
(
win
->
success_ratio
<
RATE_DECREASE_TH
||
!
current_tpt
)
{
D_RATE
(
"decrease rate because of low success_ratio
\n
"
);
scale_action
=
-
1
;
/* No throughput measured yet for adjacent rates,
...
...
@@ -744,9 +744,9 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
}
else
if
(
low_tpt
==
IL_INVALID_VALUE
&&
high_tpt
==
IL_INVALID_VALUE
)
{
if
(
high
!=
IL_RATE_INVALID
&&
win
->
success_ratio
>=
IL_
RATE_INCREASE_TH
)
if
(
high
!=
RATE_INVALID
&&
win
->
success_ratio
>=
RATE_INCREASE_TH
)
scale_action
=
1
;
else
if
(
low
!=
IL_
RATE_INVALID
)
else
if
(
low
!=
RATE_INVALID
)
scale_action
=
0
;
/* Both adjacent throughputs are measured, but neither one has
...
...
@@ -768,7 +768,7 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
/* High rate has better throughput, Increase
* rate */
if
(
high_tpt
>
current_tpt
&&
win
->
success_ratio
>=
IL_
RATE_INCREASE_TH
)
win
->
success_ratio
>=
RATE_INCREASE_TH
)
scale_action
=
1
;
else
{
D_RATE
(
...
...
@@ -780,7 +780,7 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
D_RATE
(
"decrease rate because of low tpt
\n
"
);
scale_action
=
-
1
;
}
else
if
(
win
->
success_ratio
>=
IL_
RATE_INCREASE_TH
)
{
}
else
if
(
win
->
success_ratio
>=
RATE_INCREASE_TH
)
{
/* Lower rate has better
* throughput,decrease rate */
scale_action
=
1
;
...
...
@@ -790,8 +790,8 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
/* Sanity check; asked for decrease, but success rate or throughput
* has been good at old rate. Don't change it. */
if
(
scale_action
==
-
1
&&
low
!=
IL_
RATE_INVALID
&&
(
win
->
success_ratio
>
IL_
RATE_HIGH_TH
||
if
(
scale_action
==
-
1
&&
low
!=
RATE_INVALID
&&
(
win
->
success_ratio
>
RATE_HIGH_TH
||
current_tpt
>
100
*
rs_sta
->
expected_tpt
[
low
]))
scale_action
=
0
;
...
...
@@ -799,13 +799,13 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
case
-
1
:
/* Decrese rate */
if
(
low
!=
IL_
RATE_INVALID
)
if
(
low
!=
RATE_INVALID
)
index
=
low
;
break
;
case
1
:
/* Increase rate */
if
(
high
!=
IL_
RATE_INVALID
)
if
(
high
!=
RATE_INVALID
)
index
=
high
;
break
;
...
...
@@ -860,7 +860,7 @@ static ssize_t il3945_sta_dbgfs_stats_table_read(struct file *file,
lq_sta
->
tx_packets
,
lq_sta
->
last_txrate_idx
,
lq_sta
->
start_rate
,
jiffies_to_msecs
(
lq_sta
->
flush_time
));
for
(
j
=
0
;
j
<
IL_
RATE_COUNT_3945
;
j
++
)
{
for
(
j
=
0
;
j
<
RATE_COUNT_3945
;
j
++
)
{
desc
+=
sprintf
(
buff
+
desc
,
"counter=%d success=%d %%=%d
\n
"
,
lq_sta
->
win
[
j
].
counter
,
...
...
drivers/net/wireless/iwlegacy/iwl-3945.c
View file @
2eb05816
...
...
@@ -52,26 +52,26 @@
#include "iwl-3945-debugfs.h"
#define IL_DECLARE_RATE_INFO(r, ip, in, rp, rn, pp, np) \
[
IL_RATE_##r##M_INDEX] = { IL_
RATE_##r##M_PLCP, \
IL_
RATE_##r##M_IEEE, \
IL_
RATE_##ip##M_INDEX, \
IL_
RATE_##in##M_INDEX, \
IL_
RATE_##rp##M_INDEX, \
IL_
RATE_##rn##M_INDEX, \
IL_
RATE_##pp##M_INDEX, \
IL_
RATE_##np##M_INDEX, \
IL_
RATE_##r##M_INDEX_TABLE, \
IL_
RATE_##ip##M_INDEX_TABLE }
[
RATE_##r##M_INDEX] = {
RATE_##r##M_PLCP, \
RATE_##r##M_IEEE, \
RATE_##ip##M_INDEX, \
RATE_##in##M_INDEX, \
RATE_##rp##M_INDEX, \
RATE_##rn##M_INDEX, \
RATE_##pp##M_INDEX, \
RATE_##np##M_INDEX, \
RATE_##r##M_INDEX_TABLE, \
RATE_##ip##M_INDEX_TABLE }
/*
* Parameter order:
* rate, prev rate, next rate, prev tgg rate, next tgg rate
*
* If there isn't a valid next or previous rate then INV is used which
* maps to
IL_
RATE_INVALID
* maps to RATE_INVALID
*
*/
const
struct
il3945_rate_info
il3945_rates
[
IL_
RATE_COUNT_3945
]
=
{
const
struct
il3945_rate_info
il3945_rates
[
RATE_COUNT_3945
]
=
{
IL_DECLARE_RATE_INFO
(
1
,
INV
,
2
,
INV
,
2
,
INV
,
2
),
/* 1mbps */
IL_DECLARE_RATE_INFO
(
2
,
1
,
5
,
1
,
5
,
1
,
5
),
/* 2mbps */
IL_DECLARE_RATE_INFO
(
5
,
2
,
6
,
2
,
11
,
2
,
11
),
/*5.5mbps */
...
...
@@ -90,7 +90,7 @@ static inline u8 il3945_get_prev_ieee_rate(u8 rate_index)
{
u8
rate
=
il3945_rates
[
rate_index
].
prev_ieee
;
if
(
rate
==
IL_
RATE_INVALID
)
if
(
rate
==
RATE_INVALID
)
rate
=
rate_index
;
return
rate
;
}
...
...
@@ -194,7 +194,7 @@ static int il3945_hwrate_to_plcp_idx(u8 plcp)
{
int
idx
;
for
(
idx
=
0
;
idx
<
IL_
RATE_COUNT_3945
;
idx
++
)
for
(
idx
=
0
;
idx
<
RATE_COUNT_3945
;
idx
++
)
if
(
il3945_rates
[
idx
].
plcp
==
plcp
)
return
idx
;
return
-
1
;
...
...
@@ -246,16 +246,16 @@ int il3945_rs_next_rate(struct il_priv *il, int rate)
switch
(
il
->
band
)
{
case
IEEE80211_BAND_5GHZ
:
if
(
rate
==
IL_
RATE_12M_INDEX
)
next_rate
=
IL_
RATE_9M_INDEX
;
else
if
(
rate
==
IL_
RATE_6M_INDEX
)
next_rate
=
IL_
RATE_6M_INDEX
;
if
(
rate
==
RATE_12M_INDEX
)
next_rate
=
RATE_9M_INDEX
;
else
if
(
rate
==
RATE_6M_INDEX
)
next_rate
=
RATE_6M_INDEX
;
break
;
case
IEEE80211_BAND_2GHZ
:
if
(
!
(
il
->
_3945
.
sta_supp_rates
&
IL_OFDM_RATES_MASK
)
&&
il_is_associated
(
il
))
{
if
(
rate
==
IL_
RATE_11M_INDEX
)
next_rate
=
IL_
RATE_5M_INDEX
;
if
(
rate
==
RATE_11M_INDEX
)
next_rate
=
RATE_5M_INDEX
;
}
break
;
...
...
@@ -675,7 +675,7 @@ void il3945_hw_build_tx_cmd_rate(struct il_priv *il,
int
sta_id
,
int
tx_id
)
{
u16
hw_value
=
ieee80211_get_tx_rate
(
il
->
hw
,
info
)
->
hw_value
;
u16
rate_index
=
min
(
hw_value
&
0xffff
,
IL_
RATE_COUNT_3945
);
u16
rate_index
=
min
(
hw_value
&
0xffff
,
RATE_COUNT_3945
);
u16
rate_mask
;
int
rate
;
u8
rts_retry_limit
;
...
...
@@ -689,7 +689,7 @@ void il3945_hw_build_tx_cmd_rate(struct il_priv *il,
/* We need to figure out how to get the sta->supp_rates while
* in this running context */
rate_mask
=
IL_
RATES_MASK_3945
;
rate_mask
=
RATES_MASK_3945
;
/* Set retry limit on DATA packets and Probe Responses*/
if
(
ieee80211_is_probe_resp
(
fc
))
...
...
@@ -1330,7 +1330,7 @@ static void il3945_hw_reg_set_scan_power(struct il_priv *il, u32 scan_tbl_index,
/* use this channel group's 6Mbit clipping/saturation pwr,
* but cap at regulatory scan power restriction (set during init
* based on eeprom channel data) for this channel. */
power
=
min
(
ch_info
->
scan_power
,
clip_pwrs
[
IL_
RATE_6M_INDEX_TABLE
]);
power
=
min
(
ch_info
->
scan_power
,
clip_pwrs
[
RATE_6M_INDEX_TABLE
]);
power
=
min
(
power
,
il
->
tx_power_user_lmt
);
scan_power_info
->
requested_power
=
power
;
...
...
@@ -1342,7 +1342,7 @@ static void il3945_hw_reg_set_scan_power(struct il_priv *il, u32 scan_tbl_index,
* *index*. */
power_index
=
ch_info
->
power_info
[
rate_index
].
power_table_index
-
(
power
-
ch_info
->
power_info
[
IL_
RATE_6M_INDEX_TABLE
].
requested_power
)
*
2
;
[
RATE_6M_INDEX_TABLE
].
requested_power
)
*
2
;
/* store reference index that we use when adjusting *all* scan
* powers. So we can accommodate user (all channel) or spectrum
...
...
@@ -1466,7 +1466,7 @@ static int il3945_hw_reg_set_new_power(struct il_priv *il,
power_info
=
ch_info
->
power_info
;
/* update OFDM Txpower settings */
for
(
i
=
IL_RATE_6M_INDEX_TABLE
;
i
<=
IL_
RATE_54M_INDEX_TABLE
;
for
(
i
=
RATE_6M_INDEX_TABLE
;
i
<=
RATE_54M_INDEX_TABLE
;
i
++
,
++
power_info
)
{
int
delta_idx
;
...
...
@@ -1490,14 +1490,14 @@ static int il3945_hw_reg_set_new_power(struct il_priv *il,
* ... all CCK power settings for a given channel are the *same*. */
if
(
power_changed
)
{
power
=
ch_info
->
power_info
[
IL_
RATE_12M_INDEX_TABLE
].
ch_info
->
power_info
[
RATE_12M_INDEX_TABLE
].
requested_power
+
IL_CCK_FROM_OFDM_POWER_DIFF
;
/* do all CCK rates' il3945_channel_power_info structures */
for
(
i
=
IL_RATE_1M_INDEX_TABLE
;
i
<=
IL_
RATE_11M_INDEX_TABLE
;
i
++
)
{
for
(
i
=
RATE_1M_INDEX_TABLE
;
i
<=
RATE_11M_INDEX_TABLE
;
i
++
)
{
power_info
->
requested_power
=
power
;
power_info
->
base_power_index
=
ch_info
->
power_info
[
IL_
RATE_12M_INDEX_TABLE
].
ch_info
->
power_info
[
RATE_12M_INDEX_TABLE
].
base_power_index
+
IL_CCK_FROM_OFDM_INDEX_DIFF
;
++
power_info
;
}
...
...
@@ -1574,7 +1574,7 @@ static int il3945_hw_reg_comp_txpower_temp(struct il_priv *il)
ref_temp
);
/* set tx power value for all rates, OFDM and CCK */
for
(
rate_index
=
0
;
rate_index
<
IL_
RATE_COUNT_3945
;
for
(
rate_index
=
0
;
rate_index
<
RATE_COUNT_3945
;
rate_index
++
)
{
int
power_idx
=
ch_info
->
power_info
[
rate_index
].
base_power_index
;
...
...
@@ -1597,7 +1597,7 @@ static int il3945_hw_reg_comp_txpower_temp(struct il_priv *il)
for
(
scan_tbl_index
=
0
;
scan_tbl_index
<
IL_NUM_SCAN_RATES
;
scan_tbl_index
++
)
{
s32
actual_index
=
(
scan_tbl_index
==
0
)
?
IL_RATE_1M_INDEX_TABLE
:
IL_
RATE_6M_INDEX_TABLE
;
RATE_1M_INDEX_TABLE
:
RATE_6M_INDEX_TABLE
;
il3945_hw_reg_set_scan_power
(
il
,
scan_tbl_index
,
actual_index
,
clip_pwrs
,
ch_info
,
a_band
);
...
...
@@ -2010,21 +2010,21 @@ static void il3945_hw_reg_init_channel_groups(struct il_priv *il)
/* fill in channel group's nominal powers for each rate */
for
(
rate_index
=
0
;
rate_index
<
IL_
RATE_COUNT_3945
;
rate_index
++
,
clip_pwrs
++
)
{
rate_index
<
RATE_COUNT_3945
;
rate_index
++
,
clip_pwrs
++
)
{
switch
(
rate_index
)
{
case
IL_
RATE_36M_INDEX_TABLE
:
case
RATE_36M_INDEX_TABLE
:
if
(
i
==
0
)
/* B/G */
*
clip_pwrs
=
satur_pwr
;
else
/* A */
*
clip_pwrs
=
satur_pwr
-
5
;
break
;
case
IL_
RATE_48M_INDEX_TABLE
:
case
RATE_48M_INDEX_TABLE
:
if
(
i
==
0
)
*
clip_pwrs
=
satur_pwr
-
7
;
else
*
clip_pwrs
=
satur_pwr
-
10
;
break
;
case
IL_
RATE_54M_INDEX_TABLE
:
case
RATE_54M_INDEX_TABLE
:
if
(
i
==
0
)
*
clip_pwrs
=
satur_pwr
-
9
;
else
...
...
@@ -2139,7 +2139,7 @@ int il3945_txpower_set_from_eeprom(struct il_priv *il)
}
/* set tx power for CCK rates, based on OFDM 12 Mbit settings*/
pwr_info
=
&
ch_info
->
power_info
[
IL_
RATE_12M_INDEX_TABLE
];
pwr_info
=
&
ch_info
->
power_info
[
RATE_12M_INDEX_TABLE
];
power
=
pwr_info
->
requested_power
+
IL_CCK_FROM_OFDM_POWER_DIFF
;
pwr_index
=
pwr_info
->
power_table_index
+
...
...
@@ -2169,7 +2169,7 @@ int il3945_txpower_set_from_eeprom(struct il_priv *il)
for
(
scan_tbl_index
=
0
;
scan_tbl_index
<
IL_NUM_SCAN_RATES
;
scan_tbl_index
++
)
{
s32
actual_index
=
(
scan_tbl_index
==
0
)
?
IL_RATE_1M_INDEX_TABLE
:
IL_
RATE_6M_INDEX_TABLE
;
RATE_1M_INDEX_TABLE
:
RATE_6M_INDEX_TABLE
;
il3945_hw_reg_set_scan_power
(
il
,
scan_tbl_index
,
actual_index
,
clip_pwrs
,
ch_info
,
a_band
);
}
...
...
@@ -2289,7 +2289,7 @@ static int il3945_manage_ibss_station(struct il_priv *il,
il3945_sync_sta
(
il
,
vif_priv
->
ibss_bssid_sta_id
,
(
il
->
band
==
IEEE80211_BAND_5GHZ
)
?
IL_RATE_6M_PLCP
:
IL_
RATE_1M_PLCP
);
RATE_6M_PLCP
:
RATE_1M_PLCP
);
il3945_rate_scale_init
(
il
->
hw
,
vif_priv
->
ibss_bssid_sta_id
);
return
0
;
...
...
@@ -2326,17 +2326,17 @@ int il3945_init_hw_rate_table(struct il_priv *il)
D_RATE
(
"Select A mode rate scale
\n
"
);
/* If one of the following CCK rates is used,
* have it fall back to the 6M OFDM rate */
for
(
i
=
IL_
RATE_1M_INDEX_TABLE
;
i
<=
IL_
RATE_11M_INDEX_TABLE
;
i
++
)
for
(
i
=
RATE_1M_INDEX_TABLE
;
i
<=
RATE_11M_INDEX_TABLE
;
i
++
)
table
[
i
].
next_rate_index
=
il3945_rates
[
IL_FIRST_OFDM_RATE
].
table_rs_index
;
/* Don't fall back to CCK rates */
table
[
IL_
RATE_12M_INDEX_TABLE
].
next_rate_index
=
IL_
RATE_9M_INDEX_TABLE
;
table
[
RATE_12M_INDEX_TABLE
].
next_rate_index
=
RATE_9M_INDEX_TABLE
;
/* Don't drop out of OFDM rates */
table
[
IL_
RATE_6M_INDEX_TABLE
].
next_rate_index
=
table
[
RATE_6M_INDEX_TABLE
].
next_rate_index
=
il3945_rates
[
IL_FIRST_OFDM_RATE
].
table_rs_index
;
break
;
...
...
@@ -2349,14 +2349,14 @@ int il3945_init_hw_rate_table(struct il_priv *il)
il_is_associated
(
il
))
{
index
=
IL_FIRST_CCK_RATE
;
for
(
i
=
IL_
RATE_6M_INDEX_TABLE
;
i
<=
IL_
RATE_54M_INDEX_TABLE
;
i
++
)
for
(
i
=
RATE_6M_INDEX_TABLE
;
i
<=
RATE_54M_INDEX_TABLE
;
i
++
)
table
[
i
].
next_rate_index
=
il3945_rates
[
index
].
table_rs_index
;
index
=
IL_
RATE_11M_INDEX_TABLE
;
index
=
RATE_11M_INDEX_TABLE
;
/* CCK shouldn't fall back to OFDM... */
table
[
index
].
next_rate_index
=
IL_
RATE_5M_INDEX_TABLE
;
table
[
index
].
next_rate_index
=
RATE_5M_INDEX_TABLE
;
}
break
;
...
...
drivers/net/wireless/iwlegacy/iwl-3945.h
View file @
2eb05816
...
...
@@ -96,7 +96,7 @@ struct il3945_rs_sta {
u8
flush_pending
;
u8
start_rate
;
struct
timer_list
rate_scale_flush
;
struct
il3945_rate_scale_data
win
[
IL_
RATE_COUNT_3945
];
struct
il3945_rate_scale_data
win
[
RATE_COUNT_3945
];
#ifdef CONFIG_MAC80211_DEBUGFS
struct
dentry
*
rs_sta_dbgfs_stats_table_file
;
#endif
...
...
@@ -300,7 +300,7 @@ int il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif);
void
il3945_post_scan
(
struct
il_priv
*
il
);
/* rates */
extern
const
struct
il3945_rate_info
il3945_rates
[
IL_
RATE_COUNT_3945
];
extern
const
struct
il3945_rate_info
il3945_rates
[
RATE_COUNT_3945
];
/* Requires full declaration of il_priv before including */
#include "iwl-io.h"
...
...
drivers/net/wireless/iwlegacy/iwl-4965-lib.c
View file @
2eb05816
...
...
@@ -423,7 +423,7 @@ int il4965_hwrate_to_mac80211_idx(u32 rate_n_flags, enum ieee80211_band band)
}
else
{
if
(
band
==
IEEE80211_BAND_5GHZ
)
band_offset
=
IL_FIRST_OFDM_RATE
;
for
(
idx
=
band_offset
;
idx
<
IL_
RATE_COUNT_LEGACY
;
idx
++
)
for
(
idx
=
band_offset
;
idx
<
RATE_COUNT_LEGACY
;
idx
++
)
if
(
il_rates
[
idx
].
plcp
==
(
rate_n_flags
&
0xFF
))
return
idx
-
band_offset
;
}
...
...
@@ -870,14 +870,14 @@ int il4965_request_scan(struct il_priv *il, struct ieee80211_vif *vif)
RXON_FLG_CHANNEL_MODE_MSK
)
>>
RXON_FLG_CHANNEL_MODE_POS
;
if
(
chan_mod
==
CHANNEL_MODE_PURE_40
)
{
rate
=
IL_
RATE_6M_PLCP
;
rate
=
RATE_6M_PLCP
;
}
else
{
rate
=
IL_
RATE_1M_PLCP
;
rate
=
RATE_1M_PLCP
;
rate_flags
=
RATE_MCS_CCK_MSK
;
}
break
;
case
IEEE80211_BAND_5GHZ
:
rate
=
IL_
RATE_6M_PLCP
;
rate
=
RATE_6M_PLCP
;
break
;
default:
IL_WARN
(
"Invalid scan band
\n
"
);
...
...
drivers/net/wireless/iwlegacy/iwl-4965-rs.c
View file @
2eb05816
...
...
@@ -46,23 +46,23 @@
#define IL_NUMBER_TRY 1
#define IL_HT_NUMBER_TRY 3
#define
IL_
RATE_MAX_WINDOW 62
/* # tx in history win */
#define
IL_
RATE_MIN_FAILURE_TH 6
/* min failures to calc tpt */
#define
IL_
RATE_MIN_SUCCESS_TH 8
/* min successes to calc tpt */
#define RATE_MAX_WINDOW 62
/* # tx in history win */
#define RATE_MIN_FAILURE_TH 6
/* min failures to calc tpt */
#define RATE_MIN_SUCCESS_TH 8
/* min successes to calc tpt */
/* max allowed rate miss before sync LQ cmd */
#define IL_MISSED_RATE_MAX 15
/* max time to accum history 2 seconds */
#define
IL_
RATE_SCALE_FLUSH_INTVL (3*HZ)
#define RATE_SCALE_FLUSH_INTVL (3*HZ)
static
u8
rs_ht_to_legacy
[]
=
{
IL_RATE_6M_INDEX
,
IL_
RATE_6M_INDEX
,
IL_RATE_6M_INDEX
,
IL_
RATE_6M_INDEX
,
IL_
RATE_6M_INDEX
,
IL_RATE_6M_INDEX
,
IL_
RATE_9M_INDEX
,
IL_RATE_12M_INDEX
,
IL_
RATE_18M_INDEX
,
IL_RATE_24M_INDEX
,
IL_
RATE_36M_INDEX
,
IL_RATE_48M_INDEX
,
IL_
RATE_54M_INDEX
RATE_6M_INDEX
,
RATE_6M_INDEX
,
RATE_6M_INDEX
,
RATE_6M_INDEX
,
RATE_6M_INDEX
,
RATE_6M_INDEX
,
RATE_9M_INDEX
,
RATE_12M_INDEX
,
RATE_18M_INDEX
,
RATE_24M_INDEX
,
RATE_36M_INDEX
,
RATE_48M_INDEX
,
RATE_54M_INDEX
};
static
const
u8
ant_toggle_lookup
[]
=
{
...
...
@@ -77,26 +77,26 @@ static const u8 ant_toggle_lookup[] = {
};
#define IL_DECLARE_RATE_INFO(r, s, ip, in, rp, rn, pp, np) \
[
IL_RATE_##r##M_INDEX] = { IL_
RATE_##r##M_PLCP, \
IL_
RATE_SISO_##s##M_PLCP, \
IL_
RATE_MIMO2_##s##M_PLCP,\
IL_
RATE_##r##M_IEEE, \
IL_
RATE_##ip##M_INDEX, \
IL_
RATE_##in##M_INDEX, \
IL_
RATE_##rp##M_INDEX, \
IL_
RATE_##rn##M_INDEX, \
IL_
RATE_##pp##M_INDEX, \
IL_
RATE_##np##M_INDEX }
[
RATE_##r##M_INDEX] = {
RATE_##r##M_PLCP, \
RATE_SISO_##s##M_PLCP, \
RATE_MIMO2_##s##M_PLCP,\
RATE_##r##M_IEEE, \
RATE_##ip##M_INDEX, \
RATE_##in##M_INDEX, \
RATE_##rp##M_INDEX, \
RATE_##rn##M_INDEX, \
RATE_##pp##M_INDEX, \
RATE_##np##M_INDEX }
/*
* Parameter order:
* rate, ht rate, prev rate, next rate, prev tgg rate, next tgg rate
*
* If there isn't a valid next or previous rate then INV is used which
* maps to
IL_
RATE_INVALID
* maps to RATE_INVALID
*
*/
const
struct
il_rate_info
il_rates
[
IL_
RATE_COUNT
]
=
{
const
struct
il_rate_info
il_rates
[
RATE_COUNT
]
=
{
IL_DECLARE_RATE_INFO
(
1
,
INV
,
INV
,
2
,
INV
,
2
,
INV
,
2
),
/* 1mbps */
IL_DECLARE_RATE_INFO
(
2
,
INV
,
1
,
5
,
1
,
5
,
1
,
5
),
/* 2mbps */
IL_DECLARE_RATE_INFO
(
5
,
INV
,
2
,
6
,
2
,
11
,
2
,
11
),
/*5.5mbps */
...
...
@@ -120,12 +120,12 @@ static int il4965_hwrate_to_plcp_idx(u32 rate_n_flags)
if
(
rate_n_flags
&
RATE_MCS_HT_MSK
)
{
idx
=
(
rate_n_flags
&
0xff
);
if
(
idx
>=
IL_
RATE_MIMO2_6M_PLCP
)
idx
=
idx
-
IL_
RATE_MIMO2_6M_PLCP
;
if
(
idx
>=
RATE_MIMO2_6M_PLCP
)
idx
=
idx
-
RATE_MIMO2_6M_PLCP
;
idx
+=
IL_FIRST_OFDM_RATE
;
/* skip 9M not supported in ht*/
if
(
idx
>=
IL_
RATE_9M_INDEX
)
if
(
idx
>=
RATE_9M_INDEX
)
idx
+=
1
;
if
(
idx
>=
IL_FIRST_OFDM_RATE
&&
idx
<=
IL_LAST_OFDM_RATE
)
return
idx
;
...
...
@@ -169,32 +169,32 @@ static void il4965_rs_dbgfs_set_mcs(struct il_lq_sta *lq_sta,
* (2.4 GHz) band.
*/
static
s32
expected_tpt_legacy
[
IL_
RATE_COUNT
]
=
{
static
s32
expected_tpt_legacy
[
RATE_COUNT
]
=
{
7
,
13
,
35
,
58
,
40
,
57
,
72
,
98
,
121
,
154
,
177
,
186
,
0
};
static
s32
expected_tpt_siso20MHz
[
4
][
IL_
RATE_COUNT
]
=
{
static
s32
expected_tpt_siso20MHz
[
4
][
RATE_COUNT
]
=
{
{
0
,
0
,
0
,
0
,
42
,
0
,
76
,
102
,
124
,
158
,
183
,
193
,
202
},
/* Norm */
{
0
,
0
,
0
,
0
,
46
,
0
,
82
,
110
,
132
,
167
,
192
,
202
,
210
},
/* SGI */
{
0
,
0
,
0
,
0
,
48
,
0
,
93
,
135
,
176
,
251
,
319
,
351
,
381
},
/* AGG */
{
0
,
0
,
0
,
0
,
53
,
0
,
102
,
149
,
193
,
275
,
348
,
381
,
413
},
/* AGG+SGI */
};
static
s32
expected_tpt_siso40MHz
[
4
][
IL_
RATE_COUNT
]
=
{
static
s32
expected_tpt_siso40MHz
[
4
][
RATE_COUNT
]
=
{
{
0
,
0
,
0
,
0
,
77
,
0
,
127
,
160
,
184
,
220
,
242
,
250
,
257
},
/* Norm */
{
0
,
0
,
0
,
0
,
83
,
0
,
135
,
169
,
193
,
229
,
250
,
257
,
264
},
/* SGI */
{
0
,
0
,
0
,
0
,
96
,
0
,
182
,
259
,
328
,
451
,
553
,
598
,
640
},
/* AGG */
{
0
,
0
,
0
,
0
,
106
,
0
,
199
,
282
,
357
,
487
,
593
,
640
,
683
},
/* AGG+SGI */
};
static
s32
expected_tpt_mimo2_20MHz
[
4
][
IL_
RATE_COUNT
]
=
{
static
s32
expected_tpt_mimo2_20MHz
[
4
][
RATE_COUNT
]
=
{
{
0
,
0
,
0
,
0
,
74
,
0
,
123
,
155
,
179
,
213
,
235
,
243
,
250
},
/* Norm */
{
0
,
0
,
0
,
0
,
81
,
0
,
131
,
164
,
187
,
221
,
242
,
250
,
256
},
/* SGI */
{
0
,
0
,
0
,
0
,
92
,
0
,
175
,
250
,
317
,
436
,
534
,
578
,
619
},
/* AGG */
{
0
,
0
,
0
,
0
,
102
,
0
,
192
,
273
,
344
,
470
,
573
,
619
,
660
},
/* AGG+SGI*/
};
static
s32
expected_tpt_mimo2_40MHz
[
4
][
IL_
RATE_COUNT
]
=
{
static
s32
expected_tpt_mimo2_40MHz
[
4
][
RATE_COUNT
]
=
{
{
0
,
0
,
0
,
0
,
123
,
0
,
182
,
214
,
235
,
264
,
279
,
285
,
289
},
/* Norm */
{
0
,
0
,
0
,
0
,
131
,
0
,
191
,
222
,
242
,
270
,
284
,
289
,
293
},
/* SGI */
{
0
,
0
,
0
,
0
,
180
,
0
,
327
,
446
,
545
,
708
,
828
,
878
,
922
},
/* AGG */
...
...
@@ -202,7 +202,7 @@ static s32 expected_tpt_mimo2_40MHz[4][IL_RATE_COUNT] = {
};
/* mbps, mcs */
static
const
struct
il_rate_mcs_info
il_rate_mcs
[
IL_
RATE_COUNT
]
=
{
static
const
struct
il_rate_mcs_info
il_rate_mcs
[
RATE_COUNT
]
=
{
{
"1"
,
"BPSK DSSS"
},
{
"2"
,
"QPSK DSSS"
},
{
"5.5"
,
"BPSK CCK"
},
...
...
@@ -418,10 +418,10 @@ static int il4965_rs_collect_tx_data(struct il_scale_tbl_info *tbl,
int
scale_index
,
int
attempts
,
int
successes
)
{
struct
il_rate_scale_data
*
win
=
NULL
;
static
const
u64
mask
=
(((
u64
)
1
)
<<
(
IL_
RATE_MAX_WINDOW
-
1
));
static
const
u64
mask
=
(((
u64
)
1
)
<<
(
RATE_MAX_WINDOW
-
1
));
s32
fail_count
,
tpt
;
if
(
scale_index
<
0
||
scale_index
>=
IL_
RATE_COUNT
)
if
(
scale_index
<
0
||
scale_index
>=
RATE_COUNT
)
return
-
EINVAL
;
/* Select win for current tx bit rate */
...
...
@@ -439,10 +439,10 @@ static int il4965_rs_collect_tx_data(struct il_scale_tbl_info *tbl,
* we keep these bitmaps!).
*/
while
(
attempts
>
0
)
{
if
(
win
->
counter
>=
IL_
RATE_MAX_WINDOW
)
{
if
(
win
->
counter
>=
RATE_MAX_WINDOW
)
{
/* remove earliest */
win
->
counter
=
IL_
RATE_MAX_WINDOW
-
1
;
win
->
counter
=
RATE_MAX_WINDOW
-
1
;
if
(
win
->
data
&
mask
)
{
win
->
data
&=
~
mask
;
...
...
@@ -476,8 +476,8 @@ static int il4965_rs_collect_tx_data(struct il_scale_tbl_info *tbl,
fail_count
=
win
->
counter
-
win
->
success_counter
;
/* Calculate average throughput, if we have enough history. */
if
(
fail_count
>=
IL_
RATE_MIN_FAILURE_TH
||
win
->
success_counter
>=
IL_
RATE_MIN_SUCCESS_TH
)
if
(
fail_count
>=
RATE_MIN_FAILURE_TH
||
win
->
success_counter
>=
RATE_MIN_SUCCESS_TH
)
win
->
average_tpt
=
(
win
->
success_ratio
*
tpt
+
64
)
/
128
;
else
win
->
average_tpt
=
IL_INVALID_VALUE
;
...
...
@@ -557,7 +557,7 @@ static int il4965_rs_get_tbl_info_from_mcs(const u32 rate_n_flags,
memset
(
tbl
,
0
,
sizeof
(
struct
il_scale_tbl_info
));
*
rate_idx
=
il4965_hwrate_to_plcp_idx
(
rate_n_flags
);
if
(
*
rate_idx
==
IL_
RATE_INVALID
)
{
if
(
*
rate_idx
==
RATE_INVALID
)
{
*
rate_idx
=
-
1
;
return
-
EINVAL
;
}
...
...
@@ -591,7 +591,7 @@ static int il4965_rs_get_tbl_info_from_mcs(const u32 rate_n_flags,
mcs
=
il4965_rs_extract_rate
(
rate_n_flags
);
/* SISO */
if
(
mcs
<=
IL_
RATE_SISO_60M_PLCP
)
{
if
(
mcs
<=
RATE_SISO_60M_PLCP
)
{
if
(
il4965_num_of_ant
==
1
)
tbl
->
lq_type
=
LQ_SISO
;
/*else NONE*/
/* MIMO2 */
...
...
@@ -669,8 +669,8 @@ static u16
il4965_rs_get_adjacent_rate
(
struct
il_priv
*
il
,
u8
index
,
u16
rate_mask
,
int
rate_type
)
{
u8
high
=
IL_
RATE_INVALID
;
u8
low
=
IL_
RATE_INVALID
;
u8
high
=
RATE_INVALID
;
u8
low
=
RATE_INVALID
;
/* 802.11A or ht walks to the next literal adjacent rate in
* the rate table */
...
...
@@ -689,7 +689,7 @@ il4965_rs_get_adjacent_rate(struct il_priv *il, u8 index, u16 rate_mask,
/* Find the next rate that is in the rate mask */
i
=
index
+
1
;
for
(
mask
=
(
1
<<
i
);
i
<
IL_
RATE_COUNT
;
i
++
,
mask
<<=
1
)
{
for
(
mask
=
(
1
<<
i
);
i
<
RATE_COUNT
;
i
++
,
mask
<<=
1
)
{
if
(
rate_mask
&
mask
)
{
high
=
i
;
break
;
...
...
@@ -700,9 +700,9 @@ il4965_rs_get_adjacent_rate(struct il_priv *il, u8 index, u16 rate_mask,
}
low
=
index
;
while
(
low
!=
IL_
RATE_INVALID
)
{
while
(
low
!=
RATE_INVALID
)
{
low
=
il_rates
[
low
].
prev_rs
;
if
(
low
==
IL_
RATE_INVALID
)
if
(
low
==
RATE_INVALID
)
break
;
if
(
rate_mask
&
(
1
<<
low
))
break
;
...
...
@@ -710,9 +710,9 @@ il4965_rs_get_adjacent_rate(struct il_priv *il, u8 index, u16 rate_mask,
}
high
=
index
;
while
(
high
!=
IL_
RATE_INVALID
)
{
while
(
high
!=
RATE_INVALID
)
{
high
=
il_rates
[
high
].
next_rs
;
if
(
high
==
IL_
RATE_INVALID
)
if
(
high
==
RATE_INVALID
)
break
;
if
(
rate_mask
&
(
1
<<
high
))
break
;
...
...
@@ -776,7 +776,7 @@ static u32 il4965_rs_get_lower_rate(struct il_lq_sta *lq_sta,
tbl
->
lq_type
);
low
=
high_low
&
0xff
;
if
(
low
==
IL_
RATE_INVALID
)
if
(
low
==
RATE_INVALID
)
low
=
scale_index
;
out:
...
...
@@ -856,7 +856,7 @@ il4965_rs_tx_status(void *il_r, struct ieee80211_supported_band *sband,
/* For HT packets, map MCS to PLCP */
if
(
mac_flags
&
IEEE80211_TX_RC_MCS
)
{
mac_index
&=
RATE_MCS_CODE_MSK
;
/* Remove # of streams */
if
(
mac_index
>=
(
IL_
RATE_9M_INDEX
-
IL_FIRST_OFDM_RATE
))
if
(
mac_index
>=
(
RATE_9M_INDEX
-
IL_FIRST_OFDM_RATE
))
mac_index
++
;
/*
* mac80211 HT index is always zero-indexed; we need to move
...
...
@@ -1023,7 +1023,7 @@ static void il4965_rs_set_expected_tpt_table(struct il_lq_sta *lq_sta,
struct
il_scale_tbl_info
*
tbl
)
{
/* Used to choose among HT tables */
s32
(
*
ht_tbl_pointer
)[
IL_
RATE_COUNT
];
s32
(
*
ht_tbl_pointer
)[
RATE_COUNT
];
/* Check for invalid LQ type */
if
(
WARN_ON_ONCE
(
!
is_legacy
(
tbl
->
lq_type
)
&&
!
is_Ht
(
tbl
->
lq_type
)))
{
...
...
@@ -1089,7 +1089,7 @@ static s32 il4965_rs_get_best_rate(struct il_priv *il,
u16
high_low
;
s8
rate
=
index
;
new_rate
=
high
=
low
=
start_hi
=
IL_
RATE_INVALID
;
new_rate
=
high
=
low
=
start_hi
=
RATE_INVALID
;
for
(;
;)
{
high_low
=
il4965_rs_get_adjacent_rate
(
il
,
rate
,
rate_mask
,
...
...
@@ -1114,16 +1114,16 @@ static s32 il4965_rs_get_best_rate(struct il_priv *il,
* "active" throughput (under perfect conditions).
*/
if
((
100
*
tpt_tbl
[
rate
]
>
lq_sta
->
last_tpt
&&
(
active_sr
>
IL_
RATE_DECREASE_TH
&&
active_sr
<=
IL_
RATE_HIGH_TH
&&
(
active_sr
>
RATE_DECREASE_TH
&&
active_sr
<=
RATE_HIGH_TH
&&
tpt_tbl
[
rate
]
<=
active_tpt
))
||
(
active_sr
>=
IL_
RATE_SCALE_SWITCH
&&
(
active_sr
>=
RATE_SCALE_SWITCH
&&
tpt_tbl
[
rate
]
>
active_tpt
))
{
/* (2nd or later pass)
* If we've already tried to raise the rate, and are
* now trying to lower it, use the higher rate. */
if
(
start_hi
!=
IL_
RATE_INVALID
)
{
if
(
start_hi
!=
RATE_INVALID
)
{
new_rate
=
start_hi
;
break
;
}
...
...
@@ -1131,7 +1131,7 @@ static s32 il4965_rs_get_best_rate(struct il_priv *il,
new_rate
=
rate
;
/* Loop again with lower rate */
if
(
low
!=
IL_
RATE_INVALID
)
if
(
low
!=
RATE_INVALID
)
rate
=
low
;
/* Lower rate not available, use the original */
...
...
@@ -1143,11 +1143,11 @@ static s32 il4965_rs_get_best_rate(struct il_priv *il,
/* (2nd or later pass)
* If we've already tried to lower the rate, and are
* now trying to raise it, use the lower rate. */
if
(
new_rate
!=
IL_
RATE_INVALID
)
if
(
new_rate
!=
RATE_INVALID
)
break
;
/* Loop again with higher rate */
else
if
(
high
!=
IL_
RATE_INVALID
)
{
else
if
(
high
!=
RATE_INVALID
)
{
start_hi
=
high
;
rate
=
high
;
...
...
@@ -1207,7 +1207,7 @@ static int il4965_rs_switch_to_mimo2(struct il_priv *il,
D_RATE
(
"LQ: MIMO2 best rate %d mask %X
\n
"
,
rate
,
rate_mask
);
if
(
rate
==
IL_
RATE_INVALID
||
!
((
1
<<
rate
)
&
rate_mask
))
{
if
(
rate
==
RATE_INVALID
||
!
((
1
<<
rate
)
&
rate_mask
))
{
D_RATE
(
"Can't switch with index %d rate mask %x
\n
"
,
rate
,
rate_mask
);
...
...
@@ -1259,7 +1259,7 @@ static int il4965_rs_switch_to_siso(struct il_priv *il,
rate
=
il4965_rs_get_best_rate
(
il
,
lq_sta
,
tbl
,
rate_mask
,
index
);
D_RATE
(
"LQ: get best rate %d mask %X
\n
"
,
rate
,
rate_mask
);
if
(
rate
==
IL_
RATE_INVALID
||
!
((
1
<<
rate
)
&
rate_mask
))
{
if
(
rate
==
RATE_INVALID
||
!
((
1
<<
rate
)
&
rate_mask
))
{
D_RATE
(
"can not switch with index %d rate mask %x
\n
"
,
rate
,
rate_mask
);
...
...
@@ -1286,7 +1286,7 @@ static int il4965_rs_move_legacy_other(struct il_priv *il,
&
(
lq_sta
->
lq_info
[(
1
-
lq_sta
->
active_tbl
)]);
struct
il_rate_scale_data
*
win
=
&
(
tbl
->
win
[
index
]);
u32
sz
=
(
sizeof
(
struct
il_scale_tbl_info
)
-
(
sizeof
(
struct
il_rate_scale_data
)
*
IL_
RATE_COUNT
));
(
sizeof
(
struct
il_rate_scale_data
)
*
RATE_COUNT
));
u8
start_action
;
u8
valid_tx_ant
=
il
->
hw_params
.
valid_tx_ant
;
u8
tx_chains_num
=
il
->
hw_params
.
tx_chains_num
;
...
...
@@ -1404,7 +1404,7 @@ static int il4965_rs_move_siso_to_other(struct il_priv *il,
struct
il_rate_scale_data
*
win
=
&
(
tbl
->
win
[
index
]);
struct
ieee80211_sta_ht_cap
*
ht_cap
=
&
sta
->
ht_cap
;
u32
sz
=
(
sizeof
(
struct
il_scale_tbl_info
)
-
(
sizeof
(
struct
il_rate_scale_data
)
*
IL_
RATE_COUNT
));
(
sizeof
(
struct
il_rate_scale_data
)
*
RATE_COUNT
));
u8
start_action
;
u8
valid_tx_ant
=
il
->
hw_params
.
valid_tx_ant
;
u8
tx_chains_num
=
il
->
hw_params
.
tx_chains_num
;
...
...
@@ -1526,7 +1526,7 @@ static int il4965_rs_move_mimo2_to_other(struct il_priv *il,
struct
il_rate_scale_data
*
win
=
&
(
tbl
->
win
[
index
]);
struct
ieee80211_sta_ht_cap
*
ht_cap
=
&
sta
->
ht_cap
;
u32
sz
=
(
sizeof
(
struct
il_scale_tbl_info
)
-
(
sizeof
(
struct
il_rate_scale_data
)
*
IL_
RATE_COUNT
));
(
sizeof
(
struct
il_rate_scale_data
)
*
RATE_COUNT
));
u8
start_action
;
u8
valid_tx_ant
=
il
->
hw_params
.
valid_tx_ant
;
u8
tx_chains_num
=
il
->
hw_params
.
tx_chains_num
;
...
...
@@ -1663,7 +1663,7 @@ il4965_rs_stay_in_table(struct il_lq_sta *lq_sta, bool force_search)
flush_interval_passed
=
time_after
(
jiffies
,
(
unsigned
long
)(
lq_sta
->
flush_timer
+
IL_
RATE_SCALE_FLUSH_INTVL
));
RATE_SCALE_FLUSH_INTVL
));
/*
* Check if we should allow search for new modulation mode.
...
...
@@ -1703,7 +1703,7 @@ il4965_rs_stay_in_table(struct il_lq_sta *lq_sta, bool force_search)
D_RATE
(
"LQ: stay in table clear win
\n
"
);
for
(
i
=
0
;
i
<
IL_
RATE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
(
&
(
tbl
->
win
[
i
]));
}
...
...
@@ -1713,7 +1713,7 @@ il4965_rs_stay_in_table(struct il_lq_sta *lq_sta, bool force_search)
* bitmaps and stats in active table (this will become the new
* "search" table). */
if
(
!
lq_sta
->
stay_in_tbl
)
{
for
(
i
=
0
;
i
<
IL_
RATE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
(
&
(
tbl
->
win
[
i
]));
}
...
...
@@ -1752,8 +1752,8 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
struct
ieee80211_conf
*
conf
=
&
hw
->
conf
;
struct
ieee80211_tx_info
*
info
=
IEEE80211_SKB_CB
(
skb
);
struct
ieee80211_hdr
*
hdr
=
(
struct
ieee80211_hdr
*
)
skb
->
data
;
int
low
=
IL_
RATE_INVALID
;
int
high
=
IL_
RATE_INVALID
;
int
low
=
RATE_INVALID
;
int
high
=
RATE_INVALID
;
int
index
;
int
i
;
struct
il_rate_scale_data
*
win
=
NULL
;
...
...
@@ -1884,8 +1884,8 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
* in current association (use new rate found above).
*/
fail_count
=
win
->
counter
-
win
->
success_counter
;
if
(
fail_count
<
IL_
RATE_MIN_FAILURE_TH
&&
win
->
success_counter
<
IL_
RATE_MIN_SUCCESS_TH
)
{
if
(
fail_count
<
RATE_MIN_FAILURE_TH
&&
win
->
success_counter
<
RATE_MIN_SUCCESS_TH
)
{
D_RATE
(
"LQ: still below TH. succ=%d total=%d "
"for index %d
\n
"
,
win
->
success_counter
,
win
->
counter
,
index
);
...
...
@@ -1971,21 +1971,21 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
/* If user set max rate, dont allow higher than user constrain */
if
(
lq_sta
->
max_rate_idx
!=
-
1
&&
lq_sta
->
max_rate_idx
<
high
)
high
=
IL_
RATE_INVALID
;
high
=
RATE_INVALID
;
sr
=
win
->
success_ratio
;
/* Collect measured throughputs for current and adjacent rates */
current_tpt
=
win
->
average_tpt
;
if
(
low
!=
IL_
RATE_INVALID
)
if
(
low
!=
RATE_INVALID
)
low_tpt
=
tbl
->
win
[
low
].
average_tpt
;
if
(
high
!=
IL_
RATE_INVALID
)
if
(
high
!=
RATE_INVALID
)
high_tpt
=
tbl
->
win
[
high
].
average_tpt
;
scale_action
=
0
;
/* Too many failures, decrease rate */
if
(
sr
<=
IL_
RATE_DECREASE_TH
||
current_tpt
==
0
)
{
if
(
sr
<=
RATE_DECREASE_TH
||
current_tpt
==
0
)
{
D_RATE
(
"decrease rate because of low success_ratio
\n
"
);
scale_action
=
-
1
;
...
...
@@ -1994,9 +1994,9 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
}
else
if
(
low_tpt
==
IL_INVALID_VALUE
&&
high_tpt
==
IL_INVALID_VALUE
)
{
if
(
high
!=
IL_RATE_INVALID
&&
sr
>=
IL_
RATE_INCREASE_TH
)
if
(
high
!=
RATE_INVALID
&&
sr
>=
RATE_INCREASE_TH
)
scale_action
=
1
;
else
if
(
low
!=
IL_
RATE_INVALID
)
else
if
(
low
!=
RATE_INVALID
)
scale_action
=
0
;
}
...
...
@@ -2013,7 +2013,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
if
(
high_tpt
!=
IL_INVALID_VALUE
)
{
/* Higher rate has better throughput */
if
(
high_tpt
>
current_tpt
&&
sr
>=
IL_
RATE_INCREASE_TH
)
{
sr
>=
RATE_INCREASE_TH
)
{
scale_action
=
1
;
}
else
{
scale_action
=
0
;
...
...
@@ -2026,7 +2026,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
D_RATE
(
"decrease rate because of low tpt
\n
"
);
scale_action
=
-
1
;
}
else
if
(
sr
>=
IL_
RATE_INCREASE_TH
)
{
}
else
if
(
sr
>=
RATE_INCREASE_TH
)
{
scale_action
=
1
;
}
}
...
...
@@ -2034,14 +2034,14 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
/* Sanity check; asked for decrease, but success rate or throughput
* has been good at old rate. Don't change it. */
if
(
scale_action
==
-
1
&&
low
!=
IL_
RATE_INVALID
&&
(
sr
>
IL_
RATE_HIGH_TH
||
current_tpt
>
100
*
tbl
->
expected_tpt
[
low
]))
if
(
scale_action
==
-
1
&&
low
!=
RATE_INVALID
&&
(
sr
>
RATE_HIGH_TH
||
current_tpt
>
100
*
tbl
->
expected_tpt
[
low
]))
scale_action
=
0
;
switch
(
scale_action
)
{
case
-
1
:
/* Decrease starting rate, update uCode's rate table */
if
(
low
!=
IL_
RATE_INVALID
)
{
if
(
low
!=
RATE_INVALID
)
{
update_lq
=
1
;
index
=
low
;
}
...
...
@@ -2049,7 +2049,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
break
;
case
1
:
/* Increase starting rate, update uCode's rate table */
if
(
high
!=
IL_
RATE_INVALID
)
{
if
(
high
!=
RATE_INVALID
)
{
update_lq
=
1
;
index
=
high
;
}
...
...
@@ -2102,7 +2102,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
if
(
lq_sta
->
search_better_tbl
)
{
/* Access the "search" table, clear its history. */
tbl
=
&
(
lq_sta
->
lq_info
[(
1
-
lq_sta
->
active_tbl
)]);
for
(
i
=
0
;
i
<
IL_
RATE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
(
&
(
tbl
->
win
[
i
]));
...
...
@@ -2208,7 +2208,7 @@ static void il4965_rs_initialize_lq(struct il_priv *il,
tbl
=
&
(
lq_sta
->
lq_info
[
active_tbl
]);
if
(
i
<
0
||
i
>=
IL_
RATE_COUNT
)
if
(
i
<
0
||
i
>=
RATE_COUNT
)
i
=
0
;
rate
=
il_rates
[
i
].
plcp
;
...
...
@@ -2251,7 +2251,7 @@ il4965_rs_get_rate(void *il_r, struct ieee80211_sta *sta, void *il_sta,
lq_sta
->
max_rate_idx
!=
-
1
)
lq_sta
->
max_rate_idx
+=
IL_FIRST_OFDM_RATE
;
if
(
lq_sta
->
max_rate_idx
<
0
||
lq_sta
->
max_rate_idx
>=
IL_
RATE_COUNT
)
lq_sta
->
max_rate_idx
>=
RATE_COUNT
)
lq_sta
->
max_rate_idx
=
-
1
;
}
...
...
@@ -2275,7 +2275,7 @@ il4965_rs_get_rate(void *il_r, struct ieee80211_sta *sta, void *il_sta,
/* 6M and 9M shared same MCS index */
rate_idx
=
(
rate_idx
>
0
)
?
(
rate_idx
-
1
)
:
0
;
if
(
il4965_rs_extract_rate
(
lq_sta
->
last_rate_n_flags
)
>=
IL_
RATE_MIMO2_6M_PLCP
)
RATE_MIMO2_6M_PLCP
)
rate_idx
=
rate_idx
+
MCS_INDEX_PER_STREAM
;
info
->
control
.
rates
[
0
].
flags
=
IEEE80211_TX_RC_MCS
;
if
(
lq_sta
->
last_rate_n_flags
&
RATE_MCS_SGI_MSK
)
...
...
@@ -2292,7 +2292,7 @@ il4965_rs_get_rate(void *il_r, struct ieee80211_sta *sta, void *il_sta,
IEEE80211_TX_RC_GREEN_FIELD
;
}
else
{
/* Check for invalid rates */
if
(
rate_idx
<
0
||
rate_idx
>=
IL_
RATE_COUNT_LEGACY
||
if
(
rate_idx
<
0
||
rate_idx
>=
RATE_COUNT_LEGACY
||
(
sband
->
band
==
IEEE80211_BAND_5GHZ
&&
rate_idx
<
IL_FIRST_OFDM_RATE
))
rate_idx
=
rate_lowest_index
(
sband
,
sta
);
...
...
@@ -2345,14 +2345,14 @@ il4965_rs_rate_init(struct il_priv *il,
lq_sta
->
lq
.
sta_id
=
sta_id
;
for
(
j
=
0
;
j
<
LQ_SIZE
;
j
++
)
for
(
i
=
0
;
i
<
IL_
RATE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
(
&
lq_sta
->
lq_info
[
j
].
win
[
i
]);
lq_sta
->
flush_timer
=
0
;
lq_sta
->
supp_rates
=
sta
->
supp_rates
[
sband
->
band
];
for
(
j
=
0
;
j
<
LQ_SIZE
;
j
++
)
for
(
i
=
0
;
i
<
IL_
RATE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
(
&
lq_sta
->
lq_info
[
j
].
win
[
i
]);
...
...
@@ -2745,7 +2745,7 @@ static ssize_t il4965_rs_sta_dbgfs_stats_table_read(struct file *file,
lq_sta
->
lq_info
[
i
].
is_dup
,
lq_sta
->
is_green
,
lq_sta
->
lq_info
[
i
].
current_rate
);
for
(
j
=
0
;
j
<
IL_
RATE_COUNT
;
j
++
)
{
for
(
j
=
0
;
j
<
RATE_COUNT
;
j
++
)
{
desc
+=
sprintf
(
buff
+
desc
,
"counter=%d success=%d %%=%d
\n
"
,
lq_sta
->
lq_info
[
i
].
win
[
j
].
counter
,
...
...
drivers/net/wireless/iwlegacy/iwl-4965-sta.c
View file @
2eb05816
...
...
@@ -50,9 +50,9 @@ il4965_sta_alloc_lq(struct il_priv *il, u8 sta_id)
/* Set up the rate scaling to start at selected rate, fall back
* all the way down to 1M in IEEE order, and then spin on 1M */
if
(
il
->
band
==
IEEE80211_BAND_5GHZ
)
r
=
IL_
RATE_6M_INDEX
;
r
=
RATE_6M_INDEX
;
else
r
=
IL_
RATE_1M_INDEX
;
r
=
RATE_1M_INDEX
;
if
(
r
>=
IL_FIRST_CCK_RATE
&&
r
<=
IL_LAST_CCK_RATE
)
rate_flags
|=
RATE_MCS_CCK_MSK
;
...
...
drivers/net/wireless/iwlegacy/iwl-4965-tx.c
View file @
2eb05816
...
...
@@ -196,7 +196,7 @@ static void il4965_tx_cmd_build_rate(struct il_priv *il,
*/
rate_idx
=
info
->
control
.
rates
[
0
].
idx
;
if
((
info
->
control
.
rates
[
0
].
flags
&
IEEE80211_TX_RC_MCS
)
||
rate_idx
<
0
||
rate_idx
>
IL_
RATE_COUNT_LEGACY
)
rate_idx
<
0
||
rate_idx
>
RATE_COUNT_LEGACY
)
rate_idx
=
rate_lowest_index
(
&
il
->
bands
[
info
->
band
],
info
->
control
.
sta
);
/* For 5 GHZ band, remap mac80211 rate indices into driver indices */
...
...
drivers/net/wireless/iwlegacy/iwl-commands.h
View file @
2eb05816
...
...
@@ -2094,7 +2094,7 @@ struct il_link_quality_cmd {
* 4965 devices works its way through table when retrying Tx.
*/
struct
{
__le32
rate_n_flags
;
/* RATE_MCS_*,
IL_
RATE_* */
__le32
rate_n_flags
;
/* RATE_MCS_*, RATE_* */
}
rs_table
[
LINK_QUAL_MAX_RETRY_NUM
];
__le32
reserved2
;
}
__packed
;
...
...
drivers/net/wireless/iwlegacy/iwl-core.c
View file @
2eb05816
...
...
@@ -174,7 +174,7 @@ int il_init_geos(struct il_priv *il)
if
(
!
channels
)
return
-
ENOMEM
;
rates
=
kzalloc
((
sizeof
(
struct
ieee80211_rate
)
*
IL_
RATE_COUNT_LEGACY
),
rates
=
kzalloc
((
sizeof
(
struct
ieee80211_rate
)
*
RATE_COUNT_LEGACY
),
GFP_KERNEL
);
if
(
!
rates
)
{
kfree
(
channels
);
...
...
@@ -186,7 +186,7 @@ int il_init_geos(struct il_priv *il)
sband
->
channels
=
&
channels
[
ARRAY_SIZE
(
il_eeprom_band_1
)];
/* just OFDM */
sband
->
bitrates
=
&
rates
[
IL_FIRST_OFDM_RATE
];
sband
->
n_bitrates
=
IL_
RATE_COUNT_LEGACY
-
IL_FIRST_OFDM_RATE
;
sband
->
n_bitrates
=
RATE_COUNT_LEGACY
-
IL_FIRST_OFDM_RATE
;
if
(
il
->
cfg
->
sku
&
IL_SKU_N
)
il_init_ht_hw_capab
(
il
,
&
sband
->
ht_cap
,
...
...
@@ -196,7 +196,7 @@ int il_init_geos(struct il_priv *il)
sband
->
channels
=
channels
;
/* OFDM & CCK */
sband
->
bitrates
=
rates
;
sband
->
n_bitrates
=
IL_
RATE_COUNT_LEGACY
;
sband
->
n_bitrates
=
RATE_COUNT_LEGACY
;
if
(
il
->
cfg
->
sku
&
IL_SKU_N
)
il_init_ht_hw_capab
(
il
,
&
sband
->
ht_cap
,
...
...
@@ -454,8 +454,8 @@ il_check_rxon_cmd(struct il_priv *il, struct il_rxon_context *ctx)
}
/* make sure basic rates 6Mbps and 1Mbps are supported */
if
((
rxon
->
ofdm_basic_rates
&
IL_
RATE_6M_MASK
)
==
0
&&
(
rxon
->
cck_basic_rates
&
IL_
RATE_1M_MASK
)
==
0
)
{
if
((
rxon
->
ofdm_basic_rates
&
RATE_6M_MASK
)
==
0
&&
(
rxon
->
cck_basic_rates
&
RATE_1M_MASK
)
==
0
)
{
IL_WARN
(
"neither 1 nor 6 are basic
\n
"
);
error
=
true
;
}
...
...
@@ -566,9 +566,9 @@ u8 il_get_lowest_plcp(struct il_priv *il,
* the beacon skb from mac80211.
*/
if
(
ctx
->
staging
.
flags
&
RXON_FLG_BAND_24G_MSK
)
return
IL_
RATE_1M_PLCP
;
return
RATE_1M_PLCP
;
else
return
IL_
RATE_6M_PLCP
;
return
RATE_6M_PLCP
;
}
EXPORT_SYMBOL
(
il_get_lowest_plcp
);
...
...
@@ -835,7 +835,7 @@ void il_set_rate(struct il_priv *il)
for
(
i
=
0
;
i
<
hw
->
n_bitrates
;
i
++
)
{
rate
=
&
(
hw
->
bitrates
[
i
]);
if
(
rate
->
hw_value
<
IL_
RATE_COUNT_LEGACY
)
if
(
rate
->
hw_value
<
RATE_COUNT_LEGACY
)
il
->
active_rate
|=
(
1
<<
rate
->
hw_value
);
}
...
...
drivers/net/wireless/iwlegacy/iwl-legacy-rs.h
View file @
2eb05816
...
...
@@ -28,10 +28,10 @@
#define __il_rs_h__
struct
il_rate_info
{
u8
plcp
;
/* uCode API:
IL_
RATE_6M_PLCP, etc. */
u8
plcp_siso
;
/* uCode API:
IL_
RATE_SISO_6M_PLCP, etc. */
u8
plcp_mimo2
;
/* uCode API:
IL_
RATE_MIMO2_6M_PLCP, etc. */
u8
ieee
;
/* MAC header:
IL_
RATE_6M_IEEE, etc. */
u8
plcp
;
/* uCode API: RATE_6M_PLCP, etc. */
u8
plcp_siso
;
/* uCode API: RATE_SISO_6M_PLCP, etc. */
u8
plcp_mimo2
;
/* uCode API: RATE_MIMO2_6M_PLCP, etc. */
u8
ieee
;
/* MAC header: RATE_6M_IEEE, etc. */
u8
prev_ieee
;
/* previous rate in IEEE speeds */
u8
next_ieee
;
/* next rate in IEEE speeds */
u8
prev_rs
;
/* previous rate used in rs algo */
...
...
@@ -41,8 +41,8 @@ struct il_rate_info {
};
struct
il3945_rate_info
{
u8
plcp
;
/* uCode API:
IL_
RATE_6M_PLCP, etc. */
u8
ieee
;
/* MAC header:
IL_
RATE_6M_IEEE, etc. */
u8
plcp
;
/* uCode API: RATE_6M_PLCP, etc. */
u8
ieee
;
/* MAC header: RATE_6M_IEEE, etc. */
u8
prev_ieee
;
/* previous rate in IEEE speeds */
u8
next_ieee
;
/* next rate in IEEE speeds */
u8
prev_rs
;
/* previous rate used in rs algo */
...
...
@@ -56,153 +56,153 @@ struct il3945_rate_info {
/*
* These serve as indexes into
* struct il_rate_info il_rates[
IL_
RATE_COUNT];
* struct il_rate_info il_rates[RATE_COUNT];
*/
enum
{
IL_
RATE_1M_INDEX
=
0
,
IL_
RATE_2M_INDEX
,
IL_
RATE_5M_INDEX
,
IL_
RATE_11M_INDEX
,
IL_
RATE_6M_INDEX
,
IL_
RATE_9M_INDEX
,
IL_
RATE_12M_INDEX
,
IL_
RATE_18M_INDEX
,
IL_
RATE_24M_INDEX
,
IL_
RATE_36M_INDEX
,
IL_
RATE_48M_INDEX
,
IL_
RATE_54M_INDEX
,
IL_
RATE_60M_INDEX
,
IL_
RATE_COUNT
,
IL_RATE_COUNT_LEGACY
=
IL_
RATE_COUNT
-
1
,
/* Excluding 60M */
IL_RATE_COUNT_3945
=
IL_
RATE_COUNT
-
1
,
IL_RATE_INVM_INDEX
=
IL_
RATE_COUNT
,
IL_RATE_INVALID
=
IL_
RATE_COUNT
,
RATE_1M_INDEX
=
0
,
RATE_2M_INDEX
,
RATE_5M_INDEX
,
RATE_11M_INDEX
,
RATE_6M_INDEX
,
RATE_9M_INDEX
,
RATE_12M_INDEX
,
RATE_18M_INDEX
,
RATE_24M_INDEX
,
RATE_36M_INDEX
,
RATE_48M_INDEX
,
RATE_54M_INDEX
,
RATE_60M_INDEX
,
RATE_COUNT
,
RATE_COUNT_LEGACY
=
RATE_COUNT
-
1
,
/* Excluding 60M */
RATE_COUNT_3945
=
RATE_COUNT
-
1
,
RATE_INVM_INDEX
=
RATE_COUNT
,
RATE_INVALID
=
RATE_COUNT
,
};
enum
{
IL_
RATE_6M_INDEX_TABLE
=
0
,
IL_
RATE_9M_INDEX_TABLE
,
IL_
RATE_12M_INDEX_TABLE
,
IL_
RATE_18M_INDEX_TABLE
,
IL_
RATE_24M_INDEX_TABLE
,
IL_
RATE_36M_INDEX_TABLE
,
IL_
RATE_48M_INDEX_TABLE
,
IL_
RATE_54M_INDEX_TABLE
,
IL_
RATE_1M_INDEX_TABLE
,
IL_
RATE_2M_INDEX_TABLE
,
IL_
RATE_5M_INDEX_TABLE
,
IL_
RATE_11M_INDEX_TABLE
,
IL_RATE_INVM_INDEX_TABLE
=
IL_
RATE_INVM_INDEX
-
1
,
RATE_6M_INDEX_TABLE
=
0
,
RATE_9M_INDEX_TABLE
,
RATE_12M_INDEX_TABLE
,
RATE_18M_INDEX_TABLE
,
RATE_24M_INDEX_TABLE
,
RATE_36M_INDEX_TABLE
,
RATE_48M_INDEX_TABLE
,
RATE_54M_INDEX_TABLE
,
RATE_1M_INDEX_TABLE
,
RATE_2M_INDEX_TABLE
,
RATE_5M_INDEX_TABLE
,
RATE_11M_INDEX_TABLE
,
RATE_INVM_INDEX_TABLE
=
RATE_INVM_INDEX
-
1
,
};
enum
{
IL_FIRST_OFDM_RATE
=
IL_
RATE_6M_INDEX
,
IL39_LAST_OFDM_RATE
=
IL_
RATE_54M_INDEX
,
IL_LAST_OFDM_RATE
=
IL_
RATE_60M_INDEX
,
IL_FIRST_CCK_RATE
=
IL_
RATE_1M_INDEX
,
IL_LAST_CCK_RATE
=
IL_
RATE_11M_INDEX
,
IL_FIRST_OFDM_RATE
=
RATE_6M_INDEX
,
IL39_LAST_OFDM_RATE
=
RATE_54M_INDEX
,
IL_LAST_OFDM_RATE
=
RATE_60M_INDEX
,
IL_FIRST_CCK_RATE
=
RATE_1M_INDEX
,
IL_LAST_CCK_RATE
=
RATE_11M_INDEX
,
};
/* #define vs. enum to keep from defaulting to 'large integer' */
#define
IL_RATE_6M_MASK (1 << IL_
RATE_6M_INDEX)
#define
IL_RATE_9M_MASK (1 << IL_
RATE_9M_INDEX)
#define
IL_RATE_12M_MASK (1 << IL_
RATE_12M_INDEX)
#define
IL_RATE_18M_MASK (1 << IL_
RATE_18M_INDEX)
#define
IL_RATE_24M_MASK (1 << IL_
RATE_24M_INDEX)
#define
IL_RATE_36M_MASK (1 << IL_
RATE_36M_INDEX)
#define
IL_RATE_48M_MASK (1 << IL_
RATE_48M_INDEX)
#define
IL_RATE_54M_MASK (1 << IL_
RATE_54M_INDEX)
#define
IL_RATE_60M_MASK (1 << IL_
RATE_60M_INDEX)
#define
IL_RATE_1M_MASK (1 << IL_
RATE_1M_INDEX)
#define
IL_RATE_2M_MASK (1 << IL_
RATE_2M_INDEX)
#define
IL_RATE_5M_MASK (1 << IL_
RATE_5M_INDEX)
#define
IL_RATE_11M_MASK (1 << IL_
RATE_11M_INDEX)
#define
RATE_6M_MASK (1 <<
RATE_6M_INDEX)
#define
RATE_9M_MASK (1 <<
RATE_9M_INDEX)
#define
RATE_12M_MASK (1 <<
RATE_12M_INDEX)
#define
RATE_18M_MASK (1 <<
RATE_18M_INDEX)
#define
RATE_24M_MASK (1 <<
RATE_24M_INDEX)
#define
RATE_36M_MASK (1 <<
RATE_36M_INDEX)
#define
RATE_48M_MASK (1 <<
RATE_48M_INDEX)
#define
RATE_54M_MASK (1 <<
RATE_54M_INDEX)
#define
RATE_60M_MASK (1 <<
RATE_60M_INDEX)
#define
RATE_1M_MASK (1 <<
RATE_1M_INDEX)
#define
RATE_2M_MASK (1 <<
RATE_2M_INDEX)
#define
RATE_5M_MASK (1 <<
RATE_5M_INDEX)
#define
RATE_11M_MASK (1 <<
RATE_11M_INDEX)
/* uCode API values for legacy bit rates, both OFDM and CCK */
enum
{
IL_
RATE_6M_PLCP
=
13
,
IL_
RATE_9M_PLCP
=
15
,
IL_
RATE_12M_PLCP
=
5
,
IL_
RATE_18M_PLCP
=
7
,
IL_
RATE_24M_PLCP
=
9
,
IL_
RATE_36M_PLCP
=
11
,
IL_
RATE_48M_PLCP
=
1
,
IL_
RATE_54M_PLCP
=
3
,
IL_
RATE_60M_PLCP
=
3
,
/*FIXME:RS:should be removed*/
IL_
RATE_1M_PLCP
=
10
,
IL_
RATE_2M_PLCP
=
20
,
IL_
RATE_5M_PLCP
=
55
,
IL_
RATE_11M_PLCP
=
110
,
/*FIXME:RS:add
IL_
RATE_LEGACY_INVM_PLCP = 0,*/
RATE_6M_PLCP
=
13
,
RATE_9M_PLCP
=
15
,
RATE_12M_PLCP
=
5
,
RATE_18M_PLCP
=
7
,
RATE_24M_PLCP
=
9
,
RATE_36M_PLCP
=
11
,
RATE_48M_PLCP
=
1
,
RATE_54M_PLCP
=
3
,
RATE_60M_PLCP
=
3
,
/*FIXME:RS:should be removed*/
RATE_1M_PLCP
=
10
,
RATE_2M_PLCP
=
20
,
RATE_5M_PLCP
=
55
,
RATE_11M_PLCP
=
110
,
/*FIXME:RS:add RATE_LEGACY_INVM_PLCP = 0,*/
};
/* uCode API values for OFDM high-throughput (HT) bit rates */
enum
{
IL_
RATE_SISO_6M_PLCP
=
0
,
IL_
RATE_SISO_12M_PLCP
=
1
,
IL_
RATE_SISO_18M_PLCP
=
2
,
IL_
RATE_SISO_24M_PLCP
=
3
,
IL_
RATE_SISO_36M_PLCP
=
4
,
IL_
RATE_SISO_48M_PLCP
=
5
,
IL_
RATE_SISO_54M_PLCP
=
6
,
IL_
RATE_SISO_60M_PLCP
=
7
,
IL_
RATE_MIMO2_6M_PLCP
=
0x8
,
IL_
RATE_MIMO2_12M_PLCP
=
0x9
,
IL_
RATE_MIMO2_18M_PLCP
=
0xa
,
IL_
RATE_MIMO2_24M_PLCP
=
0xb
,
IL_
RATE_MIMO2_36M_PLCP
=
0xc
,
IL_
RATE_MIMO2_48M_PLCP
=
0xd
,
IL_
RATE_MIMO2_54M_PLCP
=
0xe
,
IL_
RATE_MIMO2_60M_PLCP
=
0xf
,
IL_
RATE_SISO_INVM_PLCP
,
IL_RATE_MIMO2_INVM_PLCP
=
IL_
RATE_SISO_INVM_PLCP
,
RATE_SISO_6M_PLCP
=
0
,
RATE_SISO_12M_PLCP
=
1
,
RATE_SISO_18M_PLCP
=
2
,
RATE_SISO_24M_PLCP
=
3
,
RATE_SISO_36M_PLCP
=
4
,
RATE_SISO_48M_PLCP
=
5
,
RATE_SISO_54M_PLCP
=
6
,
RATE_SISO_60M_PLCP
=
7
,
RATE_MIMO2_6M_PLCP
=
0x8
,
RATE_MIMO2_12M_PLCP
=
0x9
,
RATE_MIMO2_18M_PLCP
=
0xa
,
RATE_MIMO2_24M_PLCP
=
0xb
,
RATE_MIMO2_36M_PLCP
=
0xc
,
RATE_MIMO2_48M_PLCP
=
0xd
,
RATE_MIMO2_54M_PLCP
=
0xe
,
RATE_MIMO2_60M_PLCP
=
0xf
,
RATE_SISO_INVM_PLCP
,
RATE_MIMO2_INVM_PLCP
=
RATE_SISO_INVM_PLCP
,
};
/* MAC header values for bit rates */
enum
{
IL_
RATE_6M_IEEE
=
12
,
IL_
RATE_9M_IEEE
=
18
,
IL_
RATE_12M_IEEE
=
24
,
IL_
RATE_18M_IEEE
=
36
,
IL_
RATE_24M_IEEE
=
48
,
IL_
RATE_36M_IEEE
=
72
,
IL_
RATE_48M_IEEE
=
96
,
IL_
RATE_54M_IEEE
=
108
,
IL_
RATE_60M_IEEE
=
120
,
IL_
RATE_1M_IEEE
=
2
,
IL_
RATE_2M_IEEE
=
4
,
IL_
RATE_5M_IEEE
=
11
,
IL_
RATE_11M_IEEE
=
22
,
RATE_6M_IEEE
=
12
,
RATE_9M_IEEE
=
18
,
RATE_12M_IEEE
=
24
,
RATE_18M_IEEE
=
36
,
RATE_24M_IEEE
=
48
,
RATE_36M_IEEE
=
72
,
RATE_48M_IEEE
=
96
,
RATE_54M_IEEE
=
108
,
RATE_60M_IEEE
=
120
,
RATE_1M_IEEE
=
2
,
RATE_2M_IEEE
=
4
,
RATE_5M_IEEE
=
11
,
RATE_11M_IEEE
=
22
,
};
#define IL_CCK_BASIC_RATES_MASK \
(
IL_
RATE_1M_MASK | \
IL_
RATE_2M_MASK)
(RATE_1M_MASK | \
RATE_2M_MASK)
#define IL_CCK_RATES_MASK \
(IL_CCK_BASIC_RATES_MASK | \
IL_
RATE_5M_MASK | \
IL_
RATE_11M_MASK)
RATE_5M_MASK | \
RATE_11M_MASK)
#define IL_OFDM_BASIC_RATES_MASK \
(
IL_
RATE_6M_MASK | \
IL_
RATE_12M_MASK | \
IL_
RATE_24M_MASK)
(RATE_6M_MASK | \
RATE_12M_MASK | \
RATE_24M_MASK)
#define IL_OFDM_RATES_MASK \
(IL_OFDM_BASIC_RATES_MASK | \
IL_
RATE_9M_MASK | \
IL_
RATE_18M_MASK | \
IL_
RATE_36M_MASK | \
IL_
RATE_48M_MASK | \
IL_
RATE_54M_MASK)
RATE_9M_MASK | \
RATE_18M_MASK | \
RATE_36M_MASK | \
RATE_48M_MASK | \
RATE_54M_MASK)
#define IL_BASIC_RATES_MASK \
(IL_OFDM_BASIC_RATES_MASK | \
IL_CCK_BASIC_RATES_MASK)
#define
IL_RATES_MASK ((1 << IL_
RATE_COUNT) - 1)
#define
IL_RATES_MASK_3945 ((1 << IL_
RATE_COUNT_3945) - 1)
#define
RATES_MASK ((1 <<
RATE_COUNT) - 1)
#define
RATES_MASK_3945 ((1 <<
RATE_COUNT_3945) - 1)
#define IL_INVALID_VALUE -1
...
...
@@ -221,10 +221,10 @@ enum {
/* Success ratio (ACKed / attempted tx frames) values (perfect is 128 * 100) */
#define IL_RS_GOOD_RATIO 12800
/* 100% */
#define
IL_
RATE_SCALE_SWITCH 10880
/* 85% */
#define
IL_
RATE_HIGH_TH 10880
/* 85% */
#define
IL_
RATE_INCREASE_TH 6400
/* 50% */
#define
IL_
RATE_DECREASE_TH 1920
/* 15% */
#define RATE_SCALE_SWITCH 10880
/* 85% */
#define RATE_HIGH_TH 10880
/* 85% */
#define RATE_INCREASE_TH 6400
/* 50% */
#define RATE_DECREASE_TH 1920
/* 15% */
/* possible actions when in legacy mode */
#define IL_LEGACY_SWITCH_ANTENNA1 0
...
...
@@ -268,7 +268,7 @@ enum {
#define TID_MAX_TIME_DIFF ((TID_QUEUE_MAX_SIZE - 1) * TID_QUEUE_CELL_SPACING)
#define TIME_WRAP_AROUND(x, y) (((y) > (x)) ? (y) - (x) : (0-(x)) + (y))
extern
const
struct
il_rate_info
il_rates
[
IL_
RATE_COUNT
];
extern
const
struct
il_rate_info
il_rates
[
RATE_COUNT
];
enum
il_table_type
{
LQ_NONE
,
...
...
@@ -331,7 +331,7 @@ struct il_scale_tbl_info {
u8
max_search
;
/* maximun number of tables we can search */
s32
*
expected_tpt
;
/* throughput metrics; expected_tpt_G, etc. */
u32
current_rate
;
/* rate_n_flags, uCode API format */
struct
il_rate_scale_data
win
[
IL_
RATE_COUNT
];
/* rate histories */
struct
il_rate_scale_data
win
[
RATE_COUNT
];
/* rate histories */
};
struct
il_traffic_load
{
...
...
@@ -371,7 +371,7 @@ struct il_lq_sta {
u8
is_dup
;
enum
ieee80211_band
band
;
/* The following are bitmaps of rates;
IL_
RATE_6M_MASK, etc. */
/* The following are bitmaps of rates; RATE_6M_MASK, etc. */
u32
supp_rates
;
u16
active_legacy_rate
;
u16
active_siso_rate
;
...
...
drivers/net/wireless/iwlegacy/iwl-sta.c
View file @
2eb05816
...
...
@@ -314,7 +314,7 @@ u8 il_prep_station(struct il_priv *il, struct il_rxon_context *ctx,
/* 3945 only */
rate
=
(
il
->
band
==
IEEE80211_BAND_5GHZ
)
?
IL_RATE_6M_PLCP
:
IL_
RATE_1M_PLCP
;
RATE_6M_PLCP
:
RATE_1M_PLCP
;
/* Turn on both antennas for the station... */
station
->
sta
.
rate_n_flags
=
cpu_to_le16
(
rate
|
RATE_MCS_ANT_AB_MSK
);
...
...
drivers/net/wireless/iwlegacy/iwl3945-base.c
View file @
2eb05816
...
...
@@ -1654,7 +1654,7 @@ static void il3945_init_hw_rates(struct il_priv *il,
{
int
i
;
for
(
i
=
0
;
i
<
IL_
RATE_COUNT_LEGACY
;
i
++
)
{
for
(
i
=
0
;
i
<
RATE_COUNT_LEGACY
;
i
++
)
{
rates
[
i
].
bitrate
=
il3945_rates
[
i
].
ieee
*
5
;
rates
[
i
].
hw_value
=
i
;
/* Rate scaling will work on indexes */
rates
[
i
].
hw_value_short
=
i
;
...
...
@@ -2239,7 +2239,7 @@ static void il3945_alive_start(struct il_priv *il)
ieee80211_wake_queues
(
il
->
hw
);
il
->
active_rate
=
IL_
RATES_MASK_3945
;
il
->
active_rate
=
RATES_MASK_3945
;
il_power_update_mode
(
il
,
true
);
...
...
@@ -2642,11 +2642,11 @@ int il3945_request_scan(struct il_priv *il, struct ieee80211_vif *vif)
switch
(
il
->
scan_band
)
{
case
IEEE80211_BAND_2GHZ
:
scan
->
flags
=
RXON_FLG_BAND_24G_MSK
|
RXON_FLG_AUTO_DETECT_MSK
;
scan
->
tx_cmd
.
rate
=
IL_
RATE_1M_PLCP
;
scan
->
tx_cmd
.
rate
=
RATE_1M_PLCP
;
band
=
IEEE80211_BAND_2GHZ
;
break
;
case
IEEE80211_BAND_5GHZ
:
scan
->
tx_cmd
.
rate
=
IL_
RATE_6M_PLCP
;
scan
->
tx_cmd
.
rate
=
RATE_6M_PLCP
;
band
=
IEEE80211_BAND_5GHZ
;
break
;
default:
...
...
drivers/net/wireless/iwlegacy/iwl4965-base.c
View file @
2eb05816
...
...
@@ -1757,7 +1757,7 @@ static void il4965_alive_start(struct il_priv *il)
ieee80211_wake_queues
(
il
->
hw
);
il
->
active_rate
=
IL_
RATES_MASK
;
il
->
active_rate
=
RATES_MASK
;
if
(
il_is_associated_ctx
(
ctx
))
{
struct
il_rxon_cmd
*
active_rxon
=
...
...
@@ -2711,7 +2711,7 @@ static void il4965_init_hw_rates(struct il_priv *il,
{
int
i
;
for
(
i
=
0
;
i
<
IL_
RATE_COUNT_LEGACY
;
i
++
)
{
for
(
i
=
0
;
i
<
RATE_COUNT_LEGACY
;
i
++
)
{
rates
[
i
].
bitrate
=
il_rates
[
i
].
ieee
*
5
;
rates
[
i
].
hw_value
=
i
;
/* Rate scaling will work on indexes */
rates
[
i
].
hw_value_short
=
i
;
...
...
@@ -2721,7 +2721,7 @@ static void il4965_init_hw_rates(struct il_priv *il,
* If CCK != 1M then set short preamble rate flag.
*/
rates
[
i
].
flags
|=
(
il_rates
[
i
].
plcp
==
IL_
RATE_1M_PLCP
)
?
(
il_rates
[
i
].
plcp
==
RATE_1M_PLCP
)
?
0
:
IEEE80211_RATE_SHORT_PREAMBLE
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment