forked from Minki/linux
zd1211rw: firmware needs duration_id set to zero for non-pspoll frames
Some devices (iwl5100) cannot connect to zd1211rw based AP. It appears that zd1211 firmware messes up duration_id field if it is not set to zero by driver. Sniffing traffic shows that zd1211 is transmitting frames with duration_id bits 14 and 15 set and other bits appearing random. Setting duration_id at driver to zero results zd1211 outputting sane duration_id. This means that firmware is setting correct values itself and expects duration_id to be zero in first place. Looking at vendor driver shows that only PSPoll frames have duration_id set by driver, for other frames duration_id left zero. Original bug-report and attached patch at: http://sourceforge.net/mailarchive/message.php?msg_id=28759111 Reported-by: Tomas Vanek <Tomas.Vanek@fbl.cz> [modified original patch from bug-report, added check for pspoll frame] Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
2e6b411971
commit
e81a7bd555
@ -866,6 +866,14 @@ static int fill_ctrlset(struct zd_mac *mac,
|
||||
|
||||
ZD_ASSERT(frag_len <= 0xffff);
|
||||
|
||||
/*
|
||||
* Firmware computes the duration itself (for all frames except PSPoll)
|
||||
* and needs the field set to 0 at input, otherwise firmware messes up
|
||||
* duration_id and sets bits 14 and 15 on.
|
||||
*/
|
||||
if (!ieee80211_is_pspoll(hdr->frame_control))
|
||||
hdr->duration_id = 0;
|
||||
|
||||
txrate = ieee80211_get_tx_rate(mac->hw, info);
|
||||
|
||||
cs->modulation = txrate->hw_value;
|
||||
|
Loading…
Reference in New Issue
Block a user