mac80211 and multiple RX queues (with RSS hashing)

2015-06-12 Thread Johannes Berg
Hi,

We're currently investigating how to best add RSS hashing to the
wireless stack.

Let's say, for the sake of discussion, that we'll add a function to
mac80211 called

ieee80211_rx_napi_mq(struct hw *, struct napi_struct *, struct sk_buff
*);

and (depending on the outcome of the design) the driver would have to
set the skb_queue_mapping to the queue this packet was received on.

For context, there are a few requirements for callers of this function -
here are the ones I'm planning:

 * It would only support (non-null) data frames, management frames must
not be
   passed to the new API, but must be passed to the regular
ieee80211_rx()
   function.
 * I'm not going to support ieee80211_rx_irqsafe() with this API, it
would be
   quite pointless (or a lot of code to have per-queue tasklets?)
 * Won't support software crypto (PN checking can't really work in
parallel)
 * Won't support monitor mode, and probably a few other similar things
(TBD)
 * Won't support defragmentation (fragmented must anyway either be
reassembled
   for hashing or somehow not hashed perhaps)
 * Won't support client powersave in mac80211 - uh ... just say no to
that!
 * For not, I'm not planning to support mesh on this, maybe not even
IBSS.
 * Duplicate detection must be handled by hardware/firmware or similar
   (possibly could be done with HW assist in driver, but clearly that
cannot be
   handled generically in mac80211)
 * RX aggregation reordering done by hardware/firmware or similar
   (same here)
 * require a NAPI struct? (not really sure yet how the stack treats
parallel RX)

Of course these don't really seem fairly natural so far, by the nature
of using multiple queues.

There are a few other areas that are of more concern:
 a) Statistics
Obviously, we can no longer have single counters. Using atomic
counters would
kill much of the benefit of having multiple queues to start with, so
in some
way we need to have multiple counters.
 b) handling AP/GO powersaving clients
With RSS, we can end up with various races - right now we say TX
status and
RX must be serialized by the driver, but clearly that can no longer
be
guaranteed with multiple RX queues.
[also need to check if there are *other* things that require
serialization]
 c) aggregation session timeout/reorder timer handling
There's a single field/timer (for each of this) per session,
obviously it's
not a great idea to hit these from multiple CPUs.

Let's take these one by one:

a) This is probably the biggest one. We have a LOT of statistics that we
keep, and they all rely on RX being serialized. For example, per-station
RX packet and byte counters. Making all of these atomic would be
correct, but would obviously kill much of the performance benefit of
RSS.

As a consequence, I see two possible solutions here:

a1) Just make this the driver's concern, change sta_set_sinfo() to not
provide any (with a few exceptions) mac80211 statistics when multi-queue
RX is used. This could mean the same kind of statistics code is in each
driver, if the driver supports the statistics at all - or it could mean
that we cause a lot of divergence with statistics between drivers.

a2) Alternatively, drivers could tell mac80211 before-hand how many
queues they'll use, pass a queue identifier to mac80211 for each packet
(e.g. in skb's queue_mapping) and have mac80211 gather per-queue
statistics that get combined when read. This means allocating separate
statistics/queue arrays for stations etc. in mac80211, and then using
u64_stats_update_begin() etc. to get a consistent reading like we do
with per-cpu netdev stats already (since my fairly recent patch.)

Clearly this cannot support the "average" values like "average signal
strength" and the "last packet signal strength" might not always be
really the very last packet (which doesn't really matter though) so
those would still have to be excluded and generated by the driver, but
it could mean a bit more code sharing (if more than our driver ends up
using this facility) and more consistency. The downside might be that if
drivers want to do statistics in the firmware or so, they'd waste the
extra cycles on the host. I don't think we're planning to do that for
now though.


b) I think this one is pretty simple - just require the driver to set
AP_LINK_PS and if necessary call ieee80211_sta_ps_transition(). However,
it might require adding more logic for U-APSD support depending on the
hardware design.


c) I'm not really sure about this. I think it really needs hardware
assist.


Does anyone else have any thoughts?

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] staging: wilc1000: remove oswrapper & type file

2015-06-12 Thread Dean Lee
remove OS Wrapper & Type files.
now does not used os wrapper file.
type file is included os wrapper file.
so delete files and rework include method.

Signed-off-by: Dean Lee 
---
 drivers/staging/wilc1000/coreconfigurator.h |  1 -
 drivers/staging/wilc1000/fifo_buffer.c  |  1 -
 drivers/staging/wilc1000/fifo_buffer.h  |  5 +++-
 drivers/staging/wilc1000/host_interface.c   |  1 -
 drivers/staging/wilc1000/wilc_memory.c  |  2 +-
 drivers/staging/wilc1000/wilc_memory.h  |  4 ++-
 drivers/staging/wilc1000/wilc_msgqueue.c|  2 +-
 drivers/staging/wilc1000/wilc_msgqueue.h|  5 
 drivers/staging/wilc1000/wilc_oswrapper.h   | 41 -
 drivers/staging/wilc1000/wilc_sleep.c   |  2 +-
 drivers/staging/wilc1000/wilc_sleep.h   |  3 +++
 drivers/staging/wilc1000/wilc_strutils.c|  2 +-
 drivers/staging/wilc1000/wilc_strutils.h|  4 +++
 drivers/staging/wilc1000/wilc_timer.c   |  2 +-
 drivers/staging/wilc1000/wilc_timer.h   |  3 +++
 drivers/staging/wilc1000/wilc_type.h| 34 
 drivers/staging/wilc1000/wilc_wlan.h|  2 +-
 drivers/staging/wilc1000/wilc_wlan_if.h | 10 ++-
 18 files changed, 37 insertions(+), 87 deletions(-)
 delete mode 100644 drivers/staging/wilc1000/wilc_oswrapper.h
 delete mode 100644 drivers/staging/wilc1000/wilc_type.h

diff --git a/drivers/staging/wilc1000/coreconfigurator.h 
b/drivers/staging/wilc1000/coreconfigurator.h
index 697ceb1..f2f6e64 100644
--- a/drivers/staging/wilc1000/coreconfigurator.h
+++ b/drivers/staging/wilc1000/coreconfigurator.h
@@ -12,7 +12,6 @@
 #ifndef CORECONFIGURATOR_H
 #define CORECONFIGURATOR_H
 
-#include "wilc_oswrapper.h"
 #include "wilc_wlan_if.h"
 /*/
 /* Constants */
diff --git a/drivers/staging/wilc1000/fifo_buffer.c 
b/drivers/staging/wilc1000/fifo_buffer.c
index c801406..b6c07cf 100644
--- a/drivers/staging/wilc1000/fifo_buffer.c
+++ b/drivers/staging/wilc1000/fifo_buffer.c
@@ -1,6 +1,5 @@
 
 
-#include "wilc_oswrapper.h"
 #include "fifo_buffer.h"
 
 
diff --git a/drivers/staging/wilc1000/fifo_buffer.h 
b/drivers/staging/wilc1000/fifo_buffer.h
index 57f7732..7b76998 100644
--- a/drivers/staging/wilc1000/fifo_buffer.h
+++ b/drivers/staging/wilc1000/fifo_buffer.h
@@ -1,5 +1,8 @@
 
-#include "wilc_oswrapper.h"
+#include 
+#include 
+#include "wilc_memory.h"
+#include "wilc_strutils.h"
 
 
 #define tHANDLEvoid *
diff --git a/drivers/staging/wilc1000/host_interface.c 
b/drivers/staging/wilc1000/host_interface.c
index a1e90a5..60245b1 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -1,5 +1,4 @@
 #include "host_interface.h"
-#include "wilc_oswrapper.h"
 #include "itypes.h"
 #include "coreconfigurator.h"
 
diff --git a/drivers/staging/wilc1000/wilc_memory.c 
b/drivers/staging/wilc1000/wilc_memory.c
index 080fa61..ca6850c7 100644
--- a/drivers/staging/wilc1000/wilc_memory.c
+++ b/drivers/staging/wilc1000/wilc_memory.c
@@ -1,5 +1,5 @@
 
-#include "wilc_oswrapper.h"
+#include "wilc_memory.h"
 
 /*!
  *  @authorsyounan
diff --git a/drivers/staging/wilc1000/wilc_memory.h 
b/drivers/staging/wilc1000/wilc_memory.h
index 93642d0..a7a80e5 100644
--- a/drivers/staging/wilc1000/wilc_memory.h
+++ b/drivers/staging/wilc1000/wilc_memory.h
@@ -10,6 +10,9 @@
  *  @version   1.0
  */
 
+#include 
+#include 
+
 /*!
  *  @struct tstrWILC_MemoryAttrs
  *  @brief Memory API options
@@ -234,4 +237,3 @@ void WILC_MemoryFree(const void *pvBlock, 
tstrWILC_MemoryAttrs *strAttrs,
 
 
 #endif
-
diff --git a/drivers/staging/wilc1000/wilc_msgqueue.c 
b/drivers/staging/wilc1000/wilc_msgqueue.c
index 04fe5a5..16bcef4 100644
--- a/drivers/staging/wilc1000/wilc_msgqueue.c
+++ b/drivers/staging/wilc1000/wilc_msgqueue.c
@@ -1,5 +1,5 @@
 
-#include "wilc_oswrapper.h"
+#include "wilc_msgqueue.h"
 #include 
 
 /*!
diff --git a/drivers/staging/wilc1000/wilc_msgqueue.h 
b/drivers/staging/wilc1000/wilc_msgqueue.h
index 2ca02db..35b1001 100644
--- a/drivers/staging/wilc1000/wilc_msgqueue.h
+++ b/drivers/staging/wilc1000/wilc_msgqueue.h
@@ -10,6 +10,11 @@
  *  @version   1.0
  */
 
+#include "wilc_platform.h"
+#include "wilc_errorsupport.h"
+#include "wilc_memory.h"
+#include "wilc_strutils.h"
+
 /*!
  *  @struct tstrWILC_MsgQueueAttrs
  *  @brief Message Queue API options
diff --git a/drivers/staging/wilc1000/wilc_oswrapper.h 
b/drivers/staging/wilc1000/wilc_oswrapper.h
deleted file mode 100644
index e97aa96..000
--- a/drivers/staging/wilc1000/wilc_oswrapper.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef __WILC_OSWRAPPER_H__
-#define __WILC_OSWRAPPER_H__
-
-/*!
- *  @file  wilc_oswrapper.h
- *  @brief Top level OS Wrapper, include this file and it will include all
- *  other files as necessary
- *  @authorsyounan
- *  @d

Re: [PATCH] staging: wilc1000: remove oswrapper & type file

2015-06-12 Thread Konrad Zapalowicz
On 06/12, Dean Lee wrote:
> remove OS Wrapper & Type files.
> now does not used os wrapper file.
> type file is included os wrapper file.
> so delete files and rework include method.

I do not understand the commit message and it does not parse well.

 - konrad

> 
> Signed-off-by: Dean Lee 
> ---
>  drivers/staging/wilc1000/coreconfigurator.h |  1 -
>  drivers/staging/wilc1000/fifo_buffer.c  |  1 -
>  drivers/staging/wilc1000/fifo_buffer.h  |  5 +++-
>  drivers/staging/wilc1000/host_interface.c   |  1 -
>  drivers/staging/wilc1000/wilc_memory.c  |  2 +-
>  drivers/staging/wilc1000/wilc_memory.h  |  4 ++-
>  drivers/staging/wilc1000/wilc_msgqueue.c|  2 +-
>  drivers/staging/wilc1000/wilc_msgqueue.h|  5 
>  drivers/staging/wilc1000/wilc_oswrapper.h   | 41 
> -
>  drivers/staging/wilc1000/wilc_sleep.c   |  2 +-
>  drivers/staging/wilc1000/wilc_sleep.h   |  3 +++
>  drivers/staging/wilc1000/wilc_strutils.c|  2 +-
>  drivers/staging/wilc1000/wilc_strutils.h|  4 +++
>  drivers/staging/wilc1000/wilc_timer.c   |  2 +-
>  drivers/staging/wilc1000/wilc_timer.h   |  3 +++
>  drivers/staging/wilc1000/wilc_type.h| 34 
>  drivers/staging/wilc1000/wilc_wlan.h|  2 +-
>  drivers/staging/wilc1000/wilc_wlan_if.h | 10 ++-
>  18 files changed, 37 insertions(+), 87 deletions(-)
>  delete mode 100644 drivers/staging/wilc1000/wilc_oswrapper.h
>  delete mode 100644 drivers/staging/wilc1000/wilc_type.h
> 
> diff --git a/drivers/staging/wilc1000/coreconfigurator.h 
> b/drivers/staging/wilc1000/coreconfigurator.h
> index 697ceb1..f2f6e64 100644
> --- a/drivers/staging/wilc1000/coreconfigurator.h
> +++ b/drivers/staging/wilc1000/coreconfigurator.h
> @@ -12,7 +12,6 @@
>  #ifndef CORECONFIGURATOR_H
>  #define CORECONFIGURATOR_H
>  
> -#include "wilc_oswrapper.h"
>  #include "wilc_wlan_if.h"
>  
> /*/
>  /* Constants 
> */
> diff --git a/drivers/staging/wilc1000/fifo_buffer.c 
> b/drivers/staging/wilc1000/fifo_buffer.c
> index c801406..b6c07cf 100644
> --- a/drivers/staging/wilc1000/fifo_buffer.c
> +++ b/drivers/staging/wilc1000/fifo_buffer.c
> @@ -1,6 +1,5 @@
>  
>  
> -#include "wilc_oswrapper.h"
>  #include "fifo_buffer.h"
>  
>  
> diff --git a/drivers/staging/wilc1000/fifo_buffer.h 
> b/drivers/staging/wilc1000/fifo_buffer.h
> index 57f7732..7b76998 100644
> --- a/drivers/staging/wilc1000/fifo_buffer.h
> +++ b/drivers/staging/wilc1000/fifo_buffer.h
> @@ -1,5 +1,8 @@
>  
> -#include "wilc_oswrapper.h"
> +#include 
> +#include 
> +#include "wilc_memory.h"
> +#include "wilc_strutils.h"
>  
>  
>  #define tHANDLE  void *
> diff --git a/drivers/staging/wilc1000/host_interface.c 
> b/drivers/staging/wilc1000/host_interface.c
> index a1e90a5..60245b1 100644
> --- a/drivers/staging/wilc1000/host_interface.c
> +++ b/drivers/staging/wilc1000/host_interface.c
> @@ -1,5 +1,4 @@
>  #include "host_interface.h"
> -#include "wilc_oswrapper.h"
>  #include "itypes.h"
>  #include "coreconfigurator.h"
>  
> diff --git a/drivers/staging/wilc1000/wilc_memory.c 
> b/drivers/staging/wilc1000/wilc_memory.c
> index 080fa61..ca6850c7 100644
> --- a/drivers/staging/wilc1000/wilc_memory.c
> +++ b/drivers/staging/wilc1000/wilc_memory.c
> @@ -1,5 +1,5 @@
>  
> -#include "wilc_oswrapper.h"
> +#include "wilc_memory.h"
>  
>  /*!
>   *  @author  syounan
> diff --git a/drivers/staging/wilc1000/wilc_memory.h 
> b/drivers/staging/wilc1000/wilc_memory.h
> index 93642d0..a7a80e5 100644
> --- a/drivers/staging/wilc1000/wilc_memory.h
> +++ b/drivers/staging/wilc1000/wilc_memory.h
> @@ -10,6 +10,9 @@
>   *  @version 1.0
>   */
>  
> +#include 
> +#include 
> +
>  /*!
>   *  @struct tstrWILC_MemoryAttrs
>   *  @brief   Memory API options
> @@ -234,4 +237,3 @@ void WILC_MemoryFree(const void *pvBlock, 
> tstrWILC_MemoryAttrs *strAttrs,
>  
>  
>  #endif
> -
> diff --git a/drivers/staging/wilc1000/wilc_msgqueue.c 
> b/drivers/staging/wilc1000/wilc_msgqueue.c
> index 04fe5a5..16bcef4 100644
> --- a/drivers/staging/wilc1000/wilc_msgqueue.c
> +++ b/drivers/staging/wilc1000/wilc_msgqueue.c
> @@ -1,5 +1,5 @@
>  
> -#include "wilc_oswrapper.h"
> +#include "wilc_msgqueue.h"
>  #include 
>  
>  /*!
> diff --git a/drivers/staging/wilc1000/wilc_msgqueue.h 
> b/drivers/staging/wilc1000/wilc_msgqueue.h
> index 2ca02db..35b1001 100644
> --- a/drivers/staging/wilc1000/wilc_msgqueue.h
> +++ b/drivers/staging/wilc1000/wilc_msgqueue.h
> @@ -10,6 +10,11 @@
>   *  @version 1.0
>   */
>  
> +#include "wilc_platform.h"
> +#include "wilc_errorsupport.h"
> +#include "wilc_memory.h"
> +#include "wilc_strutils.h"
> +
>  /*!
>   *  @struct tstrWILC_MsgQueueAttrs
>   *  @brief   Message Queue API options
> diff --git a/drivers/staging/wilc1000/wilc_oswrapper.h 
> b/drivers/staging/wilc1000/wilc_o

[PATCH] staging: wilc1000: remove warnings reported by checkpatch.pl.

2015-06-12 Thread Dean Lee
Remove the following warnings in the wilc_log.h:
- unnecessary whitespace before a quoted newline
- line over 80 characters
- single statement macros should not use a do {} while (0) loop.

Signed-off-by: Dean Lee 
---
 drivers/staging/wilc1000/wilc_log.h | 53 +
 1 file changed, 30 insertions(+), 23 deletions(-)

diff --git a/drivers/staging/wilc1000/wilc_log.h 
b/drivers/staging/wilc1000/wilc_log.h
index 2269ebd..93f467a 100644
--- a/drivers/staging/wilc1000/wilc_log.h
+++ b/drivers/staging/wilc1000/wilc_log.h
@@ -2,46 +2,53 @@
 #define __WILC_LOG_H__
 
 /* Errors will always get printed */
-#define WILC_ERROR(...) do {  WILC_PRINTF("(ERR)(%s:%d) ", __WILC_FUNCTION__, 
__WILC_LINE__); \
- WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_ERROR(...)
\
+do {   \
+   WILC_PRINTF("(ERR)(%s:%d)", __WILC_FUNCTION__, __WILC_LINE__);  \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 
 /* Wraning only printed if verbosity is 1 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 0)
-#define WILC_WARN(...) do { WILC_PRINTF("(WRN)"); \
-   WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_WARN(...) \
+do {   \
+   WILC_PRINTF("(WRN)");   \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_WARN(...) (0)
+#define WILC_WARN(...) (0)
 #endif
 
 /* Info only printed if verbosity is 2 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 1)
-#define WILC_INFO(...) do {  WILC_PRINTF("(INF)"); \
-WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_INFO(...) \
+do {   \
+   WILC_PRINTF("(INF)");   \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_INFO(...) (0)
+#define WILC_INFO(...) (0)
 #endif
 
 /* Debug is only printed if verbosity is 3 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 2)
-#define WILC_DBG(...) do { WILC_PRINTF("(DBG)(%s:%d) ", __WILC_FUNCTION__, 
__WILC_LINE__); \
-  WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
-
+#define WILC_DBG(...)  \
+do {   \
+   WILC_PRINTF("(DBG)(%s:%d)", __WILC_FUNCTION__, __WILC_LINE__);  \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_DBG(...) (0)
+#define WILC_DBG(...)  (0)
 #endif
 
 /* Function In/Out is only printed if verbosity is 4 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 3)
-#define WILC_FN_IN do { WILC_PRINTF("(FIN) (%s:%d) \n", __WILC_FUNCTION__, 
__WILC_LINE__);  } while (0)
-#define WILC_FN_OUT(ret) do { WILC_PRINTF("(FOUT) (%s:%d) %d.\n", 
__WILC_FUNCTION__, __WILC_LINE__, (ret));  } while (0)
+#define WILC_FN_IN \
+   WILC_PRINTF("(FIN)(%s:%d)\n", __WILC_FUNCTION__, __WILC_LINE__)
+#define WILC_FN_OUT(ret)   \
+   WILC_PRINTF("(FOUT)(%s:%d)%d\n", __WILC_FUNCTION__, __WILC_LINE__, ret)
 #else
-#define WILC_FN_IN (0)
-#define WILC_FN_OUT(ret) (0)
+#define WILC_FN_IN (0)
+#define WILC_FN_OUT(ret)   (0)
+#endif
 #endif
-
-
-#endif
\ No newline at end of file
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] staging: wilc1000: remove oswrapper & type file

2015-06-12 Thread Konrad Zapalowicz
On 06/12, Dean.lee wrote:
> 
> 
> On 2015๋…„ 06์›” 12์ผ 18:17, Konrad Zapalowicz wrote:
> >On 06/12, Dean Lee wrote:
> >>remove OS Wrapper & Type files.
> >>now does not used os wrapper file.
> >>type file is included os wrapper file.
> >>so delete files and rework include method.
> >I do not understand the commit message and it does not parse well.
> >
> >  - konrad
> Sorry. my english language skill is very poor...:'-(
> 
> remove OS Wrapper function(wilc_oswrapper.h) is in our plan.
> i try removed OS Wrapper function and it's done.
> and i found wilc_type.h file is does not used it.
> so i deleted them and modify #include line in another file.

This is better now. Just focus on what has been done [that is do not
write 'try'] and send the v2 of this patch with updated commit message.

Thanks

 - konrad
 
> thanks for your comment.
> 
> B.R
> 
> dean
> 
> >>Signed-off-by: Dean Lee 
> >>---
> >>  drivers/staging/wilc1000/coreconfigurator.h |  1 -
> >>  drivers/staging/wilc1000/fifo_buffer.c  |  1 -
> >>  drivers/staging/wilc1000/fifo_buffer.h  |  5 +++-
> >>  drivers/staging/wilc1000/host_interface.c   |  1 -
> >>  drivers/staging/wilc1000/wilc_memory.c  |  2 +-
> >>  drivers/staging/wilc1000/wilc_memory.h  |  4 ++-
> >>  drivers/staging/wilc1000/wilc_msgqueue.c|  2 +-
> >>  drivers/staging/wilc1000/wilc_msgqueue.h|  5 
> >>  drivers/staging/wilc1000/wilc_oswrapper.h   | 41 
> >> -
> >>  drivers/staging/wilc1000/wilc_sleep.c   |  2 +-
> >>  drivers/staging/wilc1000/wilc_sleep.h   |  3 +++
> >>  drivers/staging/wilc1000/wilc_strutils.c|  2 +-
> >>  drivers/staging/wilc1000/wilc_strutils.h|  4 +++
> >>  drivers/staging/wilc1000/wilc_timer.c   |  2 +-
> >>  drivers/staging/wilc1000/wilc_timer.h   |  3 +++
> >>  drivers/staging/wilc1000/wilc_type.h| 34 
> >>  drivers/staging/wilc1000/wilc_wlan.h|  2 +-
> >>  drivers/staging/wilc1000/wilc_wlan_if.h | 10 ++-
> >>  18 files changed, 37 insertions(+), 87 deletions(-)
> >>  delete mode 100644 drivers/staging/wilc1000/wilc_oswrapper.h
> >>  delete mode 100644 drivers/staging/wilc1000/wilc_type.h
> >>
> >>diff --git a/drivers/staging/wilc1000/coreconfigurator.h 
> >>b/drivers/staging/wilc1000/coreconfigurator.h
> >>index 697ceb1..f2f6e64 100644
> >>--- a/drivers/staging/wilc1000/coreconfigurator.h
> >>+++ b/drivers/staging/wilc1000/coreconfigurator.h
> >>@@ -12,7 +12,6 @@
> >>  #ifndef CORECONFIGURATOR_H
> >>  #define CORECONFIGURATOR_H
> >>-#include "wilc_oswrapper.h"
> >>  #include "wilc_wlan_if.h"
> >>  
> >> /*/
> >>  /* Constants  
> >>*/
> >>diff --git a/drivers/staging/wilc1000/fifo_buffer.c 
> >>b/drivers/staging/wilc1000/fifo_buffer.c
> >>index c801406..b6c07cf 100644
> >>--- a/drivers/staging/wilc1000/fifo_buffer.c
> >>+++ b/drivers/staging/wilc1000/fifo_buffer.c
> >>@@ -1,6 +1,5 @@
> >>-#include "wilc_oswrapper.h"
> >>  #include "fifo_buffer.h"
> >>diff --git a/drivers/staging/wilc1000/fifo_buffer.h 
> >>b/drivers/staging/wilc1000/fifo_buffer.h
> >>index 57f7732..7b76998 100644
> >>--- a/drivers/staging/wilc1000/fifo_buffer.h
> >>+++ b/drivers/staging/wilc1000/fifo_buffer.h
> >>@@ -1,5 +1,8 @@
> >>-#include "wilc_oswrapper.h"
> >>+#include 
> >>+#include 
> >>+#include "wilc_memory.h"
> >>+#include "wilc_strutils.h"
> >>  #define tHANDLE   void *
> >>diff --git a/drivers/staging/wilc1000/host_interface.c 
> >>b/drivers/staging/wilc1000/host_interface.c
> >>index a1e90a5..60245b1 100644
> >>--- a/drivers/staging/wilc1000/host_interface.c
> >>+++ b/drivers/staging/wilc1000/host_interface.c
> >>@@ -1,5 +1,4 @@
> >>  #include "host_interface.h"
> >>-#include "wilc_oswrapper.h"
> >>  #include "itypes.h"
> >>  #include "coreconfigurator.h"
> >>diff --git a/drivers/staging/wilc1000/wilc_memory.c 
> >>b/drivers/staging/wilc1000/wilc_memory.c
> >>index 080fa61..ca6850c7 100644
> >>--- a/drivers/staging/wilc1000/wilc_memory.c
> >>+++ b/drivers/staging/wilc1000/wilc_memory.c
> >>@@ -1,5 +1,5 @@
> >>-#include "wilc_oswrapper.h"
> >>+#include "wilc_memory.h"
> >>  /*!
> >>   *  @author   syounan
> >>diff --git a/drivers/staging/wilc1000/wilc_memory.h 
> >>b/drivers/staging/wilc1000/wilc_memory.h
> >>index 93642d0..a7a80e5 100644
> >>--- a/drivers/staging/wilc1000/wilc_memory.h
> >>+++ b/drivers/staging/wilc1000/wilc_memory.h
> >>@@ -10,6 +10,9 @@
> >>   *  @version  1.0
> >>   */
> >>+#include 
> >>+#include 
> >>+
> >>  /*!
> >>   *  @struct tstrWILC_MemoryAttrs
> >>   *  @briefMemory API options
> >>@@ -234,4 +237,3 @@ void WILC_MemoryFree(const void *pvBlock, 
> >>tstrWILC_MemoryAttrs *strAttrs,
> >>  #endif
> >>-
> >>diff --git a/drivers/staging/wilc1000/wilc_msgqueue.c 
> >>b/drivers/staging/wilc1000/wilc_msgqueue.c
> >>index 04fe5a5..16bcef4 100644
> >>--- a/drivers/st

[PATCH v2] staging: wilc1000: remove oswrapper & type file

2015-06-12 Thread Dean Lee
remove OS Wrapper function(wilc_oswrapper.h) is in our plan.
i try removed OS Wrapper function and it's done.
and i found wilc_type.h file is does not used it.
so i deleted them and modify #include line in another file.

Signed-off-by: Dean Lee 
---
Change
 modify commit message.
---
 drivers/staging/wilc1000/coreconfigurator.h |  1 -
 drivers/staging/wilc1000/fifo_buffer.c  |  1 -
 drivers/staging/wilc1000/fifo_buffer.h  |  5 ++-
 drivers/staging/wilc1000/host_interface.c   |  1 -
 drivers/staging/wilc1000/wilc_log.h | 53 -
 drivers/staging/wilc1000/wilc_memory.c  |  2 +-
 drivers/staging/wilc1000/wilc_memory.h  |  4 ++-
 drivers/staging/wilc1000/wilc_msgqueue.c|  2 +-
 drivers/staging/wilc1000/wilc_msgqueue.h|  5 +++
 drivers/staging/wilc1000/wilc_oswrapper.h   | 41 --
 drivers/staging/wilc1000/wilc_sleep.c   |  2 +-
 drivers/staging/wilc1000/wilc_sleep.h   |  3 ++
 drivers/staging/wilc1000/wilc_strutils.c|  2 +-
 drivers/staging/wilc1000/wilc_strutils.h|  4 +++
 drivers/staging/wilc1000/wilc_timer.c   |  2 +-
 drivers/staging/wilc1000/wilc_timer.h   |  3 ++
 drivers/staging/wilc1000/wilc_type.h| 34 --
 drivers/staging/wilc1000/wilc_wlan.h|  2 +-
 drivers/staging/wilc1000/wilc_wlan_if.h | 10 +-
 19 files changed, 67 insertions(+), 110 deletions(-)
 delete mode 100644 drivers/staging/wilc1000/wilc_oswrapper.h
 delete mode 100644 drivers/staging/wilc1000/wilc_type.h

diff --git a/drivers/staging/wilc1000/coreconfigurator.h 
b/drivers/staging/wilc1000/coreconfigurator.h
index 697ceb1..f2f6e64 100644
--- a/drivers/staging/wilc1000/coreconfigurator.h
+++ b/drivers/staging/wilc1000/coreconfigurator.h
@@ -12,7 +12,6 @@
 #ifndef CORECONFIGURATOR_H
 #define CORECONFIGURATOR_H
 
-#include "wilc_oswrapper.h"
 #include "wilc_wlan_if.h"
 /*/
 /* Constants */
diff --git a/drivers/staging/wilc1000/fifo_buffer.c 
b/drivers/staging/wilc1000/fifo_buffer.c
index c801406..b6c07cf 100644
--- a/drivers/staging/wilc1000/fifo_buffer.c
+++ b/drivers/staging/wilc1000/fifo_buffer.c
@@ -1,6 +1,5 @@
 
 
-#include "wilc_oswrapper.h"
 #include "fifo_buffer.h"
 
 
diff --git a/drivers/staging/wilc1000/fifo_buffer.h 
b/drivers/staging/wilc1000/fifo_buffer.h
index 57f7732..7b76998 100644
--- a/drivers/staging/wilc1000/fifo_buffer.h
+++ b/drivers/staging/wilc1000/fifo_buffer.h
@@ -1,5 +1,8 @@
 
-#include "wilc_oswrapper.h"
+#include 
+#include 
+#include "wilc_memory.h"
+#include "wilc_strutils.h"
 
 
 #define tHANDLEvoid *
diff --git a/drivers/staging/wilc1000/host_interface.c 
b/drivers/staging/wilc1000/host_interface.c
index a1e90a5..60245b1 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -1,5 +1,4 @@
 #include "host_interface.h"
-#include "wilc_oswrapper.h"
 #include "itypes.h"
 #include "coreconfigurator.h"
 
diff --git a/drivers/staging/wilc1000/wilc_log.h 
b/drivers/staging/wilc1000/wilc_log.h
index 2269ebd..93f467a 100644
--- a/drivers/staging/wilc1000/wilc_log.h
+++ b/drivers/staging/wilc1000/wilc_log.h
@@ -2,46 +2,53 @@
 #define __WILC_LOG_H__
 
 /* Errors will always get printed */
-#define WILC_ERROR(...) do {  WILC_PRINTF("(ERR)(%s:%d) ", __WILC_FUNCTION__, 
__WILC_LINE__); \
- WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_ERROR(...)
\
+do {   \
+   WILC_PRINTF("(ERR)(%s:%d)", __WILC_FUNCTION__, __WILC_LINE__);  \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 
 /* Wraning only printed if verbosity is 1 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 0)
-#define WILC_WARN(...) do { WILC_PRINTF("(WRN)"); \
-   WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_WARN(...) \
+do {   \
+   WILC_PRINTF("(WRN)");   \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_WARN(...) (0)
+#define WILC_WARN(...) (0)
 #endif
 
 /* Info only printed if verbosity is 2 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 1)
-#define WILC_INFO(...) do {  WILC_PRINTF("(INF)"); \
-WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_INFO(...) \
+do {   \
+   WILC_PRINTF("(INF)");   \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_INFO(...) (0)
+#define WILC_INFO(...) (0)
 #endif
 
 /* Debug is only printed if verbosity is 3 or more */
 #

[PATCH v3] staging: wilc1000: remove oswrapper & type file

2015-06-12 Thread Dean Lee
remove OS Wrapper function(wilc_oswrapper.h) is in our plan.
i removed OS Wrapper function and it's done.
and i found wilc_type.h file is does not used it.
so i deleted them and modify #include line in another file.

Signed-off-by: Dean Lee 
---
 drivers/staging/wilc1000/coreconfigurator.h |  1 -
 drivers/staging/wilc1000/fifo_buffer.c  |  1 -
 drivers/staging/wilc1000/fifo_buffer.h  |  5 ++-
 drivers/staging/wilc1000/host_interface.c   |  1 -
 drivers/staging/wilc1000/wilc_log.h | 53 -
 drivers/staging/wilc1000/wilc_memory.c  |  2 +-
 drivers/staging/wilc1000/wilc_memory.h  |  4 ++-
 drivers/staging/wilc1000/wilc_msgqueue.c|  2 +-
 drivers/staging/wilc1000/wilc_msgqueue.h|  5 +++
 drivers/staging/wilc1000/wilc_oswrapper.h   | 41 --
 drivers/staging/wilc1000/wilc_sleep.c   |  2 +-
 drivers/staging/wilc1000/wilc_sleep.h   |  3 ++
 drivers/staging/wilc1000/wilc_strutils.c|  2 +-
 drivers/staging/wilc1000/wilc_strutils.h|  4 +++
 drivers/staging/wilc1000/wilc_timer.c   |  2 +-
 drivers/staging/wilc1000/wilc_timer.h   |  3 ++
 drivers/staging/wilc1000/wilc_type.h| 34 --
 drivers/staging/wilc1000/wilc_wlan.h|  2 +-
 drivers/staging/wilc1000/wilc_wlan_if.h | 10 +-
 19 files changed, 67 insertions(+), 110 deletions(-)
 delete mode 100644 drivers/staging/wilc1000/wilc_oswrapper.h
 delete mode 100644 drivers/staging/wilc1000/wilc_type.h

diff --git a/drivers/staging/wilc1000/coreconfigurator.h 
b/drivers/staging/wilc1000/coreconfigurator.h
index 697ceb1..f2f6e64 100644
--- a/drivers/staging/wilc1000/coreconfigurator.h
+++ b/drivers/staging/wilc1000/coreconfigurator.h
@@ -12,7 +12,6 @@
 #ifndef CORECONFIGURATOR_H
 #define CORECONFIGURATOR_H
 
-#include "wilc_oswrapper.h"
 #include "wilc_wlan_if.h"
 /*/
 /* Constants */
diff --git a/drivers/staging/wilc1000/fifo_buffer.c 
b/drivers/staging/wilc1000/fifo_buffer.c
index c801406..b6c07cf 100644
--- a/drivers/staging/wilc1000/fifo_buffer.c
+++ b/drivers/staging/wilc1000/fifo_buffer.c
@@ -1,6 +1,5 @@
 
 
-#include "wilc_oswrapper.h"
 #include "fifo_buffer.h"
 
 
diff --git a/drivers/staging/wilc1000/fifo_buffer.h 
b/drivers/staging/wilc1000/fifo_buffer.h
index 57f7732..7b76998 100644
--- a/drivers/staging/wilc1000/fifo_buffer.h
+++ b/drivers/staging/wilc1000/fifo_buffer.h
@@ -1,5 +1,8 @@
 
-#include "wilc_oswrapper.h"
+#include 
+#include 
+#include "wilc_memory.h"
+#include "wilc_strutils.h"
 
 
 #define tHANDLEvoid *
diff --git a/drivers/staging/wilc1000/host_interface.c 
b/drivers/staging/wilc1000/host_interface.c
index a1e90a5..60245b1 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -1,5 +1,4 @@
 #include "host_interface.h"
-#include "wilc_oswrapper.h"
 #include "itypes.h"
 #include "coreconfigurator.h"
 
diff --git a/drivers/staging/wilc1000/wilc_log.h 
b/drivers/staging/wilc1000/wilc_log.h
index 2269ebd..93f467a 100644
--- a/drivers/staging/wilc1000/wilc_log.h
+++ b/drivers/staging/wilc1000/wilc_log.h
@@ -2,46 +2,53 @@
 #define __WILC_LOG_H__
 
 /* Errors will always get printed */
-#define WILC_ERROR(...) do {  WILC_PRINTF("(ERR)(%s:%d) ", __WILC_FUNCTION__, 
__WILC_LINE__); \
- WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_ERROR(...)
\
+do {   \
+   WILC_PRINTF("(ERR)(%s:%d)", __WILC_FUNCTION__, __WILC_LINE__);  \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 
 /* Wraning only printed if verbosity is 1 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 0)
-#define WILC_WARN(...) do { WILC_PRINTF("(WRN)"); \
-   WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_WARN(...) \
+do {   \
+   WILC_PRINTF("(WRN)");   \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_WARN(...) (0)
+#define WILC_WARN(...) (0)
 #endif
 
 /* Info only printed if verbosity is 2 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 1)
-#define WILC_INFO(...) do {  WILC_PRINTF("(INF)"); \
-WILC_PRINTF(__VA_ARGS__); \
-   } while (0)
+#define WILC_INFO(...) \
+do {   \
+   WILC_PRINTF("(INF)");   \
+   WILC_PRINTF(__VA_ARGS__);   \
+} while (0)
 #else
-#define WILC_INFO(...) (0)
+#define WILC_INFO(...) (0)
 #endif
 
 /* Debug is only printed if verbosity is 3 or more */
 #if (WILC_LOG_VERBOSITY_LEVEL > 2)
-#def

[PATCH] staging: wilc1000: update TODO list

2015-06-12 Thread Dean Lee
remove complete OS wrapper functions.

Signed-off-by: Dean Lee 
---
 drivers/staging/wilc1000/TODO | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/staging/wilc1000/TODO b/drivers/staging/wilc1000/TODO
index 95199d8..e876008 100644
--- a/drivers/staging/wilc1000/TODO
+++ b/drivers/staging/wilc1000/TODO
@@ -1,6 +1,5 @@
 TODO:
 - remove the defined feature as kernel versions
-- remove OS wrapper functions
 - remove custom debug and tracing functions
 - rework comments and function headers(also coding style)
 - replace all semaphores with mutexes or completions
-- 
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] staging: wilc1000: update TODO list

2015-06-12 Thread Sudip Mukherjee
On Fri, Jun 12, 2015 at 07:23:11PM +0900, Dean Lee wrote:
> remove complete OS wrapper functions.
just a minor thing. It will be easy if you send your patches in series
instead of separate patches. your patch "remove oswrapper & type file"
is dependent on one of the previous patch that you have sent today. If
for some reason that previous patch is not applied then
"remove oswrapper & type file" will not apply and then this patch will
have no meaning.

regards
sudip

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] mac80211: don't store napi struct

2015-06-12 Thread Johannes Berg
From: Johannes Berg 

When introducing multiple RX queues, a single NAPI struct will not
be sufficient. Instead of trying to store multiple, simply change
the API to have the NAPI struct passed to the RX function. This of
course means that drivers using rx_irqsafe() cannot use NAPI, but
that seems a reasonable trade-off, particularly since only two of
all drivers are currently using it at all.

While at it, we can now remove the IEEE80211_RX_REORDER_TIMER flag
again since this code path cannot have a napi struct anyway.

Signed-off-by: Johannes Berg 
---
 drivers/net/wireless/iwlwifi/dvm/dev.h  |  2 ++
 drivers/net/wireless/iwlwifi/dvm/main.c |  3 ++-
 drivers/net/wireless/iwlwifi/dvm/rx.c   |  2 +-
 drivers/net/wireless/iwlwifi/mvm/mvm.h  |  1 +
 drivers/net/wireless/iwlwifi/mvm/ops.c  |  3 ++-
 drivers/net/wireless/iwlwifi/mvm/rx.c   |  2 +-
 include/net/mac80211.h  | 37 +
 net/mac80211/ieee80211_i.h  |  6 +-
 net/mac80211/main.c | 12 ---
 net/mac80211/rx.c   | 18 +---
 10 files changed, 44 insertions(+), 42 deletions(-)

diff --git a/drivers/net/wireless/iwlwifi/dvm/dev.h 
b/drivers/net/wireless/iwlwifi/dvm/dev.h
index 3811878ab9cd..074977ede343 100644
--- a/drivers/net/wireless/iwlwifi/dvm/dev.h
+++ b/drivers/net/wireless/iwlwifi/dvm/dev.h
@@ -669,6 +669,8 @@ struct iwl_priv {
/* ieee device used by generic ieee processing code */
struct ieee80211_hw *hw;
 
+   struct napi_struct *napi;
+
struct list_head calib_results;
 
struct workqueue_struct *workqueue;
diff --git a/drivers/net/wireless/iwlwifi/dvm/main.c 
b/drivers/net/wireless/iwlwifi/dvm/main.c
index 234e30f498b2..644819563cf0 100644
--- a/drivers/net/wireless/iwlwifi/dvm/main.c
+++ b/drivers/net/wireless/iwlwifi/dvm/main.c
@@ -2037,7 +2037,8 @@ static void iwl_napi_add(struct iwl_op_mode *op_mode,
 {
struct iwl_priv *priv = IWL_OP_MODE_GET_DVM(op_mode);
 
-   ieee80211_napi_add(priv->hw, napi, napi_dev, poll, weight);
+   netif_napi_add(napi_dev, napi, poll, weight);
+   priv->napi = napi;
 }
 
 static const struct iwl_op_mode_ops iwl_dvm_ops = {
diff --git a/drivers/net/wireless/iwlwifi/dvm/rx.c 
b/drivers/net/wireless/iwlwifi/dvm/rx.c
index debec963c610..5a91f5d6b1dc 100644
--- a/drivers/net/wireless/iwlwifi/dvm/rx.c
+++ b/drivers/net/wireless/iwlwifi/dvm/rx.c
@@ -786,7 +786,7 @@ static void iwlagn_pass_packet_to_mac80211(struct iwl_priv 
*priv,
 
memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats));
 
-   ieee80211_rx(priv->hw, skb);
+   ieee80211_rx_napi(priv->hw, skb, priv->napi);
 }
 
 static u32 iwlagn_translate_rx_status(struct iwl_priv *priv, u32 decrypt_in)
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h 
b/drivers/net/wireless/iwlwifi/mvm/mvm.h
index 2d4bad5fe825..605f57a2c6be 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mvm.h
+++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h
@@ -559,6 +559,7 @@ struct iwl_mvm {
const struct iwl_cfg *cfg;
struct iwl_phy_db *phy_db;
struct ieee80211_hw *hw;
+   struct napi_struct *napi;
 
/* for protecting access to iwl_mvm */
struct mutex mutex;
diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c 
b/drivers/net/wireless/iwlwifi/mvm/ops.c
index e4fa50075ffd..3967df63e0f3 100644
--- a/drivers/net/wireless/iwlwifi/mvm/ops.c
+++ b/drivers/net/wireless/iwlwifi/mvm/ops.c
@@ -1316,7 +1316,8 @@ static void iwl_mvm_napi_add(struct iwl_op_mode *op_mode,
 {
struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);
 
-   ieee80211_napi_add(mvm->hw, napi, napi_dev, poll, weight);
+   netif_napi_add(napi_dev, napi, poll, weight);
+   mvm->napi = napi;
 }
 
 static const struct iwl_op_mode_ops iwl_mvm_ops = {
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c 
b/drivers/net/wireless/iwlwifi/mvm/rx.c
index 8f1d93b7a13a..9ff0b4321df3 100644
--- a/drivers/net/wireless/iwlwifi/mvm/rx.c
+++ b/drivers/net/wireless/iwlwifi/mvm/rx.c
@@ -129,7 +129,7 @@ static void iwl_mvm_pass_packet_to_mac80211(struct iwl_mvm 
*mvm,
fraglen, rxb->truesize);
}
 
-   ieee80211_rx(mvm->hw, skb);
+   ieee80211_rx_napi(mvm->hw, skb, mvm->napi);
 }
 
 /*
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 6b1077c2a63f..c1c2af0c5b70 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -3696,20 +3696,28 @@ void ieee80211_free_hw(struct ieee80211_hw *hw);
 void ieee80211_restart_hw(struct ieee80211_hw *hw);
 
 /**
- * ieee80211_napi_add - initialize mac80211 NAPI context
- * @hw: the hardware to initialize the NAPI context on
- * @napi: the NAPI context to initialize
- * @napi_dev: dummy NAPI netdevice, here to not waste the space if the
- * driver doesn't use NAPI
- * @poll: poll function
- * @weight: default weight
+ * ieee80211_rx_napi - receive frame from NAPI context
  *
- * See also netif_napi_add().
+ * Use t

Re: Question on beacon-miss offloading.

2015-06-12 Thread Ben Greear



On 06/11/2015 11:03 PM, Michal Kazior wrote:

On 12 June 2015 at 01:38, Ben Greear  wrote:

On 06/11/2015 02:07 PM, Ben Greear wrote:

In my ath10k CT firmware, I am disabling the beacon-miss offloading
to save space and because it will not work with lots of virtual
stations.

But, it must be that I need some way to tell the stack that this
feature is not enabled, because when suddenly kill my AP, then
the ath10k station connected to it shows endless 'beacon loss' events
in 'iw events' output, but it never actually loses connection.

Stock firmware works fine, so probably I just need to disable
some feature flag when registering the ath10k hardware
when using CT firmware.

With stock firmware, I see a quick dissassociation due to inactivity.

I am having poor luck finding how a driver tells the stack
it has beacon miss offload or not, so, does anyone know how
this is controlled?


I still am not sure why stock firmware works, but it appears
the reason mine is failing is that the ACK status for mgt frames
is always set to TRUE since the ath10k wmi-mgt-tx API is so
lame.  So, mac80211 does a probe, ath10k lies and says it was
acked, and mac80211 then things all is well for another few
seconds.


mac80211 shouldn't do a Probe Req to an AP on beacon loss because
ath10k advertises it supports tx-status report. Hence mac80211 should
use NullFunc frames which shouldn't go through wmi-mgmt-tx but htt
tx-frm.

But then again: NullFunc status reporting via htt tx-frm was broken on
10.1 if memory serves right. I believe it was fixed in 10.2 or 10.2.4.

This problem has been effectively obscured on stock 10.1 by the
offloaded beacon miss.


For what it's worth, I looked at the 4.0.4 ath10k yesterday, and it appears it
ignores the message that the 10.1 firmware sends when beacon loss happens
anyway.  Maybe I misread the firmware code..it's a pile of indirection.

Do you know how the firmware is supposed to signal beacon loss to
the host (from the host's perspective).

Thanks,
Ben


--
Ben Greear 
Candela Technologies Inc  http://www.candelatech.com
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] ath10k: enable VHT for IBSS

2015-06-12 Thread Ben Greear



On 06/11/2015 10:12 PM, Janusz Dziedzic wrote:

On 11 June 2015 at 16:15, Kalle Valo  wrote:

Janusz Dziedzic  writes:


Enable VHT support for IBSS, while mac80211/cfg80211 and
wpa_supplicant already support this.

In my test env, ath10k 2x2 I get:
(udp) ath10k-1  ath10k-2 (server) -  speed: 419 Mbits/sec
(tcp) ath10k-1  ath10k-2 (server) -  speed: 404 Mbits/sec


What hw and firmware version? Do you expect this to work with both
qca988x and qca6174?


Results are for qca9888x.
But IBSS (VHT IBSS) works correctly also with qca6174 FW.


Oh, we should still add ATH10K_FW_FEATURE_NO_ADHOC so that we can
disable ad-hoc on 10.x firmwares. Anyone have some spare time to cook up
a patch?


I am not sure we need this, while we add
ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC)
only for main and tlv version. Seems we already cover 10.x case correctly.


If you give me some way to advertise my CT 10.1 firmware supports ADHOC
mode in the upstream driver then there will be one more firmware
variant that works with IBSS in stock kernels

Maybe a feature flag 'ATH10K_FW_FEATURE_SUPPORTS_ADHOC' ?  You can special case
older firmware that is known to support ADHOC but has no feature
flag for it.  And new firmware could add the feature flag as needed.

Thanks,
Ben

--
Ben Greear 
Candela Technologies Inc  http://www.candelatech.com
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH py80211 0/4] py80211: add support for scheduled scan

2015-06-12 Thread Luca Coelho
From: Luciano Coelho 

Hi Arend,

Here's a small patchset that adds support for scheduled scans in
py80211.

I'm not sure this is the right approach, I added separate classes for
each command, so feel free to ask me to change it completely if you
want and I may or may not do it. :P

Cheers,
Luca.

Luciano Coelho (4):
  py80211: scan: spin base scan classes off scan_request
  py80211: scan: add sched_scan start class
  py80211: add sched_scan stop class
  py80211: scan: add matchsets support for scheduled scans

 lib/scan.py | 157 +---
 1 file changed, 119 insertions(+), 38 deletions(-)

-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH py80211 4/4] py80211: scan: add matchsets support for scheduled scans

2015-06-12 Thread Luca Coelho
From: Luciano Coelho 

Modify the sched_scan_start class so that the caller can pass a list
of matches to be used in the scheduled scan request.

Signed-off-by: Luciano Coelho 
---
 lib/scan.py | 24 
 1 file changed, 24 insertions(+)

diff --git a/lib/scan.py b/lib/scan.py
index bfaf3d2..b55d148 100644
--- a/lib/scan.py
+++ b/lib/scan.py
@@ -192,10 +192,34 @@ class sched_scan_start(scan_start_base):
def __init__(self, ifidx, level=nl.NL_CB_DEFAULT):
 super(sched_scan_start, self).__init__(ifidx, level)
 self._nl_cmd = nl80211.CMD_START_SCHED_SCAN
+self._matches = None
 
def set_interval(self, interval):
self._interval = interval
 
+def add_matches(self, matches):
+self._matches = matches
+
+def _add_matches_attrs(self):
+   if self._matches:
+   i = 0
+
+matchset = nl.nla_nest_start(self._nl_msg._msg, 
nl80211.ATTR_SCHED_SCAN_MATCH)
+   for match in self._matches:
+nest = nl.nla_nest_start(self._nl_msg._msg, i)
+if 'ssid' in match:
+nl.nla_put(self._nl_msg._msg, 
nl80211.SCHED_SCAN_MATCH_ATTR_SSID, match['ssid'])
+   i += 1
+nl.nla_nest_end(self._nl_msg._msg, nest)
+
+nl.nla_nest_end(self._nl_msg._msg, matchset)
+
+def send(self):
+self._prepare_cmd()
+self._add_scan_attrs()
+self._add_matches_attrs()
+self._send_and_wait()
+
 def handle(self, msg, arg):
genlh = genl.genlmsg_hdr(nl.nlmsg_hdr(msg))
 
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH py80211 1/4] py80211: scan: spin base scan classes off scan_request

2015-06-12 Thread Luca Coelho
From: Luciano Coelho 

Most of the scan_request code can be reused for scheduled scan, so
spin the common part off the regular scan class.

Additionally, add one extra class that is able to send scan commands
(for sched_scan stop, for instance) without adding any scan
attributes.

Signed-off-by: Luciano Coelho 
---
 lib/scan.py | 106 
 1 file changed, 64 insertions(+), 42 deletions(-)

diff --git a/lib/scan.py b/lib/scan.py
index 491c0b7..5ccae55 100644
--- a/lib/scan.py
+++ b/lib/scan.py
@@ -84,14 +84,65 @@ class bss_list(custom_handler):
traceback.print_tb(tb)
return nl.NL_SKIP
 
-class scan_request(custom_handler):
+class scan_cmd_base(custom_handler):
def __init__(self, ifidx, level=nl.NL_CB_DEFAULT):
-   self._ifidx = ifidx
self._access = access80211(level)
+self._nl_cmd = None
+   self._ifidx = ifidx
+
+   def _wait_for_completion(self):
+   while self.scan_busy:
+   self._access._sock.recvmsgs(self._access._rx_cb)
+
+   def _prepare_cmd(self):
+if self._nl_cmd == None:
+raise Exception("sub-class must set _nl_cmd")
+
+   flags = nlc.NLM_F_REQUEST | nlc.NLM_F_ACK
+   self._nl_msg = self._access.alloc_genlmsg(self._nl_cmd, flags)
+   nl.nla_put_u32(self._nl_msg._msg, nl80211.ATTR_IFINDEX, 
self._ifidx)
+
+def _send_and_wait(self):
+   self.scan_busy = True
+   self._access.disable_seq_check()
+   mcid = self._access.subscribe_multicast('scan')
+   ret = self._access.send(self._nl_msg, self)
+   if ret < 0:
+   self.scan_busy = False
+   return ret
+
+   self._wait_for_completion()
+   self._access.drop_multicast(mcid)
+   return 0
+
+class scan_start_base(scan_cmd_base):
+def __init__(self, ifidx, level=nl.NL_CB_DEFAULT):
+super(scan_start_base, self).__init__(ifidx, level)
self._ssids = None
self._freqs = None
self._flags = 0
self._ies = None
+self._nl_cmd = None
+
+def _add_scan_attrs(self):
+   if self._ssids:
+   i = 0
+   nest = nl.nla_nest_start(self._nl_msg._msg, 
nl80211.ATTR_SCAN_SSIDS)
+   for ssid in self._ssids:
+   nl.nla_put(self._nl_msg._msg, i, ssid)
+   i += 1
+   nl.nla_nest_end(self._nl_msg._msg, nest)
+   if self._freqs:
+   i = 0
+   nest = nl.nla_nest_start(self._nl_msg._msg, 
nl80211.ATTR_SCAN_FREQUENCIES)
+   for freq in self._freqs:
+   nl.nla_put_u32(self._nl_msg._msg, i, freq)
+   i += 1
+   nl.nla_nest_end(self._nl_msg._msg, nest)
+   if self._flags != 0:
+   nl.nla_put_u32(self._nl_msg._msg, 
nl80211.ATTR_SCAN_FLAGS, self._flags)
+   if self._ies:
+   nl.nla_put(self._nl_msg._msg, nl80211.ATTR_IE, 
self._ies)
 
def add_ssids(self, ssids):
if self._ssids == None:
@@ -115,49 +166,20 @@ class scan_request(custom_handler):
def set_flags(self, flags):
self._flags = flags
 
-   def wait_for_scan_completion(self):
-   while self.scan_busy:
-   self._access._sock.recvmsgs(self._access._rx_cb)
-
-   def send(self):
-   flags = nlc.NLM_F_REQUEST | nlc.NLM_F_ACK
-   m = self._access.alloc_genlmsg(nl80211.CMD_TRIGGER_SCAN, flags)
-   nl.nla_put_u32(m._msg, nl80211.ATTR_IFINDEX, self._ifidx)
+def send(self):
+self._prepare_cmd()
+self._add_scan_attrs()
+self._send_and_wait()
 
-   if self._ssids:
-   i = 0
-   nest = nl.nla_nest_start(m._msg, 
nl80211.ATTR_SCAN_SSIDS)
-   for ssid in self._ssids:
-   nl.nla_put(m._msg, i, ssid)
-   i += 1
-   nl.nla_nest_end(m._msg, nest)
-   if self._freqs:
-   i = 0
-   nest = nl.nla_nest_start(m._msg, 
nl80211.ATTR_SCAN_FREQUENCIES)
-   for freq in self._freqs:
-   nl.nla_put_u32(m._msg, i, freq)
-   i += 1
-   nl.nla_nest_end(m._msg, nest)
-   if self._flags != 0:
-   nl.nla_put_u32(m._msg, nl80211.ATTR_SCAN_FLAGS, 
self._flags)
-   if self._ies:
-

[PATCH py80211 2/4] py80211: scan: add sched_scan start class

2015-06-12 Thread Luca Coelho
From: Luciano Coelho 

Add a class to start scheduled scans.

Signed-off-by: Luciano Coelho 
---
 lib/scan.py | 20 
 1 file changed, 20 insertions(+)

diff --git a/lib/scan.py b/lib/scan.py
index 5ccae55..bfaf4da 100644
--- a/lib/scan.py
+++ b/lib/scan.py
@@ -123,6 +123,7 @@ class scan_start_base(scan_cmd_base):
self._flags = 0
self._ies = None
 self._nl_cmd = None
+self._interval = None
 
 def _add_scan_attrs(self):
if self._ssids:
@@ -144,6 +145,9 @@ class scan_start_base(scan_cmd_base):
if self._ies:
nl.nla_put(self._nl_msg._msg, nl80211.ATTR_IE, 
self._ies)
 
+if self._interval != None:
+nl.nla_put_u32(self._nl_msg._msg, 
nl80211.ATTR_SCHED_SCAN_INTERVAL, self._interval)
+
def add_ssids(self, ssids):
if self._ssids == None:
self._ssids = ssids
@@ -183,3 +187,19 @@ class scan_request(scan_start_base):
if genlh.cmd in [ nl80211.CMD_SCAN_ABORTED, 
nl80211.CMD_NEW_SCAN_RESULTS ]:
self.scan_busy = False
return nl.NL_SKIP
+
+class sched_scan_start(scan_start_base):
+   def __init__(self, ifidx, level=nl.NL_CB_DEFAULT):
+super(sched_scan_start, self).__init__(ifidx, level)
+self._nl_cmd = nl80211.CMD_START_SCHED_SCAN
+
+   def set_interval(self, interval):
+   self._interval = interval
+
+def handle(self, msg, arg):
+   genlh = genl.genlmsg_hdr(nl.nlmsg_hdr(msg))
+
+# A schedule scan is complete immediately when it gets started
+if genlh.cmd in [ nl80211.CMD_START_SCHED_SCAN ]:
+self.scan_busy = False
+   return nl.NL_SKIP
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH py80211 3/4] py80211: add sched_scan stop class

2015-06-12 Thread Luca Coelho
From: Luciano Coelho 

Add a class to stop scheduled scans.

Signed-off-by: Luciano Coelho 
---
 lib/scan.py | 15 +++
 1 file changed, 15 insertions(+)

diff --git a/lib/scan.py b/lib/scan.py
index bfaf4da..bfaf3d2 100644
--- a/lib/scan.py
+++ b/lib/scan.py
@@ -203,3 +203,18 @@ class sched_scan_start(scan_start_base):
 if genlh.cmd in [ nl80211.CMD_START_SCHED_SCAN ]:
 self.scan_busy = False
return nl.NL_SKIP
+
+class sched_scan_stop(scan_cmd_base):
+   def __init__(self, ifidx, level=nl.NL_CB_DEFAULT):
+super(sched_scan_stop, self).__init__(ifidx, level)
+self._nl_cmd = nl80211.CMD_STOP_SCHED_SCAN
+
+def send(self):
+self._prepare_cmd()
+self._send_and_wait()
+
+def handle(self, msg, arg):
+   genlh = genl.genlmsg_hdr(nl.nlmsg_hdr(msg))
+if genlh.cmd in [ nl80211.CMD_SCHED_SCAN_STOPPED ]:
+self.scan_busy = False
+   return nl.NL_SKIP
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question on beacon-miss offloading.

2015-06-12 Thread Krishna Chaitanya
On Fri, Jun 12, 2015 at 6:59 PM, Ben Greear  wrote:
>
>
> On 06/11/2015 11:03 PM, Michal Kazior wrote:
>>
>> On 12 June 2015 at 01:38, Ben Greear  wrote:
>>>
>>> On 06/11/2015 02:07 PM, Ben Greear wrote:

 In my ath10k CT firmware, I am disabling the beacon-miss offloading
 to save space and because it will not work with lots of virtual
 stations.

 But, it must be that I need some way to tell the stack that this
 feature is not enabled, because when suddenly kill my AP, then
 the ath10k station connected to it shows endless 'beacon loss' events
 in 'iw events' output, but it never actually loses connection.

 Stock firmware works fine, so probably I just need to disable
 some feature flag when registering the ath10k hardware
 when using CT firmware.

 With stock firmware, I see a quick dissassociation due to inactivity.

 I am having poor luck finding how a driver tells the stack
 it has beacon miss offload or not, so, does anyone know how
 this is controlled?
>>>
>>>
>>> I still am not sure why stock firmware works, but it appears
>>> the reason mine is failing is that the ACK status for mgt frames
>>> is always set to TRUE since the ath10k wmi-mgt-tx API is so
>>> lame.  So, mac80211 does a probe, ath10k lies and says it was
>>> acked, and mac80211 then things all is well for another few
>>> seconds.
>>
>>
>> mac80211 shouldn't do a Probe Req to an AP on beacon loss because
>> ath10k advertises it supports tx-status report. Hence mac80211 should
>> use NullFunc frames which shouldn't go through wmi-mgmt-tx but htt
>> tx-frm.
>>
>> But then again: NullFunc status reporting via htt tx-frm was broken on
>> 10.1 if memory serves right. I believe it was fixed in 10.2 or 10.2.4.
>>
>> This problem has been effectively obscured on stock 10.1 by the
>> offloaded beacon miss.
>
>
> For what it's worth, I looked at the 4.0.4 ath10k yesterday, and it appears
> it
> ignores the message that the 10.1 firmware sends when beacon loss happens
> anyway.  Maybe I misread the firmware code..it's a pile of indirection.
>
> Do you know how the firmware is supposed to signal beacon loss to
> the host (from the host's perspective).

Normally driver would advertise IEEE80211_HW_CONNECTION_MONITOR
to disable mac80211 from tracking connection. and driver should call
ieee80211_beacon_loss up on receiving beacon loss event from FW
which triggers disconnection in mac80211.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] staging: wilc1000: remove warnings reported by checkpatch.pl.

2015-06-12 Thread Greg KH
On Fri, Jun 12, 2015 at 06:51:56PM +0900, Dean Lee wrote:
> Remove the following warnings in the wilc_log.h:
> - unnecessary whitespace before a quoted newline
> - line over 80 characters
> - single statement macros should not use a do {} while (0) loop.

Those are different things, so this should be broken up into different
patches.  Please make this a series of patches, each one only doing one
type of thing.

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question on beacon-miss offloading.

2015-06-12 Thread Ben Greear
On 06/12/2015 07:10 AM, Krishna Chaitanya wrote:
> On Fri, Jun 12, 2015 at 6:59 PM, Ben Greear  wrote:
>>
>>
>> On 06/11/2015 11:03 PM, Michal Kazior wrote:
>>>
>>> On 12 June 2015 at 01:38, Ben Greear  wrote:

 On 06/11/2015 02:07 PM, Ben Greear wrote:
>
> In my ath10k CT firmware, I am disabling the beacon-miss offloading
> to save space and because it will not work with lots of virtual
> stations.
>
> But, it must be that I need some way to tell the stack that this
> feature is not enabled, because when suddenly kill my AP, then
> the ath10k station connected to it shows endless 'beacon loss' events
> in 'iw events' output, but it never actually loses connection.
>
> Stock firmware works fine, so probably I just need to disable
> some feature flag when registering the ath10k hardware
> when using CT firmware.
>
> With stock firmware, I see a quick dissassociation due to inactivity.
>
> I am having poor luck finding how a driver tells the stack
> it has beacon miss offload or not, so, does anyone know how
> this is controlled?


 I still am not sure why stock firmware works, but it appears
 the reason mine is failing is that the ACK status for mgt frames
 is always set to TRUE since the ath10k wmi-mgt-tx API is so
 lame.  So, mac80211 does a probe, ath10k lies and says it was
 acked, and mac80211 then things all is well for another few
 seconds.
>>>
>>>
>>> mac80211 shouldn't do a Probe Req to an AP on beacon loss because
>>> ath10k advertises it supports tx-status report. Hence mac80211 should
>>> use NullFunc frames which shouldn't go through wmi-mgmt-tx but htt
>>> tx-frm.
>>>
>>> But then again: NullFunc status reporting via htt tx-frm was broken on
>>> 10.1 if memory serves right. I believe it was fixed in 10.2 or 10.2.4.
>>>
>>> This problem has been effectively obscured on stock 10.1 by the
>>> offloaded beacon miss.
>>
>>
>> For what it's worth, I looked at the 4.0.4 ath10k yesterday, and it appears
>> it
>> ignores the message that the 10.1 firmware sends when beacon loss happens
>> anyway.  Maybe I misread the firmware code..it's a pile of indirection.
>>
>> Do you know how the firmware is supposed to signal beacon loss to
>> the host (from the host's perspective).
> 
> Normally driver would advertise IEEE80211_HW_CONNECTION_MONITOR
> to disable mac80211 from tracking connection. and driver should call
> ieee80211_beacon_loss up on receiving beacon loss event from FW
> which triggers disconnection in mac80211.


I do not see any calls to beacon_loss() in the ath10k driver,
so probably that firmware feature is not just fully wired up
to the driver.  Just as well since that firmware feature is
disabled in my (-diet variant) firmware entirely.

Thanks,
Ben


-- 
Ben Greear 
Candela Technologies Inc  http://www.candelatech.com

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] staging: wilc1000: remove oswrapper & type file

2015-06-12 Thread Greg KH
On Fri, Jun 12, 2015 at 07:21:11PM +0900, Dean Lee wrote:
> remove OS Wrapper function(wilc_oswrapper.h) is in our plan.
> i removed OS Wrapper function and it's done.
> and i found wilc_type.h file is does not used it.
> so i deleted them and modify #include line in another file.

You are also doing other things here that you don't describe:

>  /* Errors will always get printed */
> -#define WILC_ERROR(...) do {  WILC_PRINTF("(ERR)(%s:%d) ", 
> __WILC_FUNCTION__, __WILC_LINE__); \
> -   WILC_PRINTF(__VA_ARGS__); \
> - } while (0)
> +#define WILC_ERROR(...)  
> \
> +do { \
> + WILC_PRINTF("(ERR)(%s:%d)", __WILC_FUNCTION__, __WILC_LINE__);  \
> + WILC_PRINTF(__VA_ARGS__);   \
> +} while (0)

You reformatted this.

>  #if (WILC_LOG_VERBOSITY_LEVEL > 3)
> -#define WILC_FN_IN do { WILC_PRINTF("(FIN) (%s:%d) \n", __WILC_FUNCTION__, 
> __WILC_LINE__);  } while (0)
> -#define WILC_FN_OUT(ret) do { WILC_PRINTF("(FOUT) (%s:%d) %d.\n", 
> __WILC_FUNCTION__, __WILC_LINE__, (ret));  } while (0)
> +#define WILC_FN_IN   \
> + WILC_PRINTF("(FIN)(%s:%d)\n", __WILC_FUNCTION__, __WILC_LINE__)
> +#define WILC_FN_OUT(ret) \
> + WILC_PRINTF("(FOUT)(%s:%d)%d\n", __WILC_FUNCTION__, __WILC_LINE__, ret)

And changed this for no obvious reason.

Please, only do one thing per patch.  Break this up into logical steps
and resend it as a series of patches, with the last one being the TODO
file item removal.

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] staging: wilc1000: update TODO list

2015-06-12 Thread Greg KH
On Fri, Jun 12, 2015 at 07:23:11PM +0900, Dean Lee wrote:
> remove complete OS wrapper functions.
> 
> Signed-off-by: Dean Lee 
> ---
>  drivers/staging/wilc1000/TODO | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/drivers/staging/wilc1000/TODO b/drivers/staging/wilc1000/TODO
> index 95199d8..e876008 100644
> --- a/drivers/staging/wilc1000/TODO
> +++ b/drivers/staging/wilc1000/TODO
> @@ -1,6 +1,5 @@
>  TODO:
>  - remove the defined feature as kernel versions
> -- remove OS wrapper functions
>  - remove custom debug and tracing functions
>  - rework comments and function headers(also coding style)
>  - replace all semaphores with mutexes or completions
> -- 
> 2.4.3

This isn't done yet, please make it the last patch in your series.

And are you sure you have removed them all?

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] staging: wilc1000: change WILC_Char to s8

2015-06-12 Thread Greg KH
On Fri, Jun 12, 2015 at 02:39:08PM +0900, Dean Lee wrote:
> change own data type(WILC_Char) to common data type(s8)

Why not just 'char'?

And you are using these in "strings", so why not u8?

thanks,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Question on beacon-miss offloading.

2015-06-12 Thread Ben Greear
On 06/11/2015 11:03 PM, Michal Kazior wrote:
> On 12 June 2015 at 01:38, Ben Greear  wrote:
>> On 06/11/2015 02:07 PM, Ben Greear wrote:
>>> In my ath10k CT firmware, I am disabling the beacon-miss offloading
>>> to save space and because it will not work with lots of virtual
>>> stations.
>>>
>>> But, it must be that I need some way to tell the stack that this
>>> feature is not enabled, because when suddenly kill my AP, then
>>> the ath10k station connected to it shows endless 'beacon loss' events
>>> in 'iw events' output, but it never actually loses connection.
>>>
>>> Stock firmware works fine, so probably I just need to disable
>>> some feature flag when registering the ath10k hardware
>>> when using CT firmware.
>>>
>>> With stock firmware, I see a quick dissassociation due to inactivity.
>>>
>>> I am having poor luck finding how a driver tells the stack
>>> it has beacon miss offload or not, so, does anyone know how
>>> this is controlled?
>>
>> I still am not sure why stock firmware works, but it appears
>> the reason mine is failing is that the ACK status for mgt frames
>> is always set to TRUE since the ath10k wmi-mgt-tx API is so
>> lame.  So, mac80211 does a probe, ath10k lies and says it was
>> acked, and mac80211 then things all is well for another few
>> seconds.
> 
> mac80211 shouldn't do a Probe Req to an AP on beacon loss because
> ath10k advertises it supports tx-status report. Hence mac80211 should
> use NullFunc frames which shouldn't go through wmi-mgmt-tx but htt
> tx-frm.
> 
> But then again: NullFunc status reporting via htt tx-frm was broken on
> 10.1 if memory serves right. I believe it was fixed in 10.2 or 10.2.4.
> 
> This problem has been effectively obscured on stock 10.1 by the
> offloaded beacon miss.

Thanks for the hint.  I was able to fix my firmware to properly
return htt tx status, and now it appears to work properly.

A quick throughput test works as well, so hopefully no regressions.

I guess the NulFunc related comment is incorrect for 10.1 stock firmware?

Maybe some others?

static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb)
{
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
int ret = 0;

if (ar->htt.target_version_major >= 3) {
/* Since HTT 3.0 there is no separate mgmt tx command */
ret = ath10k_htt_tx(&ar->htt, skb);
goto exit;
}

if (ieee80211_is_mgmt(hdr->frame_control)) {
if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
 ar->fw_features)) {
if (skb_queue_len(&ar->wmi_mgmt_tx_queue) >=
ATH10K_MAX_NUM_MGMT_PENDING) {
ath10k_warn(ar, "reached WMI management 
transmit queue limit\n");
ret = -EBUSY;
goto exit;
}

skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
} else {
ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
}
} else if (!test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX,
 ar->fw_features) &&
   ieee80211_is_nullfunc(hdr->frame_control)) {
/* FW does not report tx status properly for NullFunc frames
 * unless they are sent through mgmt tx path. mac80211 sends
 * those frames when it detects link/beacon loss and depends
 * on the tx status to be correct. */
ret = ath10k_htt_mgmt_tx(&ar->htt, skb);
} else {
ret = ath10k_htt_tx(&ar->htt, skb);
}


Thanks,
Ben

-- 
Ben Greear 
Candela Technologies Inc  http://www.candelatech.com

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[BUG ?] delay always evaluates to 0

2015-06-12 Thread Nicholas Mc Guire
Hi !

commit 2c86c275015c ("Add ipw2100 wireless driver.") introduced

drivers/net/wireless/ipw2100.c - line-numbers are from next-20150511
1410 static int ipw2100_hw_phy_off(struct ipw2100_priv *priv)
1411 {
1412 
1413 #define HW_PHY_OFF_LOOP_DELAY (HZ / 5000)  
1414
...
1437 
1438 schedule_timeout_uninterruptible(HW_PHY_OFF_LOOP_DELAY);
1439 }

but (HZ / 5000) will evaluate to 0 for all configurable HZ values - typo ?
and this schedule_timeout_uninterruptible() is probably not doing what
is intended.

thx!
hofrat
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH] mac80211: fix a NULL dereference in ath9k (and likely other drivers) when fixed mesh paths are used

2015-06-12 Thread Jesse Jones
> -Original Message-
> From: Bob Copeland [mailto:m...@bobcopeland.com]
> Sent: Monday, May 25, 2015 9:16 AM
> To: Alexis Green
> Cc: Johannes Berg; linux-wireless; Jesse Jones
> Subject: Re: [PATCH] mac80211: fix a NULL dereference in ath9k (and likely
> other drivers) when fixed mesh paths are used
>
> On Thu, May 21, 2015 at 06:05:13PM -0700, Alexis Green wrote:
> > This patch fixes a NULL dereference in ath9k (and likely other
> > drivers) when fixed mesh paths are used. The problem is that when a
> > station comes up sta_info_alloc allocates ath_node implicitly via
> > hw->sta_data_size. When it does that the ath_node is zeroed out. The
> > ath_node isnโ€™t actually initialized until the station becomes associated
> > and
> ath9k_sta_state is called.
>
> Good catch.
>
> I wonder if we should instead remove the mesh special case in
> ieee80211_tx_h_check_assoc() -- given that we require an assoc station in
> peering before we send data frames to that RA, and userspace should also
> be setting assoc flag after MPM completes, I can't think of a reason
> offhand
> why we'd need to bail out there.
>
> Does this also fix the problem for you?  It passed the wpa_supplicant test
> cases at least (but we aren't fixing mpaths in any of those...)
>
> From 246febaa51d555fda437cc8064798db06c5f4d6e Mon Sep 17 00:00:00
> 2001
> From: Bob Copeland 
> Date: Mon, 25 May 2015 12:01:52 -0400
> Subject: [PATCH] mac80211: enable assoc check for mesh interfaces
>
> We already set a station to be associated when peering completes, both in
> user space and in the kernel.  Thus we should always have an associated
> sta
> before sending data frames to that station.
>
> Failure to do this can cause crashes in the lower-level driver due to
> transmitting unicast data frames before driver sta structures (e.g. ampdu
> state in ath9k) are initialized.  This could have happened if fixing
> mpaths,
> which could then allow TX to stations with whom we haven't yet completed
> peering.
>
> Reported-by: Alexis Green 
> Signed-off-by: Bob Copeland 
> ---
>  net/mac80211/tx.c | 3 ---
>  1 file changed, 3 deletions(-)
>
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index
> 667111ee6a20..5787f15a3a12 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -301,9 +301,6 @@ ieee80211_tx_h_check_assoc(struct
> ieee80211_tx_data *tx)
>   if (tx->sdata->vif.type == NL80211_IFTYPE_WDS)
>   return TX_CONTINUE;
>
> - if (tx->sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
> - return TX_CONTINUE;
> -
>   if (tx->flags & IEEE80211_TX_PS_BUFFERED)
>   return TX_CONTINUE;
>
> --
> 2.1.4
>
>
>
> --
> Bob Copeland %% http://bobcopeland.com/

Sorry for the delay in responding to this...

I had trouble reproing the reboot caused by ath9k de-referencing NULL
pointers but after a fair amount of work I was able to consistently get
reboots. Your patch *does* fix the problem so I am going to switch our repo
over to your patch instead of what we were using. Thanks for the help.

  -- Jesse
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


iwlwifi in AP mode is experimental?

2015-06-12 Thread Robert E. Cochran

Hello,

On wireless.wiki.kernel.org, iwlwifi is listed as experimental for AP Mode.

We have done some basic testing with a 3160 card in AP mode & hostapd 
without issue.  Now we need to determine if it makes sense to ramp up a 
rigorous test plan for it.


Is AP mode with iwlwifi basically a "use at your own risk" scenario?  
Can I expect AP mode to be supported more fully in the future?  Is there 
a particular HW module that does AP mode better than others?  Is there a 
list of missing features?  Are others using iwlwifi for AP mode in a  
product?


Any additional, current information on this will be greatly appreciated.

Thank you,

Bob

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: r8188eu deadlock

2015-06-12 Thread Larry Finger

On 06/11/2015 10:00 PM, Paul Thomas wrote:

Hello, I just got a TP-LINK TL-WN725N adapter (VID 0bda, PID 8179)

The driver in the staging area seems to be working fine, but I get
this on startup. I'm using this with a BeagleBone Black. I did a fresh
git pull today, so it is with kernel 4.1.0-rc7-00063-gcff100f, I
haven't tried it with the wireless-testing branch.

Anyway, thought someone might be interested.

thanks,
Paul

[   22.489564] =
[   22.495221] [ INFO: possible recursive locking detected ]
[   22.500883] 4.1.0-rc7-00063-gcff100f #3 Tainted: G C
[   22.507266] -
[   22.512921] RTW_CMD_THREAD/554 is trying to acquire lock:
[   22.518577]  (&(&(pqueue->lock))->rlock){+.-...}, at: []
_rtw_alloc_network+0x14/0xc4 [r8188eu]
[   22.528847]
[   22.528847] but task is already holding lock:
[   22.534969]  (&(&(pqueue->lock))->rlock){+.-...}, at: []
rtw_update_scanned_network+0x18/0x234 [r8188eu]
[   22.545910]
[   22.545910] other info that might help us debug this:
[   22.552759]  Possible unsafe locking scenario:
[   22.552759]
[   22.558969]CPU0
[   22.561534]
[   22.564097]   lock(&(&(pqueue->lock))->rlock);
[   22.568765]   lock(&(&(pqueue->lock))->rlock);
[   22.573433]
[   22.573433]  *** DEADLOCK ***
[   22.573433]
[   22.579654]  May be due to missing lock nesting notation
[   22.579654]
[   22.586775] 2 locks held by RTW_CMD_THREAD/554:
[   22.591520]  #0:  (&(&(pmlmepriv->lock))->rlock){+.}, at:
[] rtw_survey_event_callback+0x7c/0x1c4 [r8188eu]
[   22.603094]  #1:  (&(&(pqueue->lock))->rlock){+.-...}, at:
[] rtw_update_scanned_network+0x18/0x234 [r8188eu]
[   22.614481]
[   22.614481] stack backtrace:
[   22.619064] CPU: 0 PID: 554 Comm: RTW_CMD_THREAD Tainted: G
C  4.1.0-rc7-00063-gcff100f #3
[   22.628817] Hardware name: Generic AM33XX (Flattened Device Tree)
[   22.635227] [] (unwind_backtrace) from []
(show_stack+0x10/0x14)
[   22.643355] [] (show_stack) from []
(dump_stack+0x84/0x9c)
[   22.650944] [] (dump_stack) from []
(__lock_acquire+0x1a44/0x1edc)
[   22.659253] [] (__lock_acquire) from []
(lock_acquire+0xa8/0x124)
[   22.667473] [] (lock_acquire) from []
(_raw_spin_lock_bh+0x44/0x54)
[   22.675926] [] (_raw_spin_lock_bh) from []
(_rtw_alloc_network+0x14/0xc4 [r8188eu])
[   22.685883] [] (_rtw_alloc_network [r8188eu]) from
[] (rtw_update_scanned_network+0xec/0x234 [r8188eu])
[   22.697654] [] (rtw_update_scanned_network [r8188eu])
from [] (rtw_survey_event_callback+0xf8/0x1c4 [r8188eu])
[   22.710069] [] (rtw_survey_event_callback [r8188eu]) from
[] (mlme_evt_hdl+0x5c/0xe8 [r8188eu])
[   22.721110] [] (mlme_evt_hdl [r8188eu]) from []
(rtw_cmd_thread+0xac/0x2a8 [r8188eu])
[   22.731191] [] (rtw_cmd_thread [r8188eu]) from
[] (kthread+0xd4/0xf0)
[   22.739780] [] (kthread) from []
(ret_from_fork+0x14/0x3c)


That is a known problem, but I do not know the fix. The only downside is that 
this occurrence disables lockdep testing.


FYI, staging drivers are not updated through wireless, but this is a good place 
to report problems. If you want to try the latest versions of one of these 
drivers, then you need to use staging-next, which is a branch of the staging 
repo maintained by GregKH.


Larry

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v4] ath10k: enable raw encap mode and software crypto engine.

2015-06-12 Thread Liu CF/TW
From: David Liu 

  This patch enables raw Rx/Tx encap mode to support software based
  crypto engine. This patch introduces a new module param 'cryptmode'.

   cryptmode:

 0: Use hardware crypto engine globally with native Wi-Fi mode TX/RX
encapsulation to the firmware. This is the default mode.
 1: Use sofware crypto engine globally with raw mode TX/RX
encapsulation to the firmware.

   Known limitation:
 A-MSDU must be disabled for RAW Tx encap mode to perform well when
 heavy traffic is applied.

   Testing: (by Michal Kazior )

 a) Performance Testing

  cryptmode=1
   ap=qca988x sta=killer1525
killer1525  ->  qca988x 194.496 mbps [tcp1 ip4]
killer1525  ->  qca988x 238.309 mbps [tcp5 ip4]
killer1525  ->  qca988x 266.958 mbps [udp1 ip4]
killer1525  ->  qca988x 477.468 mbps [udp5 ip4]
qca988x ->  killer1525  301.378 mbps [tcp1 ip4]
qca988x ->  killer1525  297.949 mbps [tcp5 ip4]
qca988x ->  killer1525  331.351 mbps [udp1 ip4]
qca988x ->  killer1525  371.528 mbps [udp5 ip4]
   ap=killer1525 sta=qca988x
qca988x ->  killer1525  331.447 mbps [tcp1 ip4]
qca988x ->  killer1525  328.783 mbps [tcp5 ip4]
qca988x ->  killer1525  375.309 mbps [udp1 ip4]
qca988x ->  killer1525  403.379 mbps [udp5 ip4]
killer1525  ->  qca988x 203.689 mbps [tcp1 ip4]
killer1525  ->  qca988x 222.339 mbps [tcp5 ip4]
killer1525  ->  qca988x 264.199 mbps [udp1 ip4]
killer1525  ->  qca988x 479.371 mbps [udp5 ip4]

  Note:
   - only open network tested for RAW vs nwifi performance comparison
   - killer1525 (qca6174 hw2.2) is 2x2 device (hence max 866mbps)
   - used iperf
   - OTA, devices a few cm apart from each other, no shielding
   - tcpX/udpX, X - means number of threads used

  Overview:
   - relative Tx performance drop is seen but is within reasonable and
 expected threshold (A-MSDU must be disabled with RAW Tx)

 b) Connectivity Testing

  cryptmode=1
   ap=iwl6205 sta1=qca988x crypto=open topology-1ap1sta  OK
   ap=iwl6205 sta1=qca988x crypto=wep1 topology-1ap1sta  OK
   ap=iwl6205 sta1=qca988x crypto=wpa  topology-1ap1sta  OK
   ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta  OK
   ap=qca988x sta1=iwl6205 crypto=open topology-1ap1sta  OK
   ap=qca988x sta1=iwl6205 crypto=wep1 topology-1ap1sta  OK
   ap=qca988x sta1=iwl6205 crypto=wpa  topology-1ap1sta  OK
   ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta  OK
   ap=iwl6205 sta1=qca988x crypto=open topology-1ap1sta2br   OK
   ap=iwl6205 sta1=qca988x crypto=wep1 topology-1ap1sta2br   OK
   ap=iwl6205 sta1=qca988x crypto=wpa  topology-1ap1sta2br   OK
   ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta2br   OK
   ap=qca988x sta1=iwl6205 crypto=open topology-1ap1sta2br   OK
   ap=qca988x sta1=iwl6205 crypto=wep1 topology-1ap1sta2br   OK
   ap=qca988x sta1=iwl6205 crypto=wpa  topology-1ap1sta2br   OK
   ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta2br   OK
   ap=iwl6205 sta1=qca988x crypto=open topology-1ap1sta2br1vlan  OK
   ap=iwl6205 sta1=qca988x crypto=wep1 topology-1ap1sta2br1vlan  OK
   ap=iwl6205 sta1=qca988x crypto=wpa  topology-1ap1sta2br1vlan  OK
   ap=iwl6205 sta1=qca988x crypto=wpa-ccmp topology-1ap1sta2br1vlan  OK
   ap=qca988x sta1=iwl6205 crypto=open topology-1ap1sta2br1vlan  OK
   ap=qca988x sta1=iwl6205 crypto=wep1 topology-1ap1sta2br1vlan  OK
   ap=qca988x sta1=iwl6205 crypto=wpa  topology-1ap1sta2br1vlan  OK
   ap=qca988x sta1=iwl6205 crypto=wpa-ccmp topology-1ap1sta2br1vlan  OK

  Note:
   - each test takes all possible endpoint pairs and pings
   - each pair-ping flushes arp table
   - ip6 is used

 c) Testbed Topology:

  1ap1sta:
[ap]  [sta]

endpoints: ap, sta

  1ap1sta2br:
[veth0] [ap]  [sta] [veth2]
   | |  | |
[veth1]  |  \   [veth3]
\   /\  /
[br0][br1]

endpoints: veth0, veth2, br0, br1
note: STA works in 4addr mode, AP has wds_sta=1

  1ap1sta2br1vlan:
[veth0] [ap]  [sta] [veth2]
   | |  | |
[veth1]  |  \   [veth3]
\   /\  /
  [br0]  [br1]
|  |
  [vlan0_id2][vlan1_id2]

endpoints: vlan0_id2, vlan1_id2
note: STA works in 4addr mode, AP has wds_sta=1

  Credits:

Thanks to Michal Kazior  who helped find the
amsdu issue, contributed a workaround (alre

Re: [PATCH] mac80211: fix a NULL dereference in ath9k (and likely other drivers) when fixed mesh paths are used

2015-06-12 Thread Johannes Berg
On Fri, 2015-06-12 at 11:01 -0700, Jesse Jones wrote:

> I had trouble reproing the reboot caused by ath9k de-referencing NULL
> pointers but after a fair amount of work I was able to consistently get
> reboots. Your patch *does* fix the problem so I am going to switch our repo
> over to your patch instead of what we were using. Thanks for the help.

Great. Bob, if it's no bother I'd appreciate if you'd resend the patch
correctly so it gets picked up by patchwork etc.

Thanks,
johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] mac80211: don't invalidate SN on discovery failure

2015-06-12 Thread Alexis Green
From: Jesse Jones 

The 2012 spec mentions that path SNs can be invalid when created (see
section 13.10.8.4 table 13-9) but AFAICT never talks about invalidating
SNs. Which makes sense: if we have figured out the path to a target at a
certain SN then we want to remember that fact. Failing to do so can lead
to routing loops because if we don't have a valid SN then we have no way
of knowing whether an incoming path message leads to or away from the
target.

However currently when discovery fails we zero out mpath->flags which
clears MESH_PATH_SN_VALID. This patch fixes that so that only the
discovery relevant flags are cleared.

Signed-off-by: Alexis Green 

---

diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index 085edc1..1d849be
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -1176,7 +1176,8 @@ void mesh_path_timer(unsigned long data)
spin_unlock_bh(&mpath->state_lock);
mesh_queue_preq(mpath, 0);
} else {
-   mpath->flags = 0;
+   mpath->flags &= ~(MESH_PATH_RESOLVING |
+   MESH_PATH_RESOLVED | MESH_PATH_REQ_QUEUED);
mpath->exp_time = jiffies;
spin_unlock_bh(&mpath->state_lock);
if (!mpath->is_gate && mesh_gate_num(sdata) > 0) {
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] mac80211: fix a NULL dereference in ath9k (and likely other drivers) when fixed mesh paths are used

2015-06-12 Thread Bob Copeland
On Fri, Jun 12, 2015 at 10:10:32PM +0200, Johannes Berg wrote:
> On Fri, 2015-06-12 at 11:01 -0700, Jesse Jones wrote:
> 
> > I had trouble reproing the reboot caused by ath9k de-referencing NULL
> > pointers but after a fair amount of work I was able to consistently get
> > reboots. Your patch *does* fix the problem so I am going to switch our repo
> > over to your patch instead of what we were using. Thanks for the help.
> 
> Great. Bob, if it's no bother I'd appreciate if you'd resend the patch
> correctly so it gets picked up by patchwork etc.

Sure.  Jesse, want me to add your Tested-by?

-- 
Bob Copeland %% http://bobcopeland.com/
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] mac80211: Check SN for deactivated mpaths

2015-06-12 Thread Alexis Green
From: Jesse Jones 

When processing a PREQ or PREP it's critical to use the incoming SN. If
that is improperly done routing loops and other types of badness can
happen. But the code was always processing path messages for deactivated
paths. This path fixes that so that if we have a valid SN then we use it
to verify that it is a message we can accept. For reference the relevant
section of the standard is 13.10.8.4 which doesn't address the deactivated
path case at all.

I also included a special case for when our peer reboots or restarts
networking. This is an important case because without it there can be a
very long delay before we accept path messages from that peer. It's also a
simple case and intimately associated with processing messages for
deactivated paths so I used one patch instead of two.

Signed-off-by: Alexis Green 

---

diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
index 45485f3..3c5f76a 100755
--- a/net/mac80211/mesh_hwmp.c
+++ b/net/mac80211/mesh_hwmp.c
@@ -79,6 +79,12 @@ static inline u16 u16_field_get(const u8 *preq_elem, int 
offset, bool ae)
 #define MSEC_TO_TU(x) (x*1000/1024)
 #define SN_GT(x, y) ((s32)(y - x) < 0)
 #define SN_LT(x, y) ((s32)(x - y) < 0)
+#define MAX_SANE_SN_DELTA 32
+
+static inline u32 SN_DELTA(u32 x, u32 y)
+{
+   return x >= y ? x - y : y - x;
+}
 
 #define net_traversal_jiffies(s) \
msecs_to_jiffies(s->u.mesh.mshcfg.dot11MeshHWMPnetDiameterTraversalTime)
@@ -441,6 +447,26 @@ static u32 hwmp_route_info_get(struct 
ieee80211_sub_if_data *sdata,
process = false;
fresh_info = false;
}
+   } else if (!(mpath->flags & MESH_PATH_ACTIVE)) {
+   bool have_sn, newer_sn, bounced;
+
+   have_sn = mpath->flags & MESH_PATH_SN_VALID;
+   newer_sn = have_sn && SN_GT(orig_sn, mpath->sn);
+   bounced = have_sn &&
+   (SN_DELTA(orig_sn, mpath->sn) >
+   MAX_SANE_SN_DELTA);
+
+   if (!have_sn || newer_sn) {
+   /* if SN is newer than what we had
+* then we can take it */;
+   } else if (bounced) {
+   /* if SN is way different than what
+* we had then assume the other side
+* rebooted or restarted */;
+   } else {
+   process = false;
+   fresh_info = false;
+   }
}
} else {
mpath = mesh_path_add(sdata, orig_addr);
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH py80211 0/4] py80211: add support for scheduled scan

2015-06-12 Thread Arend van Spriel
On 12-06-15 16:00, Luca Coelho wrote:
> From: Luciano Coelho 
> 
> Hi Arend,
> 
> Here's a small patchset that adds support for scheduled scans in
> py80211.

Thanks! One general remark. It seems you are using soft-tabs where I
stick to true tabs. Python is pretty anal about that so better stick to
true tabs.

> I'm not sure this is the right approach, I added separate classes for
> each command, so feel free to ask me to change it completely if you
> want and I may or may not do it. :P

Me neither, but it may be a bit too classy ;-) So I would prefer to have
a scheduled scan class with start and stop operation.

Good to see you are using '_' consistently for class private members and
functions. I need to clean it up in other files. I recently added Pyro
support allowing remote access to py80211 objects and it only exposes
public members and functions.

Thanks again,
Arend

> Cheers,
> Luca.
> 
> Luciano Coelho (4):
>   py80211: scan: spin base scan classes off scan_request
>   py80211: scan: add sched_scan start class
>   py80211: add sched_scan stop class
>   py80211: scan: add matchsets support for scheduled scans
> 
>  lib/scan.py | 157 
> +---
>  1 file changed, 119 insertions(+), 38 deletions(-)
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] staging: wilc1000: remove itypes.h

2015-06-12 Thread Chaehyun Lim
Remove itypes.h that is not needed.

Signed-off-by: Chaehyun Lim 
---
 drivers/staging/wilc1000/coreconfigurator.c |  1 -
 drivers/staging/wilc1000/host_interface.c   |  1 -
 drivers/staging/wilc1000/itypes.h   | 39 -
 3 files changed, 41 deletions(-)
 delete mode 100644 drivers/staging/wilc1000/itypes.h

diff --git a/drivers/staging/wilc1000/coreconfigurator.c 
b/drivers/staging/wilc1000/coreconfigurator.c
index 9abc73d..792ba6d 100644
--- a/drivers/staging/wilc1000/coreconfigurator.c
+++ b/drivers/staging/wilc1000/coreconfigurator.c
@@ -12,7 +12,6 @@
 /*/
 /* File Includes */
 /*/
-#include "itypes.h"
 #include "coreconfigurator.h"
 /*/
 /* Constants */
diff --git a/drivers/staging/wilc1000/host_interface.c 
b/drivers/staging/wilc1000/host_interface.c
index ca59f1b..1e9a2f1 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -1,6 +1,5 @@
 #include "host_interface.h"
 #include "wilc_oswrapper.h"
-#include "itypes.h"
 #include "coreconfigurator.h"
 
 extern s32 TransportInit(void);
diff --git a/drivers/staging/wilc1000/itypes.h 
b/drivers/staging/wilc1000/itypes.h
deleted file mode 100644
index d64ae35..000
--- a/drivers/staging/wilc1000/itypes.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*/
-/*   */
-/* Ittiam 802.11 MAC SOFTWARE*/
-/*   */
-/*  ITTIAM SYSTEMS PVT LTD, BANGALORE*/
-/*   COPYRIGHT(C) 2005   */
-/*   */
-/*  This program  is  proprietary to  Ittiam  Systems  Private  Limited  and */
-/*  is protected under Indian  Copyright Law as an unpublished work. Its use */
-/*  and  disclosure  is  limited by  the terms  and  conditions of a license */
-/*  agreement. It may not be copied or otherwise  reproduced or disclosed to */
-/*  persons outside the licensee's organization except in accordance with the*/
-/*  terms  and  conditions   of  such  an  agreement.  All  copies  and  */
-/*  reproductions shall be the property of Ittiam Systems Private Limited and*/
-/*  must bear this notice in its entirety.   */
-/*   */
-/*/
-
-/*/
-/*   */
-/*  File Name : itypes.h */
-/*   */
-/*  Description   : This file contains all the data type definitions for */
-/*  MAC implementation.  */
-/*   */
-/*  List of Functions : None */
-/*  Issues / Problems : None */
-/*   */
-/*  Revision History  :  */
-/*   */
-/* DD MM    Author(s)   Changes  */
-/* 01 05 2005   Ittiam  Draft*/
-/*   */
-/*/
-
-#ifndef ITYPES_H
-#define ITYPES_H
-
-#endif /* ITYPES_H */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] staging: wilc1000: remove BOOL_T typedef

2015-06-12 Thread Chaehyun Lim
Remove BOOL_T typedef.

Signed-off-by: Chaehyun Lim 
---
 drivers/staging/wilc1000/host_interface.c | 6 +++---
 drivers/staging/wilc1000/itypes.h | 9 -
 2 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/wilc1000/host_interface.c 
b/drivers/staging/wilc1000/host_interface.c
index 17ab5cd..ca59f1b 100644
--- a/drivers/staging/wilc1000/host_interface.c
+++ b/drivers/staging/wilc1000/host_interface.c
@@ -7698,7 +7698,7 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo 
*ptstrNetworkInfo)
/* HT Cap. IE */
else if (pu8IEs[index] == HT_CAPABILITY_IE) {
/* if IE found set the flag */
-   pNewJoinBssParam->ht_capable = BTRUE;
+   pNewJoinBssParam->ht_capable = true;
index += pu8IEs[index + 1] + 2; /* ID,Length 
bytes and IE body */
/* PRINT_D(HOSTINF_DBG,"HT_CAPABALE\n"); */
continue;
@@ -7709,11 +7709,11 @@ static void *host_int_ParseJoinBssParam(tstrNetworkInfo 
*ptstrNetworkInfo)
   ((pu8IEs[index + 6] == 0x00) || 
(pu8IEs[index + 6] == 0x01)) && /* OUI Sub Type */
   (pu8IEs[index + 7] == 0x01)) {
/* Presence of WMM Info/Param element indicates 
WMM capability */
-   pNewJoinBssParam->wmm_cap = BTRUE;
+   pNewJoinBssParam->wmm_cap = true;
 
/* Check if Bit 7 is set indicating U-APSD 
capability */
if (pu8IEs[index + 8] & (1 << 7)) {
-   pNewJoinBssParam->uapsd_cap = BTRUE;
+   pNewJoinBssParam->uapsd_cap = true;
}
index += pu8IEs[index + 1] + 2;
continue;
diff --git a/drivers/staging/wilc1000/itypes.h 
b/drivers/staging/wilc1000/itypes.h
index 2441853..d64ae35 100644
--- a/drivers/staging/wilc1000/itypes.h
+++ b/drivers/staging/wilc1000/itypes.h
@@ -36,13 +36,4 @@
 #ifndef ITYPES_H
 #define ITYPES_H
 
-/*/
-/* Enums */
-/*/
-
-typedef enum {
-   BFALSE = 0,
-   BTRUE  = 1
-} BOOL_T;
-
 #endif /* ITYPES_H */
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html