Steve's Thinfirm 1.5 developer notes: Difference between revisions
mNo edit summary |
(Added TX feedback issue) |
||
Line 1: | Line 1: | ||
[[Category:Network]] |
[[Category:Network]] |
||
== thin firmware major issues == |
|||
=== tx feedback === |
|||
The MAC controller does not accurately report transmission |
|||
failure status nor the number of retries. In all cases, we get back feedback events with failure == 0 and retries == 0x0A. |
|||
Importance: critical. Rate adaptation, QoS and mesh will not be |
|||
possible with the thin firmware unless the MAC reports accurate |
|||
transmission feedback. |
|||
== libertas_tf issues/todo == |
== libertas_tf issues/todo == |
||
Revision as of 05:13, 19 June 2010
thin firmware major issues
tx feedback
The MAC controller does not accurately report transmission failure status nor the number of retries. In all cases, we get back feedback events with failure == 0 and retries == 0x0A. Importance: critical. Rate adaptation, QoS and mesh will not be possible with the thin firmware unless the MAC reports accurate transmission feedback.
libertas_tf issues/todo
rfkill
The OLCP rfkill causes a deadlock when libertas_tf is used due to the following two threads of execution:
a. OLPC rfkill command powers down the wifi card b. sdio notices wifi card removed, tries to unload libertas_tf |
a. rfkill notifies mac80211 to do rfkill b. mac80211 holds lock |
Proposed action:
1.a. OLPC removes rfkill patch that powers down card
b. cozybit adds rfkill support to libertas_tf
Power save
Powersave modes are not implemented in libertas_tf. Functions are stubbed.
Proposed action: cozybit implements proper powersave functions in libertas_tf.
mac80211 not honoring radiotap rate
In order to support the "honor tx rate on multi-cast transfer" patch done for Mitch on the XO1s, we need to fix mac80211 to support this. For some reason, the part of code in mac80211 that parses the tx rate portion of the radiotap header has been removed and this functionality needs to be moved back in. Specifically the function is in net/mac80211/tx.c in the function __ieee80211_parse_tx_radiotap. The below diff shows the difference between wireless-testing and the XO1 mac80211 that we tested the firmware change on.
--- /Volumes/cozybit/projects/OLPC/wireless-testing/net/mac80211/tx.c 2010-06-02 13:31:36.000000000 -0700
+++ /Volumes/cozybit/projects/OLPC/libertastf/net/mac80211/tx.c 2010-05-20 08:05:16.000000000 -0700
@@ -1034,6 +869,8 @@
*/
while (!ret) {
+ int i, target_rate;
+
ret = ieee80211_radiotap_iterator_next(&iterator);
if (ret)
@@ -1047,6 +884,38 @@
* get_unaligned((type *)iterator.this_arg) to dereference
* iterator.this_arg for type "type" safely on all arches.
*/
+ case IEEE80211_RADIOTAP_RATE:
+ /*
+ * radiotap rate u8 is in 500kbps units eg, 0x02=1Mbps
+ * ieee80211 rate int is in 100kbps units eg, 0x0a=1Mbps
+ */
+ target_rate = (*iterator.this_arg) * 5;
+ for (i = 0; i < sband->n_bitrates; i++) {
+ struct ieee80211_rate *r;
+
+ r = &sband->bitrates[i];
+
+ if (r->bitrate == target_rate) {
+ tx->rate = r;
+ break;
+ }
+ }
+ break;
+
+ case IEEE80211_RADIOTAP_ANTENNA:
+ /*
+ * radiotap uses 0 for 1st ant, mac80211 is 1 for
+ * 1st ant
+ */
+ control->antenna_sel_tx = (*iterator.this_arg) + 1;
+ break;
+
+#if 0
+ case IEEE80211_RADIOTAP_DBM_TX_POWER:
+ control->power_level = *iterator.this_arg;
+ break;
+#endif
+
case IEEE80211_RADIOTAP_FLAGS:
if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FCS) {
/*
@@ -1056,13 +925,14 @@
* because it will be recomputed and added
* on transmission
*/
- if (skb->len < (iterator._max_length + FCS_LEN))
- return false;
+ if (skb->len < (iterator.max_length + FCS_LEN))
+ return TX_DROP;
skb_trim(skb, skb->len - FCS_LEN);
}
if (*iterator.this_arg & IEEE80211_RADIOTAP_F_WEP)
- info->flags &= ~IEEE80211_TX_INTFL_DONT_ENCRYPT;
+ control->flags &=
+ ~IEEE80211_TXCTL_DO_NOT_ENCRYPT;
if (*iterator.this_arg & IEEE80211_RADIOTAP_F_FRAG)
tx->flags |= IEEE80211_TX_FRAGMENTED;
break;
The XO1.5 firmware and the libertas_tf driver already support this functionality, so the only thing blocking this is the lack of implementation in mac80211.
Proposed action: cozybit adds the honor-rate from radiotap functionality back into mac80211. This change can be upstreamed. Note that it's not likely just as easy as adding the old code back in, I presume that it was removed when other internal changes were made to mac80211.
USB driver likely broken
While I tried to minimize changes to shared portions of the driver, I very likely broke libertas_tf_usb. This needs to be fixed.