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
nexedi
linux
Commits
db9f11d3
Commit
db9f11d3
authored
5 years ago
by
Felix Fietkau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mt76: store wcid tx rate info in one u32 reduce locking
Signed-off-by:
Felix Fietkau
<
nbd@nbd.name
>
parent
2fe30dce
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
27 additions
and
18 deletions
+27
-18
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt76.h
+6
-4
drivers/net/wireless/mediatek/mt76/mt7603/mac.c
drivers/net/wireless/mediatek/mt76/mt7603/mac.c
+2
-2
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
+17
-9
drivers/net/wireless/mediatek/mt76/mt76x02_util.c
drivers/net/wireless/mediatek/mt76/mt76x02_util.c
+0
-1
drivers/net/wireless/mediatek/mt76/tx.c
drivers/net/wireless/mediatek/mt76/tx.c
+2
-2
No files found.
drivers/net/wireless/mediatek/mt76/mt76.h
View file @
db9f11d3
...
...
@@ -188,6 +188,11 @@ enum mt76_wcid_flags {
DECLARE_EWMA
(
signal
,
10
,
8
);
#define MT_WCID_TX_INFO_RATE GENMASK(15, 0)
#define MT_WCID_TX_INFO_NSS GENMASK(17, 16)
#define MT_WCID_TX_INFO_TXPWR_ADJ GENMASK(25, 18)
#define MT_WCID_TX_INFO_SET BIT(31)
struct
mt76_wcid
{
struct
mt76_rx_tid
__rcu
*
aggr
[
IEEE80211_NUM_TIDS
];
...
...
@@ -206,10 +211,7 @@ struct mt76_wcid {
u8
rx_check_pn
;
u8
rx_key_pn
[
IEEE80211_NUM_TIDS
][
6
];
__le16
tx_rate
;
bool
tx_rate_set
;
u8
tx_rate_nss
;
s8
max_txpwr_adj
;
u32
tx_info
;
bool
sw_iv
;
u8
packet_id
;
...
...
This diff is collapsed.
Click to expand it.
drivers/net/wireless/mediatek/mt76/mt7603/mac.c
View file @
db9f11d3
...
...
@@ -717,11 +717,11 @@ void mt7603_wtbl_set_rates(struct mt7603_dev *dev, struct mt7603_sta *sta,
MT_WTBL_UPDATE_RATE_UPDATE
|
MT_WTBL_UPDATE_TX_COUNT_CLEAR
);
if
(
!
sta
->
wcid
.
tx_rate_set
)
if
(
!
(
sta
->
wcid
.
tx_info
&
MT_WCID_TX_INFO_SET
)
)
mt76_poll
(
dev
,
MT_WTBL_UPDATE
,
MT_WTBL_UPDATE_BUSY
,
0
,
5000
);
sta
->
rate_count
=
2
*
MT7603_RATE_RETRY
*
n_rates
;
sta
->
wcid
.
tx_
rate_set
=
true
;
sta
->
wcid
.
tx_
info
|=
MT_WCID_TX_INFO_SET
;
}
static
enum
mt7603_cipher_type
...
...
This diff is collapsed.
Click to expand it.
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c
View file @
db9f11d3
...
...
@@ -218,10 +218,17 @@ mt76x02_mac_tx_rate_val(struct mt76x02_dev *dev,
void
mt76x02_mac_wcid_set_rate
(
struct
mt76x02_dev
*
dev
,
struct
mt76_wcid
*
wcid
,
const
struct
ieee80211_tx_rate
*
rate
)
{
spin_lock_bh
(
&
dev
->
mt76
.
lock
);
wcid
->
tx_rate
=
mt76x02_mac_tx_rate_val
(
dev
,
rate
,
&
wcid
->
tx_rate_nss
);
wcid
->
tx_rate_set
=
true
;
spin_unlock_bh
(
&
dev
->
mt76
.
lock
);
s8
max_txpwr_adj
=
mt76x02_tx_get_max_txpwr_adj
(
dev
,
rate
);
__le16
rateval
;
u32
tx_info
;
s8
nss
;
rateval
=
mt76x02_mac_tx_rate_val
(
dev
,
rate
,
&
nss
);
tx_info
=
FIELD_PREP
(
MT_WCID_TX_INFO_RATE
,
rateval
)
|
FIELD_PREP
(
MT_WCID_TX_INFO_NSS
,
nss
)
|
FIELD_PREP
(
MT_WCID_TX_INFO_TXPWR_ADJ
,
max_txpwr_adj
)
|
MT_WCID_TX_INFO_SET
;
wcid
->
tx_info
=
tx_info
;
}
void
mt76x02_mac_set_short_preamble
(
struct
mt76x02_dev
*
dev
,
bool
enable
)
...
...
@@ -323,6 +330,7 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
struct
ieee80211_tx_info
*
info
=
IEEE80211_SKB_CB
(
skb
);
struct
ieee80211_tx_rate
*
rate
=
&
info
->
control
.
rates
[
0
];
struct
ieee80211_key_conf
*
key
=
info
->
control
.
hw_key
;
u32
wcid_tx_info
;
u16
rate_ht_mask
=
FIELD_PREP
(
MT_RXWI_RATE_PHY
,
BIT
(
1
)
|
BIT
(
2
));
u16
txwi_flags
=
0
;
u8
nss
;
...
...
@@ -357,16 +365,16 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
txwi
->
eiv
=
*
((
__le32
*
)
&
ccmp_pn
[
4
]);
}
spin_lock_bh
(
&
dev
->
mt76
.
lock
);
if
(
wcid
&&
(
rate
->
idx
<
0
||
!
rate
->
count
))
{
txwi
->
rate
=
wcid
->
tx_rate
;
max_txpwr_adj
=
wcid
->
max_txpwr_adj
;
nss
=
wcid
->
tx_rate_nss
;
wcid_tx_info
=
wcid
->
tx_info
;
txwi
->
rate
=
FIELD_GET
(
MT_WCID_TX_INFO_RATE
,
wcid_tx_info
);
max_txpwr_adj
=
FIELD_GET
(
MT_WCID_TX_INFO_TXPWR_ADJ
,
wcid_tx_info
);
nss
=
FIELD_GET
(
MT_WCID_TX_INFO_NSS
,
wcid_tx_info
);
}
else
{
txwi
->
rate
=
mt76x02_mac_tx_rate_val
(
dev
,
rate
,
&
nss
);
max_txpwr_adj
=
mt76x02_tx_get_max_txpwr_adj
(
dev
,
rate
);
}
spin_unlock_bh
(
&
dev
->
mt76
.
lock
);
txpwr_adj
=
mt76x02_tx_get_txpwr_adj
(
dev
,
dev
->
mt76
.
txpower_conf
,
max_txpwr_adj
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/wireless/mediatek/mt76/mt76x02_util.c
View file @
db9f11d3
...
...
@@ -572,7 +572,6 @@ void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
rate
.
idx
=
rates
->
rate
[
0
].
idx
;
rate
.
flags
=
rates
->
rate
[
0
].
flags
;
mt76x02_mac_wcid_set_rate
(
dev
,
&
msta
->
wcid
,
&
rate
);
msta
->
wcid
.
max_txpwr_adj
=
mt76x02_tx_get_max_txpwr_adj
(
dev
,
&
rate
);
}
EXPORT_SYMBOL_GPL
(
mt76x02_sta_rate_tbl_update
);
...
...
This diff is collapsed.
Click to expand it.
drivers/net/wireless/mediatek/mt76/tx.c
View file @
db9f11d3
...
...
@@ -266,7 +266,7 @@ mt76_tx(struct mt76_dev *dev, struct ieee80211_sta *sta,
skb_set_queue_mapping
(
skb
,
qid
);
}
if
(
!
wcid
->
tx_rate_set
)
if
(
!
(
wcid
->
tx_info
&
MT_WCID_TX_INFO_SET
)
)
ieee80211_get_tx_rates
(
info
->
control
.
vif
,
sta
,
skb
,
info
->
control
.
rates
,
1
);
...
...
@@ -412,7 +412,7 @@ mt76_txq_send_burst(struct mt76_dev *dev, struct mt76_sw_queue *sq,
}
info
=
IEEE80211_SKB_CB
(
skb
);
if
(
!
wcid
->
tx_rate_set
)
if
(
!
(
wcid
->
tx_info
&
MT_WCID_TX_INFO_SET
)
)
ieee80211_get_tx_rates
(
txq
->
vif
,
txq
->
sta
,
skb
,
info
->
control
.
rates
,
1
);
tx_rate
=
info
->
control
.
rates
[
0
];
...
...
This diff is collapsed.
Click to expand it.
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