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
6ce1dc45
Commit
6ce1dc45
authored
Aug 26, 2011
by
Stanislaw Gruszka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iwlegacy: s/window/win/
Signed-off-by:
Stanislaw Gruszka
<
sgruszka@redhat.com
>
parent
ebf0d90d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
159 additions
and
159 deletions
+159
-159
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
+54
-54
drivers/net/wireless/iwlegacy/iwl-4965-hw.h
drivers/net/wireless/iwlegacy/iwl-4965-hw.h
+2
-2
drivers/net/wireless/iwlegacy/iwl-4965-rs.c
drivers/net/wireless/iwlegacy/iwl-4965-rs.c
+67
-67
drivers/net/wireless/iwlegacy/iwl-4965-tx.c
drivers/net/wireless/iwlegacy/iwl-4965-tx.c
+7
-7
drivers/net/wireless/iwlegacy/iwl-4965.c
drivers/net/wireless/iwlegacy/iwl-4965.c
+1
-1
drivers/net/wireless/iwlegacy/iwl-commands.h
drivers/net/wireless/iwlegacy/iwl-commands.h
+8
-8
drivers/net/wireless/iwlegacy/iwl-core.c
drivers/net/wireless/iwlegacy/iwl-core.c
+3
-3
drivers/net/wireless/iwlegacy/iwl-dev.h
drivers/net/wireless/iwlegacy/iwl-dev.h
+6
-6
drivers/net/wireless/iwlegacy/iwl-prph.h
drivers/net/wireless/iwlegacy/iwl-prph.h
+6
-6
drivers/net/wireless/iwlegacy/iwl-tx.c
drivers/net/wireless/iwlegacy/iwl-tx.c
+5
-5
No files found.
drivers/net/wireless/iwlegacy/iwl-3945-rs.c
View file @
6ce1dc45
...
...
@@ -131,24 +131,24 @@ static u8 il3945_get_rate_index_by_rssi(s32 rssi, enum ieee80211_band band)
return
tpt_table
[
index
].
index
;
}
static
void
il3945_clear_win
dow
(
struct
il3945_rate_scale_data
*
window
)
static
void
il3945_clear_win
(
struct
il3945_rate_scale_data
*
win
)
{
win
dow
->
data
=
0
;
win
dow
->
success_counter
=
0
;
win
dow
->
success_ratio
=
-
1
;
win
dow
->
counter
=
0
;
win
dow
->
average_tpt
=
IL_INVALID_VALUE
;
win
dow
->
stamp
=
0
;
win
->
data
=
0
;
win
->
success_counter
=
0
;
win
->
success_ratio
=
-
1
;
win
->
counter
=
0
;
win
->
average_tpt
=
IL_INVALID_VALUE
;
win
->
stamp
=
0
;
}
/**
* il3945_rate_scale_flush_win
dows - flush out the rate scale window
s
* il3945_rate_scale_flush_win
s - flush out the rate scale win
s
*
* Returns the number of win
dow
s that have gathered data but were
* Returns the number of wins that have gathered data but were
* not flushed. If there were any that were not flushed, then
* reschedule the rate flushing routine.
*/
static
int
il3945_rate_scale_flush_win
dow
s
(
struct
il3945_rs_sta
*
rs_sta
)
static
int
il3945_rate_scale_flush_wins
(
struct
il3945_rs_sta
*
rs_sta
)
{
int
unflushed
=
0
;
int
i
;
...
...
@@ -170,7 +170,7 @@ static int il3945_rate_scale_flush_windows(struct il3945_rs_sta *rs_sta)
D_RATE
(
"flushing %d samples of rate "
"index %d
\n
"
,
rs_sta
->
win
[
i
].
counter
,
i
);
il3945_clear_win
dow
(
&
rs_sta
->
win
[
i
]);
il3945_clear_win
(
&
rs_sta
->
win
[
i
]);
}
else
unflushed
++
;
spin_unlock_irqrestore
(
&
rs_sta
->
lock
,
flags
);
...
...
@@ -193,7 +193,7 @@ static void il3945_bg_rate_scale_flush(unsigned long data)
D_RATE
(
"enter
\n
"
);
unflushed
=
il3945_rate_scale_flush_win
dow
s
(
rs_sta
);
unflushed
=
il3945_rate_scale_flush_wins
(
rs_sta
);
spin_lock_irqsave
(
&
rs_sta
->
lock
,
flags
);
...
...
@@ -248,14 +248,14 @@ static void il3945_bg_rate_scale_flush(unsigned long data)
}
/**
* il3945_collect_tx_data - Update the success/failure sliding win
dow
* il3945_collect_tx_data - Update the success/failure sliding win
*
* We keep a sliding win
dow
of the last 64 packets transmitted
* at this rate. win
dow
->data contains the bitmask of successful
* We keep a sliding win of the last 64 packets transmitted
* at this rate. win->data contains the bitmask of successful
* packets.
*/
static
void
il3945_collect_tx_data
(
struct
il3945_rs_sta
*
rs_sta
,
struct
il3945_rate_scale_data
*
win
dow
,
struct
il3945_rate_scale_data
*
win
,
int
success
,
int
retries
,
int
index
)
{
unsigned
long
flags
;
...
...
@@ -271,34 +271,34 @@ static void il3945_collect_tx_data(struct il3945_rs_sta *rs_sta,
/*
* Keep track of only the latest 62 tx frame attempts in this rate's
* history win
dow
; anything older isn't really relevant any more.
* If we have filled up the sliding win
dow
, drop the oldest attempt;
* history win; anything older isn't really relevant any more.
* If we have filled up the sliding win, drop the oldest attempt;
* if the oldest attempt (highest bit in bitmap) shows "success",
* subtract "1" from the success counter (this is the main reason
* we keep these bitmaps!).
* */
while
(
retries
>
0
)
{
if
(
win
dow
->
counter
>=
IL_RATE_MAX_WINDOW
)
{
if
(
win
->
counter
>=
IL_RATE_MAX_WINDOW
)
{
/* remove earliest */
win
dow
->
counter
=
IL_RATE_MAX_WINDOW
-
1
;
win
->
counter
=
IL_RATE_MAX_WINDOW
-
1
;
if
(
win
dow
->
data
&
(
1ULL
<<
(
IL_RATE_MAX_WINDOW
-
1
)))
{
win
dow
->
data
&=
~
(
1ULL
<<
(
IL_RATE_MAX_WINDOW
-
1
));
win
dow
->
success_counter
--
;
if
(
win
->
data
&
(
1ULL
<<
(
IL_RATE_MAX_WINDOW
-
1
)))
{
win
->
data
&=
~
(
1ULL
<<
(
IL_RATE_MAX_WINDOW
-
1
));
win
->
success_counter
--
;
}
}
/* Increment frames-attempted counter */
win
dow
->
counter
++
;
win
->
counter
++
;
/* Shift bitmap by one frame (throw away oldest history),
* OR in "1", and increment "success" if this
* frame was successful. */
win
dow
->
data
<<=
1
;
win
->
data
<<=
1
;
if
(
success
>
0
)
{
win
dow
->
success_counter
++
;
win
dow
->
data
|=
0x1
;
win
->
success_counter
++
;
win
->
data
|=
0x1
;
success
--
;
}
...
...
@@ -306,24 +306,24 @@ static void il3945_collect_tx_data(struct il3945_rs_sta *rs_sta,
}
/* Calculate current success ratio, avoid divide-by-0! */
if
(
win
dow
->
counter
>
0
)
win
dow
->
success_ratio
=
128
*
(
100
*
window
->
success_counter
)
/
win
dow
->
counter
;
if
(
win
->
counter
>
0
)
win
->
success_ratio
=
128
*
(
100
*
win
->
success_counter
)
/
win
->
counter
;
else
win
dow
->
success_ratio
=
IL_INVALID_VALUE
;
win
->
success_ratio
=
IL_INVALID_VALUE
;
fail_count
=
win
dow
->
counter
-
window
->
success_counter
;
fail_count
=
win
->
counter
-
win
->
success_counter
;
/* Calculate average throughput, if we have enough history. */
if
(
fail_count
>=
IL_RATE_MIN_FAILURE_TH
||
win
dow
->
success_counter
>=
IL_RATE_MIN_SUCCESS_TH
)
win
dow
->
average_tpt
=
((
window
->
success_ratio
*
win
->
success_counter
>=
IL_RATE_MIN_SUCCESS_TH
)
win
->
average_tpt
=
((
win
->
success_ratio
*
rs_sta
->
expected_tpt
[
index
]
+
64
)
/
128
);
else
win
dow
->
average_tpt
=
IL_INVALID_VALUE
;
win
->
average_tpt
=
IL_INVALID_VALUE
;
/* Tag this win
dow
as having been updated */
win
dow
->
stamp
=
jiffies
;
/* Tag this win as having been updated */
win
->
stamp
=
jiffies
;
spin_unlock_irqrestore
(
&
rs_sta
->
lock
,
flags
);
...
...
@@ -365,7 +365,7 @@ void il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_i
rs_sta
->
rate_scale_flush
.
function
=
il3945_bg_rate_scale_flush
;
for
(
i
=
0
;
i
<
IL_RATE_COUNT_3945
;
i
++
)
il3945_clear_win
dow
(
&
rs_sta
->
win
[
i
]);
il3945_clear_win
(
&
rs_sta
->
win
[
i
]);
/* TODO: what is a good starting rate for STA? About middle? Maybe not
* the lowest or the highest rate.. Could consider using RSSI from
...
...
@@ -484,7 +484,7 @@ static void il3945_rs_tx_status(void *il_rate, struct ieee80211_supported_band *
last_index
=
first_index
;
/*
* Update the win
dow
for each rate. We determine which rates
* Update the win for each rate. We determine which rates
* were Tx'd based on the total number of retries vs. the number
* of retries configured for each rate -- currently set to the
* il value 'retry_rate' vs. rate specific
...
...
@@ -517,7 +517,7 @@ static void il3945_rs_tx_status(void *il_rate, struct ieee80211_supported_band *
}
/* Update the last index win
dow
with success/failure based on ACK */
/* Update the last index win with success/failure based on ACK */
D_RATE
(
"Update rate %d with %s.
\n
"
,
last_index
,
(
info
->
flags
&
IEEE80211_TX_STAT_ACK
)
?
...
...
@@ -526,7 +526,7 @@ static void il3945_rs_tx_status(void *il_rate, struct ieee80211_supported_band *
&
rs_sta
->
win
[
last_index
],
info
->
flags
&
IEEE80211_TX_STAT_ACK
,
1
,
last_index
);
/* We updated the rate scale win
dow
-- if its been more than
/* We updated the rate scale win -- if its been more than
* flush_time since the last run, schedule the flush
* again */
spin_lock_irqsave
(
&
rs_sta
->
lock
,
flags
);
...
...
@@ -636,7 +636,7 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
u16
high_low
;
int
index
;
struct
il3945_rs_sta
*
rs_sta
=
il_sta
;
struct
il3945_rate_scale_data
*
win
dow
=
NULL
;
struct
il3945_rate_scale_data
*
win
=
NULL
;
int
current_tpt
=
IL_INVALID_VALUE
;
int
low_tpt
=
IL_INVALID_VALUE
;
int
high_tpt
=
IL_INVALID_VALUE
;
...
...
@@ -691,29 +691,29 @@ static void il3945_rs_get_rate(void *il_r, struct ieee80211_sta *sta,
index
=
max_rate_idx
;
}
win
dow
=
&
(
rs_sta
->
win
[
index
]);
win
=
&
(
rs_sta
->
win
[
index
]);
fail_count
=
win
dow
->
counter
-
window
->
success_counter
;
fail_count
=
win
->
counter
-
win
->
success_counter
;
if
(
fail_count
<
IL_RATE_MIN_FAILURE_TH
&&
win
dow
->
success_counter
<
IL_RATE_MIN_SUCCESS_TH
)
{
win
->
success_counter
<
IL_RATE_MIN_SUCCESS_TH
)
{
spin_unlock_irqrestore
(
&
rs_sta
->
lock
,
flags
);
D_RATE
(
"Invalid average_tpt on rate %d: "
"counter: %d, success_counter: %d, "
"expected_tpt is %sNULL
\n
"
,
index
,
win
dow
->
counter
,
win
dow
->
success_counter
,
win
->
counter
,
win
->
success_counter
,
rs_sta
->
expected_tpt
?
"not "
:
""
);
/* Can't calculate this yet; not enough history */
win
dow
->
average_tpt
=
IL_INVALID_VALUE
;
win
->
average_tpt
=
IL_INVALID_VALUE
;
goto
out
;
}
current_tpt
=
win
dow
->
average_tpt
;
current_tpt
=
win
->
average_tpt
;
high_low
=
il3945_get_adjacent_rate
(
rs_sta
,
index
,
rate_mask
,
sband
->
band
);
...
...
@@ -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
dow
->
success_ratio
<
IL_RATE_DECREASE_TH
||
!
current_tpt
)
{
if
(
win
->
success_ratio
<
IL_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,7 +744,7 @@ 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
dow
->
success_ratio
>=
IL_RATE_INCREASE_TH
)
if
(
high
!=
IL_RATE_INVALID
&&
win
->
success_ratio
>=
IL_RATE_INCREASE_TH
)
scale_action
=
1
;
else
if
(
low
!=
IL_RATE_INVALID
)
scale_action
=
0
;
...
...
@@ -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
dow
->
success_ratio
>=
IL_RATE_INCREASE_TH
)
win
->
success_ratio
>=
IL_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
dow
->
success_ratio
>=
IL_RATE_INCREASE_TH
)
{
}
else
if
(
win
->
success_ratio
>=
IL_RATE_INCREASE_TH
)
{
/* Lower rate has better
* throughput,decrease rate */
scale_action
=
1
;
...
...
@@ -791,7 +791,7 @@ 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
dow
->
success_ratio
>
IL_RATE_HIGH_TH
||
(
win
->
success_ratio
>
IL_RATE_HIGH_TH
||
current_tpt
>
100
*
rs_sta
->
expected_tpt
[
low
]))
scale_action
=
0
;
...
...
drivers/net/wireless/iwlegacy/iwl-4965-hw.h
View file @
6ce1dc45
...
...
@@ -773,8 +773,8 @@ enum {
*
* Each Tx queue uses a byte-count table containing 320 entries:
* one 16-bit entry for each of 256 TFDs, plus an additional 64 entries that
* duplicate the first 64 entries (to avoid wrap-around within a Tx win
dow
;
* max Tx win
dow
is 64 TFDs).
* duplicate the first 64 entries (to avoid wrap-around within a Tx win;
* max Tx win is 64 TFDs).
*
* When driver sets up a new TFD, it must also enter the total byte count
* of the frame to be transmitted into the corresponding entry in the byte
...
...
drivers/net/wireless/iwlegacy/iwl-4965-rs.c
View file @
6ce1dc45
...
...
@@ -46,7 +46,7 @@
#define IL_NUMBER_TRY 1
#define IL_HT_NUMBER_TRY 3
#define IL_RATE_MAX_WINDOW 62
/* # tx in history win
dow
*/
#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 */
...
...
@@ -226,14 +226,14 @@ static inline u8 il4965_rs_extract_rate(u32 rate_n_flags)
}
static
void
il4965_rs_rate_scale_clear_win
dow
(
struct
il_rate_scale_data
*
window
)
il4965_rs_rate_scale_clear_win
(
struct
il_rate_scale_data
*
win
)
{
win
dow
->
data
=
0
;
win
dow
->
success_counter
=
0
;
win
dow
->
success_ratio
=
IL_INVALID_VALUE
;
win
dow
->
counter
=
0
;
win
dow
->
average_tpt
=
IL_INVALID_VALUE
;
win
dow
->
stamp
=
0
;
win
->
data
=
0
;
win
->
success_counter
=
0
;
win
->
success_ratio
=
IL_INVALID_VALUE
;
win
->
counter
=
0
;
win
->
average_tpt
=
IL_INVALID_VALUE
;
win
->
stamp
=
0
;
}
static
inline
u8
il4965_rs_is_valid_ant
(
u8
valid_antenna
,
u8
ant_type
)
...
...
@@ -408,58 +408,58 @@ il4965_get_expected_tpt(struct il_scale_tbl_info *tbl, int rs_index)
}
/**
* il4965_rs_collect_tx_data - Update the success/failure sliding win
dow
* il4965_rs_collect_tx_data - Update the success/failure sliding win
*
* We keep a sliding win
dow
of the last 62 packets transmitted
* at this rate. win
dow
->data contains the bitmask of successful
* We keep a sliding win of the last 62 packets transmitted
* at this rate. win->data contains the bitmask of successful
* packets.
*/
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
dow
=
NULL
;
struct
il_rate_scale_data
*
win
=
NULL
;
static
const
u64
mask
=
(((
u64
)
1
)
<<
(
IL_RATE_MAX_WINDOW
-
1
));
s32
fail_count
,
tpt
;
if
(
scale_index
<
0
||
scale_index
>=
IL_RATE_COUNT
)
return
-
EINVAL
;
/* Select win
dow
for current tx bit rate */
win
dow
=
&
(
tbl
->
win
[
scale_index
]);
/* Select win for current tx bit rate */
win
=
&
(
tbl
->
win
[
scale_index
]);
/* Get expected throughput */
tpt
=
il4965_get_expected_tpt
(
tbl
,
scale_index
);
/*
* Keep track of only the latest 62 tx frame attempts in this rate's
* history win
dow
; anything older isn't really relevant any more.
* If we have filled up the sliding win
dow
, drop the oldest attempt;
* history win; anything older isn't really relevant any more.
* If we have filled up the sliding win, drop the oldest attempt;
* if the oldest attempt (highest bit in bitmap) shows "success",
* subtract "1" from the success counter (this is the main reason
* we keep these bitmaps!).
*/
while
(
attempts
>
0
)
{
if
(
win
dow
->
counter
>=
IL_RATE_MAX_WINDOW
)
{
if
(
win
->
counter
>=
IL_RATE_MAX_WINDOW
)
{
/* remove earliest */
win
dow
->
counter
=
IL_RATE_MAX_WINDOW
-
1
;
win
->
counter
=
IL_RATE_MAX_WINDOW
-
1
;
if
(
win
dow
->
data
&
mask
)
{
win
dow
->
data
&=
~
mask
;
win
dow
->
success_counter
--
;
if
(
win
->
data
&
mask
)
{
win
->
data
&=
~
mask
;
win
->
success_counter
--
;
}
}
/* Increment frames-attempted counter */
win
dow
->
counter
++
;
win
->
counter
++
;
/* Shift bitmap by one frame to throw away oldest history */
win
dow
->
data
<<=
1
;
win
->
data
<<=
1
;
/* Mark the most recent #successes attempts as successful */
if
(
successes
>
0
)
{
win
dow
->
success_counter
++
;
win
dow
->
data
|=
0x1
;
win
->
success_counter
++
;
win
->
data
|=
0x1
;
successes
--
;
}
...
...
@@ -467,23 +467,23 @@ static int il4965_rs_collect_tx_data(struct il_scale_tbl_info *tbl,
}
/* Calculate current success ratio, avoid divide-by-0! */
if
(
win
dow
->
counter
>
0
)
win
dow
->
success_ratio
=
128
*
(
100
*
window
->
success_counter
)
/
win
dow
->
counter
;
if
(
win
->
counter
>
0
)
win
->
success_ratio
=
128
*
(
100
*
win
->
success_counter
)
/
win
->
counter
;
else
win
dow
->
success_ratio
=
IL_INVALID_VALUE
;
win
->
success_ratio
=
IL_INVALID_VALUE
;
fail_count
=
win
dow
->
counter
-
window
->
success_counter
;
fail_count
=
win
->
counter
-
win
->
success_counter
;
/* Calculate average throughput, if we have enough history. */
if
(
fail_count
>=
IL_RATE_MIN_FAILURE_TH
||
win
dow
->
success_counter
>=
IL_RATE_MIN_SUCCESS_TH
)
win
dow
->
average_tpt
=
(
window
->
success_ratio
*
tpt
+
64
)
/
128
;
win
->
success_counter
>=
IL_RATE_MIN_SUCCESS_TH
)
win
->
average_tpt
=
(
win
->
success_ratio
*
tpt
+
64
)
/
128
;
else
win
dow
->
average_tpt
=
IL_INVALID_VALUE
;
win
->
average_tpt
=
IL_INVALID_VALUE
;
/* Tag this win
dow
as having been updated */
win
dow
->
stamp
=
jiffies
;
/* Tag this win as having been updated */
win
->
stamp
=
jiffies
;
return
0
;
}
...
...
@@ -817,7 +817,7 @@ il4965_rs_tx_status(void *il_r, struct ieee80211_supported_band *sband,
struct
il_rxon_context
*
ctx
=
sta_priv
->
common
.
ctx
;
D_RATE
(
"get frame ack response, update rate scale win
dow
\n
"
);
"get frame ack response, update rate scale win
\n
"
);
/* Treat uninitialized rate scaling data same as non-existing. */
if
(
!
lq_sta
)
{
...
...
@@ -1284,7 +1284,7 @@ static int il4965_rs_move_legacy_other(struct il_priv *il,
struct
il_scale_tbl_info
*
tbl
=
&
(
lq_sta
->
lq_info
[
lq_sta
->
active_tbl
]);
struct
il_scale_tbl_info
*
search_tbl
=
&
(
lq_sta
->
lq_info
[(
1
-
lq_sta
->
active_tbl
)]);
struct
il_rate_scale_data
*
win
dow
=
&
(
tbl
->
win
[
index
]);
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
));
u8
start_action
;
...
...
@@ -1310,7 +1310,7 @@ static int il4965_rs_move_legacy_other(struct il_priv *il,
break
;
/* Don't change antenna if success has been great */
if
(
win
dow
->
success_ratio
>=
IL_RS_GOOD_RATIO
)
if
(
win
->
success_ratio
>=
IL_RS_GOOD_RATIO
)
break
;
/* Set up search table to try other antenna */
...
...
@@ -1401,7 +1401,7 @@ static int il4965_rs_move_siso_to_other(struct il_priv *il,
struct
il_scale_tbl_info
*
tbl
=
&
(
lq_sta
->
lq_info
[
lq_sta
->
active_tbl
]);
struct
il_scale_tbl_info
*
search_tbl
=
&
(
lq_sta
->
lq_info
[(
1
-
lq_sta
->
active_tbl
)]);
struct
il_rate_scale_data
*
win
dow
=
&
(
tbl
->
win
[
index
]);
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
));
...
...
@@ -1425,7 +1425,7 @@ static int il4965_rs_move_siso_to_other(struct il_priv *il,
tx_chains_num
<=
2
))
break
;
if
(
win
dow
->
success_ratio
>=
IL_RS_GOOD_RATIO
)
if
(
win
->
success_ratio
>=
IL_RS_GOOD_RATIO
)
break
;
memcpy
(
search_tbl
,
tbl
,
sz
);
...
...
@@ -1523,7 +1523,7 @@ static int il4965_rs_move_mimo2_to_other(struct il_priv *il,
struct
il_scale_tbl_info
*
tbl
=
&
(
lq_sta
->
lq_info
[
lq_sta
->
active_tbl
]);
struct
il_scale_tbl_info
*
search_tbl
=
&
(
lq_sta
->
lq_info
[(
1
-
lq_sta
->
active_tbl
)]);
struct
il_rate_scale_data
*
win
dow
=
&
(
tbl
->
win
[
index
]);
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
));
...
...
@@ -1544,7 +1544,7 @@ static int il4965_rs_move_mimo2_to_other(struct il_priv *il,
if
(
tx_chains_num
<=
2
)
break
;
if
(
win
dow
->
success_ratio
>=
IL_RS_GOOD_RATIO
)
if
(
win
->
success_ratio
>=
IL_RS_GOOD_RATIO
)
break
;
memcpy
(
search_tbl
,
tbl
,
sz
);
...
...
@@ -1704,7 +1704,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
++
)
il4965_rs_rate_scale_clear_win
dow
(
il4965_rs_rate_scale_clear_win
(
&
(
tbl
->
win
[
i
]));
}
}
...
...
@@ -1714,7 +1714,7 @@ il4965_rs_stay_in_table(struct il_lq_sta *lq_sta, bool force_search)
* "search" table). */
if
(
!
lq_sta
->
stay_in_tbl
)
{
for
(
i
=
0
;
i
<
IL_RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
dow
(
il4965_rs_rate_scale_clear_win
(
&
(
tbl
->
win
[
i
]));
}
}
...
...
@@ -1756,7 +1756,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
int
high
=
IL_RATE_INVALID
;
int
index
;
int
i
;
struct
il_rate_scale_data
*
win
dow
=
NULL
;
struct
il_rate_scale_data
*
win
=
NULL
;
int
current_tpt
=
IL_INVALID_VALUE
;
int
low_tpt
=
IL_INVALID_VALUE
;
int
high_tpt
=
IL_INVALID_VALUE
;
...
...
@@ -1859,7 +1859,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
return
;
}
/* Get expected throughput table and history win
dow
for current rate */
/* Get expected throughput table and history win for current rate */
if
(
!
tbl
->
expected_tpt
)
{
IL_ERR
(
"tbl->expected_tpt is NULL
\n
"
);
return
;
...
...
@@ -1870,11 +1870,11 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
lq_sta
->
max_rate_idx
<
index
)
{
index
=
lq_sta
->
max_rate_idx
;
update_lq
=
1
;
win
dow
=
&
(
tbl
->
win
[
index
]);
win
=
&
(
tbl
->
win
[
index
]);
goto
lq_update
;
}
win
dow
=
&
(
tbl
->
win
[
index
]);
win
=
&
(
tbl
->
win
[
index
]);
/*
* If there is not enough history to calculate actual average
...
...
@@ -1883,15 +1883,15 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
* Set up new rate table in uCode only if old rate is not supported
* in current association (use new rate found above).
*/
fail_count
=
win
dow
->
counter
-
window
->
success_counter
;
fail_count
=
win
->
counter
-
win
->
success_counter
;
if
(
fail_count
<
IL_RATE_MIN_FAILURE_TH
&&
win
dow
->
success_counter
<
IL_RATE_MIN_SUCCESS_TH
)
{
win
->
success_counter
<
IL_RATE_MIN_SUCCESS_TH
)
{
D_RATE
(
"LQ: still below TH. succ=%d total=%d "
"for index %d
\n
"
,
win
dow
->
success_counter
,
window
->
counter
,
index
);
win
->
success_counter
,
win
->
counter
,
index
);
/* Can't calculate this yet; not enough history */
win
dow
->
average_tpt
=
IL_INVALID_VALUE
;
win
->
average_tpt
=
IL_INVALID_VALUE
;
/* Should we stay with this modulation mode,
* or search for a new one? */
...
...
@@ -1901,11 +1901,11 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
}
/* Else we have enough samples; calculate estimate of
* actual average throughput */
if
(
win
dow
->
average_tpt
!=
((
window
->
success_ratio
*
if
(
win
->
average_tpt
!=
((
win
->
success_ratio
*
tbl
->
expected_tpt
[
index
]
+
64
)
/
128
))
{
IL_ERR
(
"expected_tpt should have been calculated by now
\n
"
);
win
dow
->
average_tpt
=
((
window
->
success_ratio
*
win
->
average_tpt
=
((
win
->
success_ratio
*
tbl
->
expected_tpt
[
index
]
+
64
)
/
128
);
}
...
...
@@ -1914,12 +1914,12 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
/* If good success, continue using the "search" mode;
* no need to send new link quality command, since we're
* continuing to use the setup that we've been trying. */
if
(
win
dow
->
average_tpt
>
lq_sta
->
last_tpt
)
{
if
(
win
->
average_tpt
>
lq_sta
->
last_tpt
)
{
D_RATE
(
"LQ: SWITCHING TO NEW TABLE "
"suc=%d cur-tpt=%d old-tpt=%d
\n
"
,
win
dow
->
success_ratio
,
win
dow
->
average_tpt
,
win
->
success_ratio
,
win
->
average_tpt
,
lq_sta
->
last_tpt
);
if
(
!
is_legacy
(
tbl
->
lq_type
))
...
...
@@ -1927,15 +1927,15 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
/* Swap tables; "search" becomes "active" */
lq_sta
->
active_tbl
=
active_tbl
;
current_tpt
=
win
dow
->
average_tpt
;
current_tpt
=
win
->
average_tpt
;
/* Else poor success; go back to mode in "active" table */
}
else
{
D_RATE
(
"LQ: GOING BACK TO THE OLD TABLE "
"suc=%d cur-tpt=%d old-tpt=%d
\n
"
,
win
dow
->
success_ratio
,
win
dow
->
average_tpt
,
win
->
success_ratio
,
win
->
average_tpt
,
lq_sta
->
last_tpt
);
/* Nullify "search" table */
...
...
@@ -1973,10 +1973,10 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
lq_sta
->
max_rate_idx
<
high
)
high
=
IL_RATE_INVALID
;
sr
=
win
dow
->
success_ratio
;
sr
=
win
->
success_ratio
;
/* Collect measured throughputs for current and adjacent rates */
current_tpt
=
win
dow
->
average_tpt
;
current_tpt
=
win
->
average_tpt
;
if
(
low
!=
IL_RATE_INVALID
)
low_tpt
=
tbl
->
win
[
low
].
average_tpt
;
if
(
high
!=
IL_RATE_INVALID
)
...
...
@@ -2082,7 +2082,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
* 3) Allowing a new search
*/
if
(
!
update_lq
&&
!
done_search
&&
!
lq_sta
->
stay_in_tbl
&&
win
dow
->
counter
)
{
win
->
counter
)
{
/* Save current throughput to compare with "search" throughput*/
lq_sta
->
last_tpt
=
current_tpt
;
...
...
@@ -2103,7 +2103,7 @@ static void il4965_rs_rate_scale_perform(struct il_priv *il,
/* 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
++
)
il4965_rs_rate_scale_clear_win
dow
(
il4965_rs_rate_scale_clear_win
(
&
(
tbl
->
win
[
i
]));
/* Use new "search" start rate */
...
...
@@ -2314,7 +2314,7 @@ static void *il4965_rs_alloc_sta(void *il_rate, struct ieee80211_sta *sta,
struct
il_priv
*
il
;
il
=
(
struct
il_priv
*
)
il_rate
;
D_RATE
(
"create station rate scale win
dow
\n
"
);
D_RATE
(
"create station rate scale win
\n
"
);
lq_sta
=
&
sta_priv
->
lq_sta
;
...
...
@@ -2346,14 +2346,14 @@ il4965_rs_rate_init(struct il_priv *il,
for
(
j
=
0
;
j
<
LQ_SIZE
;
j
++
)
for
(
i
=
0
;
i
<
IL_RATE_COUNT
;
i
++
)
il4965_rs_rate_scale_clear_win
dow
(
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
++
)
il4965_rs_rate_scale_clear_win
dow
(
il4965_rs_rate_scale_clear_win
(
&
lq_sta
->
lq_info
[
j
].
win
[
i
]);
D_RATE
(
"LQ:"
...
...
drivers/net/wireless/iwlegacy/iwl-4965-tx.c
View file @
6ce1dc45
...
...
@@ -834,7 +834,7 @@ static int il4965_txq_agg_enable(struct il_priv *il, int txq_id,
il
->
txq
[
txq_id
].
q
.
write_ptr
=
(
ssn_idx
&
0xff
);
il4965_set_wr_ptrs
(
il
,
txq_id
,
ssn_idx
);
/* Set up Tx win
dow
size and frame limit for this queue */
/* Set up Tx win size and frame limit for this queue */
il_write_targ_mem
(
il
,
il
->
scd_base_addr
+
IL49_SCD_CONTEXT_QUEUE_OFFSET
(
txq_id
),
(
SCD_WIN_SIZE
<<
IL49_SCD_QUEUE_CTX_REG1_WIN_SIZE_POS
)
&
...
...
@@ -1171,7 +1171,7 @@ static int il4965_tx_status_reply_compressed_ba(struct il_priv *il,
D_TX_REPLY
(
"BA %d %d
\n
"
,
agg
->
start_idx
,
ba_resp
->
seq_ctl
);
/* Calculate shift to align block-ack bits with our Tx win
dow
bits */
/* Calculate shift to align block-ack bits with our Tx win bits */
sh
=
agg
->
start_idx
-
SEQ_TO_INDEX
(
seq_ctl
>>
4
);
if
(
sh
<
0
)
/* tbw something is wrong with indices */
sh
+=
0x100
;
...
...
@@ -1260,8 +1260,8 @@ void il4965_rx_reply_compressed_ba(struct il_priv *il,
/* "flow" corresponds to Tx queue */
u16
scd_flow
=
le16_to_cpu
(
ba_resp
->
scd_flow
);
/* "ssn" is start of block-ack Tx win
dow
, corresponds to index
* (in Tx queue's circular buffer) of first TFD/frame in win
dow
*/
/* "ssn" is start of block-ack Tx win, corresponds to index
* (in Tx queue's circular buffer) of first TFD/frame in win */
u16
ba_resp_scd_ssn
=
le16_to_cpu
(
ba_resp
->
scd_ssn
);
if
(
scd_flow
>=
il
->
hw_params
.
max_txq_num
)
{
...
...
@@ -1287,7 +1287,7 @@ void il4965_rx_reply_compressed_ba(struct il_priv *il,
return
;
}
/* Find index just before block-ack win
dow
*/
/* Find index just before block-ack win */
index
=
il_queue_dec_wrap
(
ba_resp_scd_ssn
&
0xff
,
txq
->
q
.
n_bd
);
spin_lock_irqsave
(
&
il
->
sta_lock
,
flags
);
...
...
@@ -1309,11 +1309,11 @@ void il4965_rx_reply_compressed_ba(struct il_priv *il,
agg
->
start_idx
,
(
unsigned
long
long
)
agg
->
bitmap
);
/* Update driver's record of ACK vs. not for each frame in win
dow
*/
/* Update driver's record of ACK vs. not for each frame in win */
il4965_tx_status_reply_compressed_ba
(
il
,
agg
,
ba_resp
);
/* Release all TFDs before the SSN, i.e. all TFDs in front of
* block-ack win
dow
(we assume that they've been successfully
* block-ack win (we assume that they've been successfully
* transmitted ... if not, it's too late anyway). */
if
(
txq
->
q
.
read_ptr
!=
(
ba_resp_scd_ssn
&
0xff
))
{
/* calculate mac80211 ampdu sw queue to wake */
...
...
drivers/net/wireless/iwlegacy/iwl-4965.c
View file @
6ce1dc45
...
...
@@ -1649,7 +1649,7 @@ static int il4965_tx_status_reply_tx(struct il_priv *il,
u64
bitmap
=
0
;
int
start
=
agg
->
start_idx
;
/* Construct bit-map of pending frames within Tx win
dow
*/
/* Construct bit-map of pending frames within Tx win */
for
(
i
=
0
;
i
<
agg
->
frame_count
;
i
++
)
{
u16
sc
;
status
=
le16_to_cpu
(
frame_status
[
i
].
status
);
...
...
drivers/net/wireless/iwlegacy/iwl-commands.h
View file @
6ce1dc45
...
...
@@ -754,7 +754,7 @@ struct il4965_rxon_assoc_cmd {
struct
il_rxon_time_cmd
{
__le64
timestamp
;
__le16
beacon_interval
;
__le16
atim_win
dow
;
__le16
atim_win
;
__le32
beacon_init_val
;
__le16
listen_interval
;
u8
dtim_period
;
...
...
@@ -803,15 +803,15 @@ struct il_csa_notification {
* struct il_ac_qos -- QOS timing params for REPLY_QOS_PARAM
* One for each of 4 EDCA access categories in struct il_qosparam_cmd
*
* @cw_min: Contention win
dow
, start value in numbers of slots.
* @cw_min: Contention win, start value in numbers of slots.
* Should be a power-of-2, minus 1. Device's default is 0x0f.
* @cw_max: Contention win
dow
, max value in numbers of slots.
* @cw_max: Contention win, max value in numbers of slots.
* Should be a power-of-2, minus 1. Device's default is 0x3f.
* @aifsn: Number of slots in Arbitration Interframe Space (before
* performing random backoff timing prior to Tx). Device default 1.
* @edca_txop: Length of Tx opportunity, in uSecs. Device default is 0.
*
* Device will automatically increase contention win
dow
by (2*CW) + 1 for each
* Device will automatically increase contention win by (2*CW) + 1 for each
* transmission retry. Device uses cw_max as a bit mask, ANDed with new CW
* value, to cap the CW value.
*/
...
...
@@ -1948,13 +1948,13 @@ struct il_link_qual_agg_params {
* speculative mode as the new current active mode.
*
* Each history set contains, separately for each possible rate, data for a
* sliding win
dow
of the 62 most recent tx attempts at that rate. The data
* sliding win of the 62 most recent tx attempts at that rate. The data
* includes a shifting bitmap of success(1)/failure(0), and sums of successful
* and attempted frames, from which the driver can additionally calculate a
* success ratio (success / attempted) and number of failures
* (attempted - success), and control the size of the win
dow
(attempted).
* (attempted - success), and control the size of the win (attempted).
* The driver uses the bit map to remove successes from the success sum, as
* the oldest tx attempts fall out of the win
dow
.
* the oldest tx attempts fall out of the win.
*
* When the 4965 device makes multiple tx attempts for a given frame, each
* attempt might be at a different rate, and have different modulation
...
...
@@ -2017,7 +2017,7 @@ struct il_link_qual_agg_params {
*
* 6) Re-evaluate the rate after each tx frame. If working with block-
* acknowledge, history and stats may be calculated for the entire
* block (including prior history that fits within the history win
dow
s),
* block (including prior history that fits within the history wins),
* before re-evaluation.
*
* FINDING BEST STARTING MODULATION MODE:
...
...
drivers/net/wireless/iwlegacy/iwl-core.c
View file @
6ce1dc45
...
...
@@ -380,10 +380,10 @@ il_send_rxon_timing(struct il_priv *il, struct il_rxon_context *ctx)
beacon_int
=
vif
?
vif
->
bss_conf
.
beacon_int
:
0
;
/*
* TODO: For IBSS we need to get atim_win
dow
from mac80211,
* TODO: For IBSS we need to get atim_win from mac80211,
* for now just always use 0
*/
ctx
->
timing
.
atim_win
dow
=
0
;
ctx
->
timing
.
atim_win
=
0
;
beacon_int
=
il_adjust_beacon_interval
(
beacon_int
,
il
->
hw_params
.
max_beacon_itrvl
*
TIME_UNIT
);
...
...
@@ -400,7 +400,7 @@ il_send_rxon_timing(struct il_priv *il, struct il_rxon_context *ctx)
"beacon interval %d beacon timer %d beacon tim %d
\n
"
,
le16_to_cpu
(
ctx
->
timing
.
beacon_interval
),
le32_to_cpu
(
ctx
->
timing
.
beacon_init_val
),
le16_to_cpu
(
ctx
->
timing
.
atim_win
dow
));
le16_to_cpu
(
ctx
->
timing
.
atim_win
));
return
il_send_cmd_pdu
(
il
,
ctx
->
rxon_timing_cmd
,
sizeof
(
ctx
->
timing
),
&
ctx
->
timing
);
...
...
drivers/net/wireless/iwlegacy/iwl-dev.h
View file @
6ce1dc45
...
...
@@ -129,7 +129,7 @@ struct il_queue {
int
read_ptr
;
/* last used entry (index) host_r*/
/* use for monitoring and recovering the stuck queue */
dma_addr_t
dma_addr
;
/* physical addr for BD's */
int
n_win
dow
;
/* safe queue window
*/
int
n_win
;
/* safe queue win
*/
u32
id
;
int
low_mark
;
/* low watermark, resume queue if free
* space more than this */
...
...
@@ -377,9 +377,9 @@ struct il_rx_queue {
* @txq_id: Tx queue used for Tx attempt
* @frame_count: # frames attempted by Tx command
* @wait_for_ba: Expect block-ack before next Tx reply
* @start_idx: Index of 1st Transmit Frame Descriptor (TFD) in Tx win
dow
* @bitmap0: Low order bitmap, one bit for each frame pending ACK in Tx win
dow
* @bitmap1: High order, one bit for each frame pending ACK in Tx win
dow
* @start_idx: Index of 1st Transmit Frame Descriptor (TFD) in Tx win
* @bitmap0: Low order bitmap, one bit for each frame pending ACK in Tx win
* @bitmap1: High order, one bit for each frame pending ACK in Tx win
* @rate_n_flags: Rate at which Tx was attempted
*
* If REPLY_TX indicates that aggregation was attempted, driver must wait
...
...
@@ -645,10 +645,10 @@ static inline u8 il_get_cmd_index(struct il_queue *q, u32 index,
* the big buffer at end of command array
*/
if
(
is_huge
)
return
q
->
n_win
dow
;
/* must be power of 2 */
return
q
->
n_win
;
/* must be power of 2 */
/* Otherwise, use normal size buffers */
return
index
&
(
q
->
n_win
dow
-
1
);
return
index
&
(
q
->
n_win
-
1
);
}
...
...
drivers/net/wireless/iwlegacy/iwl-prph.h
View file @
6ce1dc45
...
...
@@ -274,13 +274,13 @@
* The driver sets up each queue to work in one of two modes:
*
* 1) Scheduler-Ack, in which the scheduler automatically supports a
* block-ack (BA) win
dow
of up to 64 TFDs. In this mode, each queue
* block-ack (BA) win of up to 64 TFDs. In this mode, each queue
* contains TFDs for a unique combination of Recipient Address (RA)
* and Traffic Identifier (TID), that is, traffic of a given
* Quality-Of-Service (QOS) priority, destined for a single station.
*
* In scheduler-ack mode, the scheduler keeps track of the Tx status of
* each frame within the BA win
dow
, including whether it's been transmitted,
* each frame within the BA win, including whether it's been transmitted,
* and whether it's been acknowledged by the receiving station. The device
* automatically processes block-acks received from the receiving STA,
* and reschedules un-acked frames to be retransmitted (successful
...
...
@@ -316,7 +316,7 @@
*/
/**
* Max Tx win
dow
size is the max number of contiguous TFDs that the scheduler
* Max Tx win size is the max number of contiguous TFDs that the scheduler
* can keep track of at one time when creating block-ack chains of frames.
* Note that "64" matches the number of ack bits in a block-ack packet.
* Driver should use SCD_WIN_SIZE and SCD_FRAME_LIMIT values to initialize
...
...
@@ -377,7 +377,7 @@
/*
* Queue (x) Read Pointers (indexes, really!), one for each Tx queue.
* For FIFO mode, index indicates next frame to transmit.
* For Scheduler-ACK mode, index indicates first frame in Tx win
dow
.
* For Scheduler-ACK mode, index indicates first frame in Tx win.
* Initialized by driver, updated by scheduler.
*/
#define IL49_SCD_QUEUE_RDPTR(x) (IL49_SCD_START_OFFSET + 0x64 + (x) * 4)
...
...
@@ -414,7 +414,7 @@
* Driver should init to "1" for aggregation mode, or "0" otherwise.
* 7-6: Driver should init to "0"
* 5: Window Size Left; indicates whether scheduler can request
* another TFD, based on win
dow
size, etc. Driver should init
* another TFD, based on win size, etc. Driver should init
* this bit to "1" for aggregation mode, or "0" for non-agg.
* 4-1: Tx FIFO to use (range 0-7).
* 0: Queue is active (1), not active (0).
...
...
@@ -460,7 +460,7 @@
* each queue's entry as follows:
*
* LS Dword bit fields:
* 0-06: Max Tx win
dow
size for Scheduler-ACK. Driver should init to 64.
* 0-06: Max Tx win size for Scheduler-ACK. Driver should init to 64.
*
* MS Dword bit fields:
* 16-22: Frame limit. Driver should init to 10 (0xa).
...
...
drivers/net/wireless/iwlegacy/iwl-tx.c
View file @
6ce1dc45
...
...
@@ -165,7 +165,7 @@ void il_cmd_queue_unmap(struct il_priv *il)
q
->
read_ptr
=
il_queue_inc_wrap
(
q
->
read_ptr
,
q
->
n_bd
);
}
i
=
q
->
n_win
dow
;
i
=
q
->
n_win
;
if
(
txq
->
meta
[
i
].
flags
&
CMD_MAPPED
)
{
pci_unmap_single
(
il
->
pci_dev
,
dma_unmap_addr
(
&
txq
->
meta
[
i
],
mapping
),
...
...
@@ -243,7 +243,7 @@ int il_queue_space(const struct il_queue *q)
s
-=
q
->
n_bd
;
if
(
s
<=
0
)
s
+=
q
->
n_win
dow
;
s
+=
q
->
n_win
;
/* keep some reserve to not confuse empty and full situations */
s
-=
2
;
if
(
s
<
0
)
...
...
@@ -260,7 +260,7 @@ static int il_queue_init(struct il_priv *il, struct il_queue *q,
int
count
,
int
slots_num
,
u32
id
)
{
q
->
n_bd
=
count
;
q
->
n_win
dow
=
slots_num
;
q
->
n_win
=
slots_num
;
q
->
id
=
id
;
/* count must be power-of-two size, otherwise il_queue_inc_wrap
...
...
@@ -271,11 +271,11 @@ static int il_queue_init(struct il_priv *il, struct il_queue *q,
* il_get_cmd_index is broken. */
BUG_ON
(
!
is_power_of_2
(
slots_num
));
q
->
low_mark
=
q
->
n_win
dow
/
4
;
q
->
low_mark
=
q
->
n_win
/
4
;
if
(
q
->
low_mark
<
4
)
q
->
low_mark
=
4
;
q
->
high_mark
=
q
->
n_win
dow
/
8
;
q
->
high_mark
=
q
->
n_win
/
8
;
if
(
q
->
high_mark
<
2
)
q
->
high_mark
=
2
;
...
...
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