diff mbox

attempting mesh on ath10k

Message ID 20150712142532.GA24495@localhost (mailing list archive)
State Not Applicable
Headers show

Commit Message

Bob Copeland July 12, 2015, 2:25 p.m. UTC
On Mon, Jul 06, 2015 at 05:49:21PM -0400, Bob Copeland wrote:
> Here's the latest patch-in-progress but I haven't tested it; it also
> requires the AID series I sent to l-w last week (and still requires the
> filters be disabled).  Once I get an hour to run it through the paces
> and also fix the filter issue then I plan to send upstream.

Ok, so I've tested it now and I'm having some problems with raw mode
on latest driver.  On top of previously posted patch, I have the following
(not sure if the various checksum changes are really needed, but tried
to have it match last working patch).

It looks like unicast self-protected action frames (peering) works fine, but
broadcast multihop action frames (PREQs) never go over the air.  Does
this sound familiar to anyone?

Comments

Bob Copeland July 13, 2015, 1:43 a.m. UTC | #1
[trimmed CC to list]

On Sun, Jul 12, 2015 at 10:25:32AM -0400, Bob Copeland wrote:
> It looks like unicast self-protected action frames (peering) works fine, but
> broadcast multihop action frames (PREQs) never go over the air.  Does
> this sound familiar to anyone?

Actually, it's any group addressed frame.  I tried playing with various
values for htt_data_tx_ext_tid as well as just using the tid on the frame
(in mesh group addressed frames still have a qos header with tid=0).

[  662.170000] XXX htt tx completion msdu_id 0 discard 0 no_ack 0 success 1
[  662.470000] XXX tx seq: 264 txmode 0
[  662.470000] XXX htt tx flags0 5 flags1 3136 len 39 id 0 frags_paddr 07337028, msdu_paddr 06513e2e vdev 0 tid 17 freq 0
[  662.480000] XXX htt tx completion msdu_id 0 discard 0 no_ack 0 success 1
[  662.600000] XXX tx seq: 265 txmode 0
[  662.600000] XXX htt tx flags0 5 flags1 2048 len 156 id 0 frags_paddr 07337028, msdu_paddr 06932028 vdev 0 tid 0 freq 0
[  662.620000] XXX tx seq: 266 txmode 0
[  662.620000] XXX htt tx flags0 5 flags1 2048 len 116 id 1 frags_paddr 07337000, msdu_paddr 06921028 vdev 0 tid 0 freq 0
[  662.630000] XXX htt tx completion msdu_id 0 discard 0 no_ack 1 success 0
[  662.640000] XXX htt tx completion msdu_id 1 discard 0 no_ack 1 success 0
[  663.090000] XXX tx seq: 267 txmode 0

The 'success 1' ones are unicast, the success 0 are mcast (in this case
using the frame's tid, otherwise it would be 16.)

Kind of odd that it's not working, since my earlier snapshot worked...
I guess at worst I can bisect compat-wireless versions but that will
take some time.
Michal Kazior July 13, 2015, 8:13 a.m. UTC | #2
On 13 July 2015 at 03:43, Bob Copeland <me@bobcopeland.com> wrote:
> [trimmed CC to list]
>
> On Sun, Jul 12, 2015 at 10:25:32AM -0400, Bob Copeland wrote:
>> It looks like unicast self-protected action frames (peering) works fine, but
>> broadcast multihop action frames (PREQs) never go over the air.  Does
>> this sound familiar to anyone?
>
> Actually, it's any group addressed frame.  I tried playing with various
> values for htt_data_tx_ext_tid as well as just using the tid on the frame
> (in mesh group addressed frames still have a qos header with tid=0).

Just a quick question: did you try applying the sw crypto/raw mode
patch[1] and using it for mesh?

[1]: https://patchwork.kernel.org/patch/6600721/


Micha?
Bob Copeland July 13, 2015, 10:57 a.m. UTC | #3
On Mon, Jul 13, 2015 at 10:13:59AM +0200, Michal Kazior wrote:
> > Actually, it's any group addressed frame.  I tried playing with various
> > values for htt_data_tx_ext_tid as well as just using the tid on the frame
> > (in mesh group addressed frames still have a qos header with tid=0).
> 
> Just a quick question: did you try applying the sw crypto/raw mode
> patch[1] and using it for mesh?
> 
> [1]: https://patchwork.kernel.org/patch/6600721/

Thanks for the pointer, will give it a try.
Bob Copeland July 20, 2015, 1:57 p.m. UTC | #4
On Mon, Jul 13, 2015 at 10:13:59AM +0200, Michal Kazior wrote:
> On 13 July 2015 at 03:43, Bob Copeland <me@bobcopeland.com> wrote:
> > Actually, it's any group addressed frame.  I tried playing with various
> > values for htt_data_tx_ext_tid as well as just using the tid on the frame
> > (in mesh group addressed frames still have a qos header with tid=0).
> 
> Just a quick question: did you try applying the sw crypto/raw mode
> patch[1] and using it for mesh?
> 
> [1]: https://patchwork.kernel.org/patch/6600721/

I gave this a try and still no luck.  But I have working and non-working
snapshots with only a few months of changes between them so I can bisect
it.
Bob Copeland Aug. 13, 2015, 3:14 a.m. UTC | #5
On Mon, Jul 13, 2015 at 10:13:59AM +0200, Michal Kazior wrote:
> On 13 July 2015 at 03:43, Bob Copeland <me@bobcopeland.com> wrote:
> > [trimmed CC to list]
> >
> > On Sun, Jul 12, 2015 at 10:25:32AM -0400, Bob Copeland wrote:
> >> It looks like unicast self-protected action frames (peering) works fine, but
> >> broadcast multihop action frames (PREQs) never go over the air.  Does
> >> this sound familiar to anyone?
> >
> > Actually, it's any group addressed frame.  I tried playing with various
> > values for htt_data_tx_ext_tid as well as just using the tid on the frame
> > (in mesh group addressed frames still have a qos header with tid=0).
> 
> Just a quick question: did you try applying the sw crypto/raw mode
> patch[1] and using it for mesh?
> 
> [1]: https://patchwork.kernel.org/patch/6600721/

Ok, I have this working again against the latest driver, including that
patch -- I don't think anything was wrong with it, just didn't have both
raw tx and decap set properly and had some baggage from the original
patch to jettison.

Still a bit WIP but this patchset against openwrt r46584 seems to work
for me:

http://bobcopeland.com/kernel/wl/20150812/

The mac80211 bits (except for VHT) are upstream but openwrt doesn't have
them yet.

(BTW thanks to Cococorp for sending me a few APs to make testing a lot easier!)
diff mbox

Patch

diff --git a/drivers/net/wireless/ath/ath10k/htt_tx.c b/drivers/net/wireless/ath/ath10k/htt_tx.c
index a60ef7d..6da3952 100644
--- a/drivers/net/wireless/ath/ath10k/htt_tx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_tx.c
@@ -513,7 +513,8 @@  int ath10k_htt_tx(struct ath10k_htt *htt, struct sk_buff *msdu)
 
 	flags1 |= SM((u16)vdev_id, HTT_DATA_TX_DESC_FLAGS1_VDEV_ID);
 	flags1 |= SM((u16)tid, HTT_DATA_TX_DESC_FLAGS1_EXT_TID);
-	if (msdu->ip_summed == CHECKSUM_PARTIAL) {
+	if (msdu->ip_summed == CHECKSUM_PARTIAL &&
+	    skb_cb->txmode != ATH10K_HW_TXRX_RAW) {
 		flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L3_OFFLOAD;
 		flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L4_OFFLOAD;
 	}
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index aa81880..e136e9c 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -3636,12 +3636,9 @@  static void ath10k_tx(struct ieee80211_hw *hw,
 		ath10k_tx_h_8023(skb);
 		break;
 	case ATH10K_HW_TXRX_RAW:
-		/* FIXME: Packet injection isn't implemented. It should be
-		 * doable with firmware 10.2 on qca988x.
-		 */
-		WARN_ON_ONCE(1);
-		ieee80211_free_txskb(hw, skb);
-		return;
+		ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb);
+		ath10k_tx_h_seq_no(vif, skb);
+		break;
 	}
 
 	if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) {
@@ -4053,6 +4050,7 @@  static int ath10k_add_interface(struct ieee80211_hw *hw,
 	struct ath10k *ar = hw->priv;
 	struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
 	enum wmi_sta_powersave_param param;
+	enum ath10k_hw_txrx_mode tx_mode = ATH10K_HW_TXRX_NATIVE_WIFI;
 	int ret = 0;
 	u32 value;
 	int bit;
@@ -4109,6 +4107,7 @@  static int ath10k_add_interface(struct ieee80211_hw *hw,
 		arvif->vdev_type = WMI_VDEV_TYPE_IBSS;
 		break;
 	case NL80211_IFTYPE_MESH_POINT:
+		tx_mode = ATH10K_HW_TXRX_RAW;
 		arvif->vdev_type = WMI_VDEV_TYPE_AP;
 		break;
 	case NL80211_IFTYPE_AP:
@@ -4193,7 +4192,7 @@  static int ath10k_add_interface(struct ieee80211_hw *hw,
 
 	vdev_param = ar->wmi.vdev_param->tx_encap_type;
 	ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param,
-					ATH10K_HW_TXRX_NATIVE_WIFI);
+					tx_mode);
 	/* 10.X firmware does not support this VDEV parameter. Do not warn */
 	if (ret && ret != -EOPNOTSUPP) {
 		ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n",
@@ -6969,7 +6968,7 @@  int ath10k_mac_register(struct ath10k *ar)
 		goto err_free;
 	}
 
-	ar->hw->netdev_features = NETIF_F_HW_CSUM;
+	/* ar->hw->netdev_features = NETIF_F_HW_CSUM; */
 
 	if (config_enabled(CPTCFG_ATH10K_DFS_CERTIFIED)) {
 		/* Init ath dfs pattern detector */