linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2] Add iwlwifi wireless drivers
@ 2007-08-27  5:20 Zhu Yi
  2007-08-27 13:10 ` Christoph Hellwig
  2007-08-31 20:55 ` John W. Linville
  0 siblings, 2 replies; 20+ messages in thread
From: Zhu Yi @ 2007-08-27  5:20 UTC (permalink / raw)
  To: linux-wireless; +Cc: John W.Linville, Jeff Garzik


Hi,

This is the second version of the patch (still against 2.6.23-rc3) adds
the mac80211 based wireless drivers for the Intel PRO/Wireless
3945ABG/BG Network Connection and Intel Wireless WiFi Link AGN (4965)
adapters. You can find it from:
http://intellinuxwireless.org/iwlwifi/v5-Add-iwlwifi-wireless-drivers.patch

I list the changes against the first version I submitted to the list on
8/17 in case you have reviewed the previous version and only want to see
the diff. You can find the overall patch here:
http://intellinuxwireless.org/iwlwifi/iwlwifi-v4_to_v5.patch
and the broken out patches here:
http://intellinuxwireless.org/iwlwifi/patches/iwlwifi-v5-v4-patches/


Ben M Cahill (5):
      iwlwifi: remove unused 3945-only struct from 4965 build
      iwlwifi: move all uCode API structs into iwl-command.h
      iwlwifi: replace iwl_scanstart_notification with
iwl_scanreq_notification
      iwlwifi: add struct iwl_card_state_cmd as documentation
      iwlwifi: add BSM_DRAM_INST_LOAD definition

Johannes Berg (1):
      iwlwifi: remove atheros turbo modes

Johannes Engel (1):
      iwlwifi: fix iwl-3945-rs.c typo

Mohamed Abbas (3):
      iwlwifi: fix rs_get_best_rate to pick up the right rate
      iwlwifi: fix 11n connection problem
      iwlwifi: fix aggregation problem

Tomas Winkler (11):
      iwlwifi: adding queues_num module parameter
      iwlwifi: iwl_get_sta_id AP mode fix
      iwlwifi: EEPROM band 5 endianity fix
      iwlwifi: AP mode beacon update
      iwlwifi: kill iwl_rate union
      iwlwifi: simplifying reclaim flow
      iwlwifi: removing while loop from iwl_print_hex_dump
      iwlwifi: typo fix for CONFIG_IWLWIFI_SPECTRUM_MEASUREMENY
      iwlwifi: remove unused code
      iwlwifi: rate scaling - up scaling fix
      iwlwifi: rate scale quality command fix

Zhu Yi (10):
      iwlwifi: replace lock_flags into simpler flags
      iwlwifi: split priv->hcmd_lock from priv->lock to protect hcmd
queue
      iwlwifi: iwl_mac_set_key cleanup
      iwlwifi: fix priv->hcmd_lock uninitialized problem
      iwlwifi: Update version iwl-base.c stamp to 0.1.9
      iwlwifi: fix iwl_grab_restricted_access return code
      iwlwifi: Update version iwl-base.c stamp to 0.1.10
      iwlwifi: add a parameter to functions
iwl_rate_control_[un]register
      iwlwifi: Update version iwl-base.c stamp to 0.1.11
      iwlwifi: fix iwl_send_cmd_async return value bug

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-27  5:20 [PATCH V2] Add iwlwifi wireless drivers Zhu Yi
@ 2007-08-27 13:10 ` Christoph Hellwig
  2007-08-28  7:25   ` Zhu Yi
  2007-08-31 20:55 ` John W. Linville
  1 sibling, 1 reply; 20+ messages in thread
From: Christoph Hellwig @ 2007-08-27 13:10 UTC (permalink / raw)
  To: Zhu Yi; +Cc: linux-wireless, John W.Linville, Jeff Garzik

On Mon, Aug 27, 2007 at 01:20:12PM +0800, Zhu Yi wrote:
> 
> Hi,
> 
> This is the second version of the patch (still against 2.6.23-rc3) adds
> the mac80211 based wireless drivers for the Intel PRO/Wireless
> 3945ABG/BG Network Connection and Intel Wireless WiFi Link AGN (4965)
> adapters. You can find it from:
> http://intellinuxwireless.org/iwlwifi/v5-Add-iwlwifi-wireless-drivers.patch
> 
> I list the changes against the first version I submitted to the list on
> 8/17 in case you have reviewed the previous version and only want to see
> the diff. You can find the overall patch here:
> http://intellinuxwireless.org/iwlwifi/iwlwifi-v4_to_v5.patch
> and the broken out patches here:
> http://intellinuxwireless.org/iwlwifi/patches/iwlwifi-v5-v4-patches/

Btw, strong NACK from me until you sort out the mess with the common files.
Including C files with cpp symbols defined or not is not how we do driver
development in Linux.  Please split out really common code into common
files, and build driver specific code into files of it's own.  Having a
slight amount of duplicated code is much better than having such a mess
for maintaince.


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-27 13:10 ` Christoph Hellwig
@ 2007-08-28  7:25   ` Zhu Yi
  2007-08-28  8:50     ` Johannes Berg
  0 siblings, 1 reply; 20+ messages in thread
From: Zhu Yi @ 2007-08-28  7:25 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-wireless, John W.Linville, Jeff Garzik

On Mon, 2007-08-27 at 14:10 +0100, Christoph Hellwig wrote:
> Btw, strong NACK from me until you sort out the mess with the common
> files. Including C files with cpp symbols defined or not is not how we
> do driver development in Linux.  Please split out really common code
> into common files, and build driver specific code into files of it's
> own.  Having a slight amount of duplicated code is much better than
> having such a mess for maintaince.

It's not a "slight amount" of duplicated code.

$ expr `grep -e '^{$' iwl-base.c |wc -l` - ` sed -e '/^{$/,/^}$/{/#if
IWL == /,/^}$/d}' iwl-base.c |grep -e '^}$' |wc -l`
34

Additional 34 functions have to be splited out from iwl-base.c into
their own hardware specific files. If you look at the code, most of
these functions are only with little difference which are caused by the
difference of the hardware. In the future, when we add new hardware
support for iwlwifi, it's more maintainable to extend the current
functions with new hardware difference than copy all the 34 functions
into a new file and only make slight changes to each of them.

I know the method is not common used in the Linux drivers, but this is
decided by the hardware layout. For 3945 and 4965, 90% of the
hardware/firmware layout are the same and only 10% are different. This
makes it possible to support two slightly differs hardwares in one
driver. If the hardwares differ a lot (i.e 2100 and 2200), I won't even
think about to do it in this way.

Thanks,
-yi

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-28  7:25   ` Zhu Yi
@ 2007-08-28  8:50     ` Johannes Berg
  2007-08-28  9:07       ` Zhu Yi
  2007-08-28 12:28       ` Christoph Hellwig
  0 siblings, 2 replies; 20+ messages in thread
From: Johannes Berg @ 2007-08-28  8:50 UTC (permalink / raw)
  To: Zhu Yi; +Cc: Christoph Hellwig, linux-wireless, John W.Linville, Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 657 bytes --]

On Tue, 2007-08-28 at 15:25 +0800, Zhu Yi wrote:

> I know the method is not common used in the Linux drivers, but this is
> decided by the hardware layout. For 3945 and 4965, 90% of the
> hardware/firmware layout are the same and only 10% are different. This
> makes it possible to support two slightly differs hardwares in one
> driver. If the hardwares differ a lot (i.e 2100 and 2200), I won't even
> think about to do it in this way.

To be fair, that's not what you do, you're building two drivers from one
source rather than have a single driver that supports both. I'm fairly
certain Christoph wouldn't object to the latter.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-28  8:50     ` Johannes Berg
@ 2007-08-28  9:07       ` Zhu Yi
  2007-08-28  9:28         ` Johannes Berg
  2007-08-28 12:28       ` Christoph Hellwig
  1 sibling, 1 reply; 20+ messages in thread
From: Zhu Yi @ 2007-08-28  9:07 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Christoph Hellwig, linux-wireless, John W.Linville, Jeff Garzik

On Tue, 2007-08-28 at 10:50 +0200, Johannes Berg wrote:
> To be fair, that's not what you do, you're building two drivers from
> one source rather than have a single driver that supports both. I'm
> fairly certain Christoph wouldn't object to the latter. 

Because of the difference of the two hardwares (for example, in
iwl-command.h, iwl_rxon_assoc_cmd differs between 3945 and 4965),
runtime supporting is difficult if not possible (hw structures differs).
So we select to do it statically by generating two drivers from one
source code.

Do you think if it is a good idea to split them into two drivers and
make each of them "#include iwl-base.c"? Please don't hesitate to share
if you have better ideas.

Thanks,
-yi

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-28  9:07       ` Zhu Yi
@ 2007-08-28  9:28         ` Johannes Berg
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Berg @ 2007-08-28  9:28 UTC (permalink / raw)
  To: Zhu Yi; +Cc: Christoph Hellwig, linux-wireless, John W.Linville, Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 880 bytes --]

On Tue, 2007-08-28 at 17:07 +0800, Zhu Yi wrote:

> Because of the difference of the two hardwares (for example, in
> iwl-command.h, iwl_rxon_assoc_cmd differs between 3945 and 4965),
> runtime supporting is difficult if not possible (hw structures differs).
> So we select to do it statically by generating two drivers from one
> source code.

We used to be able to even runtime-select transmit headers in bcm43xx.

> Do you think if it is a good idea to split them into two drivers and
> make each of them "#include iwl-base.c"? Please don't hesitate to share
> if you have better ideas.

I thought that's what you do now?

I haven't looked into what the differences are.

Some things I plain don't understand, like this:
#if IWL == 4965
#ifdef CONFIG_IWLWIFI_SENSITIVITY

why not just make the latter depend on 4965 in Kconfig? Same with HT.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-28  8:50     ` Johannes Berg
  2007-08-28  9:07       ` Zhu Yi
@ 2007-08-28 12:28       ` Christoph Hellwig
  2007-08-28 13:37         ` Tomas Winkler
  1 sibling, 1 reply; 20+ messages in thread
From: Christoph Hellwig @ 2007-08-28 12:28 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Zhu Yi, Christoph Hellwig, linux-wireless, John W.Linville,
	Jeff Garzik

On Tue, Aug 28, 2007 at 10:50:15AM +0200, Johannes Berg wrote:
> On Tue, 2007-08-28 at 15:25 +0800, Zhu Yi wrote:
> 
> > I know the method is not common used in the Linux drivers, but this is
> > decided by the hardware layout. For 3945 and 4965, 90% of the
> > hardware/firmware layout are the same and only 10% are different. This
> > makes it possible to support two slightly differs hardwares in one
> > driver. If the hardwares differ a lot (i.e 2100 and 2200), I won't even
> > think about to do it in this way.
> 
> To be fair, that's not what you do, you're building two drivers from one
> source rather than have a single driver that supports both. I'm fairly
> certain Christoph wouldn't object to the latter.

Absolutely not.  The right way to do it is to have a least a common
driver core, and if the device-specific parts get too big they can but
don't have to be separate modules.

With s"light amount of duplicated code" I meant possibly duplicated bits if
the split between common and device-specific bits doesn't work out perfectly
because e.g. both device types do the same kind of operation on differently
layed out data structures, which AFAIK is the case for some operations in
this driver.

> 
> johannes


---end quoted text---

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-28 12:28       ` Christoph Hellwig
@ 2007-08-28 13:37         ` Tomas Winkler
  0 siblings, 0 replies; 20+ messages in thread
From: Tomas Winkler @ 2007-08-28 13:37 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Johannes Berg, Zhu Yi, linux-wireless, John W.Linville,
	Jeff Garzik

On 8/28/07, Christoph Hellwig <hch@infradead.org> wrote:
> On Tue, Aug 28, 2007 at 10:50:15AM +0200, Johannes Berg wrote:
> > On Tue, 2007-08-28 at 15:25 +0800, Zhu Yi wrote:
> >
> > > I know the method is not common used in the Linux drivers, but this is
> > > decided by the hardware layout. For 3945 and 4965, 90% of the
> > > hardware/firmware layout are the same and only 10% are different. This
> > > makes it possible to support two slightly differs hardwares in one
> > > driver. If the hardwares differ a lot (i.e 2100 and 2200), I won't even
> > > think about to do it in this way.
> >
> > To be fair, that's not what you do, you're building two drivers from one
> > source rather than have a single driver that supports both. I'm fairly
> > certain Christoph wouldn't object to the latter.
>
> Absolutely not.  The right way to do it is to have a least a common
> driver core, and if the device-specific parts get too big they can but
> don't have to be separate modules.
>
> With s"light amount of duplicated code" I meant possibly duplicated bits if
> the split between common and device-specific bits doesn't work out perfectly
> because e.g. both device types do the same kind of operation on differently
> layed out data structures, which AFAIK is the case for some operations in
> this driver.
>
As far as I can speak for next generation of Intel Linux Wifi drivers
the #if IWL == will be killed.
3945 will be probably dropped to it's own module as it is abg NIC
unlike other 11n NICs. It differs quite a lot in data structures and
mostly in flows.  This wasn't clear at the begin when 4965 was build
on top of 3945 so we ended up with IWL == which was much more
efficient at the time. We had the library approach before if you
remember.
The mess stared somewhere at the point where HT was dropped from
submission to mainstream and we rushed to create something that can be
submitted. To much code was jungled in the air and still is... Hope we
settle all this now to the right path

Tomas


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

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-27  5:20 [PATCH V2] Add iwlwifi wireless drivers Zhu Yi
  2007-08-27 13:10 ` Christoph Hellwig
@ 2007-08-31 20:55 ` John W. Linville
  2007-08-31 22:03   ` Johannes Berg
  2007-09-04  2:25   ` Zhu Yi
  1 sibling, 2 replies; 20+ messages in thread
From: John W. Linville @ 2007-08-31 20:55 UTC (permalink / raw)
  To: Zhu Yi; +Cc: linux-wireless, Jeff Garzik

On Mon, Aug 27, 2007 at 01:20:12PM +0800, Zhu Yi wrote:

> This is the second version of the patch (still against 2.6.23-rc3) adds
> the mac80211 based wireless drivers for the Intel PRO/Wireless
> 3945ABG/BG Network Connection and Intel Wireless WiFi Link AGN (4965)
> adapters. You can find it from:
> http://intellinuxwireless.org/iwlwifi/v5-Add-iwlwifi-wireless-drivers.patch

A few comments below -- many of them are nits or somewhat minor.
I think the ieee80211_rate.h one needs to be resolved for sure.  Also,
splitting iwl-base.c is definitely worth considering -- building two
object from one source is a bit ugly.

Please respond to the questions/comments, and indicate if/when you
will split iwl-base.c.  Also, let's figure-out what really needs to
be exportd to drivers from ieee80211_rate.h and get that done.

Thanks for the post!

John

--------------------------------------------------------------------------------

Big plus: both drivers work fairly well, and have received a lot of
testing in Fedora (F7 and rawhide).

--------------------------------------------------------------------------------

As others have pointed-out, building two drivers from a single source
is a bit ugly.  I hacked-up a couple of awk scripts to separate this
into two files (btw, let me know if you want them).  It seems the two
files differ by 5-10% (depending on how you score it).  I'm not sure
what the cut-off should be for requiring a split...?

$ wc iwl-base.c
  9565  29226 265696 iwl-base.c

$ wc iwl3945-base.c
  8701  26834 242294 iwl3945-base.c

$ wc iwl4965-base.c
  9197  28016 256601 iwl4965-base.c

FWIW, it looks like some of the header files also use the IWL defintion
for "two objects from one source" compilation.

--------------------------------------------------------------------------------

Nit: does iwl_hw_valid_rtc_data_addr need to be inline?

--------------------------------------------------------------------------------

IWL_DEBUG_RATE("enter\n")
IWL_DEBUG_RATE("leave\n")
IWL_DEBUG_RATE("NOP\n");

Multiples of each of these, particularly in the rate scaling algorithms.
Are these necessary?  Some seem to like them, others don't...

--------------------------------------------------------------------------------

iwl-4965-rs.c:

#include "../net/mac80211/ieee80211_rate.h"

I think this is unacceptable.  Let's figure-out what needs to be
exported to drivers and get it moved to an appopriate header, rather
than just pulling a header from a random location out of the tree.

--------------------------------------------------------------------------------

Same file line 586:

#define IWL_LEGACY_SWITCH_ANTENNA      0
#define IWL_LECACY_SWITCH_SISO         1
#define IWL_LEGACY_SWITCH_MIMO         2

#define IWL_RS_GOOD_RATIO              12800

#define IWL_ACTION_LIMIT               3
#define IWL_LEGACY_FAILURE_LIMIT       160
#define IWL_LEGACY_SUCCESS_LIMIT       480
#define IWL_LEGACY_TABLE_COUNT         160

#define IWL_NONE_LEGACY_FAILURE_LIMIT  400
#define IWL_NONE_LEGACY_SUCCESS_LIMIT  4500
#define IWL_NONE_LEGACY_TABLE_COUNT    1500

#define IWL_RATE_SCALE_SWITCH          (10880)

Shouldn't these be in a header file, or at least at the top of this
file?

--------------------------------------------------------------------------------

Same file line 1115:

#define IWL_SISO_SWITCH_ANTENNA  0
#define IWL_SISO_SWITCH_MIMO     1
#define IWL_SISO_SWITCH_GI       2

Ditto?

--------------------------------------------------------------------------------

Same file line 1210:

#define IWL_MIMO_SWITCH_ANTENNA_A      0
#define IWL_MIMO_SWITCH_ANTENNA_B      1
#define IWL_MIMO_SWITCH_GI             2

Ditto?

--------------------------------------------------------------------------------

Does iwl_rate_index_from_plcp need to be inline?  It seems a bit long,
and called from several places.  (And defined in multiple places...)

--------------------------------------------------------------------------------

iwl-4965.c line 1815:

#define TX_POWER_IWL_ILLEGAL_VDET    -100000
#define TX_POWER_IWL_ILLEGAL_VOLTAGE -10000
#define TX_POWER_IWL_CLOSED_LOOP_MIN_POWER 18
#define TX_POWER_IWL_CLOSED_LOOP_MAX_POWER 34
#define TX_POWER_IWL_VDET_SLOPE_BELOW_NOMINAL 17
#define TX_POWER_IWL_VDET_SLOPE_ABOVE_NOMINAL 20
#define TX_POWER_IWL_NOMINAL_POWER            26
#define TX_POWER_IWL_CLOSED_LOOP_ITERATION_LIMIT 1
#define TX_POWER_IWL_VOLTAGE_CODES_PER_03V       7
#define TX_POWER_IWL_DEGREES_PER_VDET_CODE       11
#define IWL_TX_POWER_MAX_NUM_PA_MEASUREMENTS 1
#define IWL_TX_POWER_CCK_COMPENSATION_B_STEP (9)
#define IWL_TX_POWER_CCK_COMPENSATION_C_STEP (5)

Same as previous "#define in middle of file" comments...

--------------------------------------------------------------------------------

iwl-4965.c line 2800:

#define IWL4965_LEGACY_SWITCH_ANTENNA  0
#define IWL4965_LECACY_SWITCH_SISO             1
#define IWL4965_LEGACY_SWITCH_MIMO             2

#define IWL4965_GOOD_RATIO                     12800

#define IWL_ACTION_LIMIT               3
#define IWL4965_LEGACY_FAILURE_LIMIT   160
#define IWL4965_LEGACY_SUCCESS_LIMIT   480
#define IWL4965_LEGACY_TABLE_COUNT             160

#define IWL4965_NONE_LEGACY_FAILURE_LIMIT      400
#define IWL4965_NONE_LEGACY_SUCCESS_LIMIT      4500
#define IWL4965_NONE_LEGACY_TABLE_COUNT        1500

#define IWL4965_RATE_SCALE_SWITCH  (10880)

Ditto?

--------------------------------------------------------------------------------

There are several more examples like the above -- I'm not going to keep
documenting them...

--------------------------------------------------------------------------------

Otherwise, it mostly seems acceptable.  I think the mac80211 guys
have a few issues -- hopefully they will chime-in here now?

-- 
John W. Linville
linville@tuxdriver.com

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-31 20:55 ` John W. Linville
@ 2007-08-31 22:03   ` Johannes Berg
  2007-09-01 10:04     ` Johannes Berg
  2007-09-04  2:25   ` Zhu Yi
  1 sibling, 1 reply; 20+ messages in thread
From: Johannes Berg @ 2007-08-31 22:03 UTC (permalink / raw)
  To: John W. Linville; +Cc: Zhu Yi, linux-wireless, Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 548 bytes --]

On Fri, 2007-08-31 at 16:55 -0400, John W. Linville wrote:

> Otherwise, it mostly seems acceptable.  I think the mac80211 guys
> have a few issues -- hopefully they will chime-in here now?

Few things off the top of my head:
 * mac80211 will be very noisy with the recent key changes -- the
   iwlwifi drivers don't allow disabling keys which is sort of required.

 * oopses when you enabled a monitor mode interface and have iwlwifi
   debug enabled

 * doesn't honour mac address setting, always uses eeprom mac address

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-31 22:03   ` Johannes Berg
@ 2007-09-01 10:04     ` Johannes Berg
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Berg @ 2007-09-01 10:04 UTC (permalink / raw)
  To: John W. Linville; +Cc: Zhu Yi, linux-wireless, Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 823 bytes --]

Here's another thing:

iwlwifi tries to guess the state of the associate state machine in the
stack by looking at what frames it sends. This will sooner or later
break, please fix it by adding notification calls to the stack about the
things iwlwifi cares about (I think it's mostly powersave mode).

Also, it drops frames to not associated stations. This is something
mac80211 already does.

Then there's some code manipulating the QoS field: that's something you
should be contributing to the stack instead of hiding in iwlwifi. It
also seems to do aggregation. Why the hell are you adding deaggregation
to the stack while having aggregation here. Hate.

Also, there are some comments I don't understand related to
fragmentation ("copy frags header").

Clearly, there's lots of work to do.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-08-31 20:55 ` John W. Linville
  2007-08-31 22:03   ` Johannes Berg
@ 2007-09-04  2:25   ` Zhu Yi
  2007-09-04 14:13     ` Johannes Berg
  1 sibling, 1 reply; 20+ messages in thread
From: Zhu Yi @ 2007-09-04  2:25 UTC (permalink / raw)
  To: John W. Linville; +Cc: linux-wireless, Jeff Garzik

On Fri, 2007-08-31 at 16:55 -0400, John W. Linville wrote:
> A few comments below -- many of them are nits or somewhat minor.
> I think the ieee80211_rate.h one needs to be resolved for sure.  Also,
> splitting iwl-base.c is definitely worth considering -- building two
> object from one source is a bit ugly.
> 
> Please respond to the questions/comments, and indicate if/when you
> will split iwl-base.c.

Will split it in the next version as well as addressing all your
comments below.

> Also, let's figure-out what really needs to
> be exportd to drivers from ieee80211_rate.h and get that done.

Since they are device specific rate scale algorithm, I don't think they
will help to increase performance for other devices. So make them stay
together with the driver is a better choice (vs. with mac80211). If so,
the rate scale interface has to be abstracted from internal mac80211.
The current dependencies are as below:

iwl3945-rs -> rate_control_ops (ieee80211_rate.h)
rate_control_ops -> sta_info (sta_info.h)
rate_control_ops -> ieee80211_local (ieee80211_i.h)
ieee80211_local -> ieee80211_key (ieee80211_key.h)

If we want to avoid a big restructure of the mac80211 headers, the
easiest way is to move four header files from net/mac80211 to
include/net/ and rename them with mac80211_ prefix (especially for
sta_info.h). This way, for any mac80211 based wireless drivers want to
create their own rate scale algorithm, they can smiply include
<net/mac80211_rate.h> and implement all the callback functions.
Comments?

If you all agree with this change, especially the mac80211 folks, I'll
come up with a patch for it.

Thanks,
-yi

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-04  2:25   ` Zhu Yi
@ 2007-09-04 14:13     ` Johannes Berg
  2007-09-06  1:32       ` Ian Schram
  0 siblings, 1 reply; 20+ messages in thread
From: Johannes Berg @ 2007-09-04 14:13 UTC (permalink / raw)
  To: Zhu Yi; +Cc: John W. Linville, linux-wireless, Jeff Garzik

[-- Attachment #1: Type: text/plain, Size: 1553 bytes --]

On Tue, 2007-09-04 at 10:25 +0800, Zhu Yi wrote:

> Since they are device specific rate scale algorithm, I don't think they
> will help to increase performance for other devices.

What exactly is device specific?

> If so,
> the rate scale interface has to be abstracted from internal mac80211.
> The current dependencies are as below:
> 
> iwl3945-rs -> rate_control_ops (ieee80211_rate.h)
> rate_control_ops -> sta_info (sta_info.h)
> rate_control_ops -> ieee80211_local (ieee80211_i.h)
> ieee80211_local -> ieee80211_key (ieee80211_key.h)

I never liked exporting ieee80211_local to the rate control algorithms.
That just means the interface is badly defined. And sta_info I'm not too
sure about either, on the one hand the rate control algorithms need
access to some flags but on the other hand some things if they need to
store per-sta information then it can't really be in the sta_info struct
since that info varies per algorithm

> If we want to avoid a big restructure of the mac80211 headers, the
> easiest way is to move four header files from net/mac80211 to
> include/net/ and rename them with mac80211_ prefix (especially for
> sta_info.h). This way, for any mac80211 based wireless drivers want to
> create their own rate scale algorithm, they can smiply include
> <net/mac80211_rate.h> and implement all the callback functions.
> Comments?

I don't like this, especially not ieee80211_i.h. I'm ok with _rate.h,
but let's get rid of the ieee80211_local dependency in rate control
algorithms.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-04 14:13     ` Johannes Berg
@ 2007-09-06  1:32       ` Ian Schram
  2007-09-06  2:20         ` Larry Finger
  2007-09-06 12:00         ` Johannes Berg
  0 siblings, 2 replies; 20+ messages in thread
From: Ian Schram @ 2007-09-06  1:32 UTC (permalink / raw)
  To: Johannes Berg; +Cc: linux-wireless, Zhu, Yi, John W. Linville



Johannes Berg wrote:
> On Tue, 2007-09-04 at 10:25 +0800, Zhu Yi wrote:
> 
>> Since they are device specific rate scale algorithm, I don't think they
>> will help to increase performance for other devices.
> 
> What exactly is device specific?
> 

I thought I'd try and answer this question to the best of my ability, since it
has been asked before. And even though it's open source and now has been submitted
to this list, leaving this unanswered feels like a creepy way of potential time bombs
and frustration. That said I'm probably not the best person to do it.


iwl3945-rs:

- the device can retry at different rates, and hence is able to deduct
from the total number of retries a packet needed at which rates it failed/
succeeded

- tables of expected tpt (throughput?) which are used in the the throughput
calculation are probably not very universal?
there aren't identical for 3945 and 4965.

-some synchronization of the station list with the device ucode happens here


addidtionally in iwl4965-rs:

- there is additionally the use of the "link quality" command which for example gets issued when
there isn't enough of other throughput data available.



Might be other things that I have missed, and
parts of the algorithm might be tested/fine tuned for the intended devices.


So that's that. Some questionable implementation details, but it does use
device specific logic/capabilities in order to decide which rate to use.
Now what do we do?

ian

> johannes

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-06  1:32       ` Ian Schram
@ 2007-09-06  2:20         ` Larry Finger
  2007-09-06 12:00         ` Johannes Berg
  1 sibling, 0 replies; 20+ messages in thread
From: Larry Finger @ 2007-09-06  2:20 UTC (permalink / raw)
  To: Ian Schram; +Cc: Johannes Berg, linux-wireless, Zhu, Yi, John W. Linville

Ian Schram wrote:
> 
> Johannes Berg wrote:
>> On Tue, 2007-09-04 at 10:25 +0800, Zhu Yi wrote:
>>
>>> Since they are device specific rate scale algorithm, I don't think they
>>> will help to increase performance for other devices.
>> What exactly is device specific?
>>
> 
> I thought I'd try and answer this question to the best of my ability, since it
> has been asked before. And even though it's open source and now has been submitted
> to this list, leaving this unanswered feels like a creepy way of potential time bombs
> and frustration. That said I'm probably not the best person to do it.
> 
> 
> iwl3945-rs:
> 
> - the device can retry at different rates, and hence is able to deduct
> from the total number of retries a packet needed at which rates it failed/
> succeeded
> 
> - tables of expected tpt (throughput?) which are used in the the throughput
> calculation are probably not very universal?
> there aren't identical for 3945 and 4965.
> 
> -some synchronization of the station list with the device ucode happens here
> 
> 
> addidtionally in iwl4965-rs:
> 
> - there is additionally the use of the "link quality" command which for example gets issued when
> there isn't enough of other throughput data available.
> 
> 
> 
> Might be other things that I have missed, and
> parts of the algorithm might be tested/fine tuned for the intended devices.
> 
> 
> So that's that. Some questionable implementation details, but it does use
> device specific logic/capabilities in order to decide which rate to use.
> Now what do we do?

For the first time since this thread started, I think I begin to understand. What is wanted is not a 
new/exotic rate algorithm as much as a way to override the algorithm that mac80211 is using and 
specify the rate you want. If this is correct, such a change would be easy. Such an override would 
be valid only for a STA, and the logic is already there to lock the STA rate in the WEXT interface 
(see routine ieee80211_ioctl_siwrate in net/mac80211/ieee80211_ioctl.c). There are two quantities 
that index the rates in the mode->rates array, sdata->bss->max_ratectrl_rateidx, and 
sdata->bss->force_unicast_rateidx. They are interpreted using the following logic:

if (ratectl_rateidx == -1)
     any legal rate is allowed
else
     the maximum rate is that specified in ratectl_index

if (unicast_rateidx == -1)
     allow any rate up to the maximum above
else
     perform unicast operations at the specified rate

The resulting call will need to supply a net_device and a rate. After verifying that the STA exists, 
it should find the rate in the rate tables and set the two above quantities to the index of that 
rate, just as ieee80211_ioctl_siwrate does.

Certainly, as long as one allows a WEXT entry to set a fixed rate and I would strenuously object if 
someone tried to remove it, a driver should be allowed to do so as well.

Larry



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-06  1:32       ` Ian Schram
  2007-09-06  2:20         ` Larry Finger
@ 2007-09-06 12:00         ` Johannes Berg
  2007-09-06 14:04           ` Tomas Winkler
  1 sibling, 1 reply; 20+ messages in thread
From: Johannes Berg @ 2007-09-06 12:00 UTC (permalink / raw)
  To: Ian Schram; +Cc: linux-wireless, Zhu, Yi, John W. Linville, Felix Fietkau

[-- Attachment #1: Type: text/plain, Size: 2158 bytes --]

On Thu, 2007-09-06 at 03:32 +0200, Ian Schram wrote:

> I thought I'd try and answer this question to the best of my ability, since it
> has been asked before. And even though it's open source and now has been submitted
> to this list, leaving this unanswered feels like a creepy way of potential time bombs
> and frustration. That said I'm probably not the best person to do it.

Thanks, I appreciate it.

> iwl3945-rs:
> 
> - the device can retry at different rates, and hence is able to deduct
> from the total number of retries a packet needed at which rates it failed/
> succeeded

We recently discussed this capability, atheros hardware as it as well,
so we need a generic way to tell mac80211 how many retry rates the
hardware can support so that better rate control algorithms can be
written. I don't see this as device specific but rather as something the
mac80211 driver interface is currently lacking. Cf. the "minstrel" rate
control algorithm.

> - tables of expected tpt (throughput?) which are used in the the throughput
> calculation are probably not very universal?
> there aren't identical for 3945 and 4965.

Seems to me like something the driver should be doing and reporting to
the rate control algorithm via some defined interface.

> -some synchronization of the station list with the device ucode happens here

This is totally wrong. Please extend mac80211 instead, maybe the
sta_table_notification callback.

> So that's that. Some questionable implementation details, but it does use
> device specific logic/capabilities in order to decide which rate to use.
> Now what do we do?

As a first step, I think we (i.e. mostly you because only few other
people have an interest right now) should work on defining an interface
between the drivers and mac80211 that allows the drivers to export these
capabilities like "how many different retry rates can I give you with
one packet" in order to allow different rate control algorithms to take
advantage of that. Oh and then don't just implement the interface and
push it onto us as a "ok done" thing but discuss the interface first.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-06 12:00         ` Johannes Berg
@ 2007-09-06 14:04           ` Tomas Winkler
  2007-09-06 14:14             ` Johannes Berg
  0 siblings, 1 reply; 20+ messages in thread
From: Tomas Winkler @ 2007-09-06 14:04 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Ian Schram, linux-wireless, Zhu, Yi, John W. Linville,
	Felix Fietkau

On 9/6/07, Johannes Berg <johannes@sipsolutions.net> wrote:
> On Thu, 2007-09-06 at 03:32 +0200, Ian Schram wrote:
>
> > I thought I'd try and answer this question to the best of my ability, since it
> > has been asked before. And even though it's open source and now has been submitted
> > to this list, leaving this unanswered feels like a creepy way of potential time bombs
> > and frustration. That said I'm probably not the best person to do it.
>
> Thanks, I appreciate it.
>
> > iwl3945-rs:
> >
> > - the device can retry at different rates, and hence is able to deduct
> > from the total number of retries a packet needed at which rates it failed/
> > succeeded
>
> We recently discussed this capability, atheros hardware as it as well,
> so we need a generic way to tell mac80211 how many retry rates the
> hardware can support so that better rate control algorithms can be
> written. I don't see this as device specific but rather as something the
> mac80211 driver interface is currently lacking. Cf. the "minstrel" rate
> control algorithm.

There is nothing NOT general in 3945 rate scaling algorithm just the
current interfaces of rate scaling algorithm is a bit awkward, not
extensible. The struct ieee80211_tx_status is tight to mac80211 and
not to rate scale algorithm so if you create your own crazy rate scale
algorithm you cannot decide what parameters you need.

> > - tables of expected tpt (throughput?) which are used in the the throughput
> > calculation are probably not very universal?
> > there aren't identical for 3945 and 4965.
>
> Seems to me like something the driver should be doing and reporting to
> the rate control algorithm via some defined interface.
>
Agree

> > -some synchronization of the station list with the device ucode happens here
>
> This is totally wrong. Please extend mac80211 instead, maybe the
> sta_table_notification callback.
>
True we have some RFC patches with that unfortunately need some time
to catchup on current  wireless-dev changes. Looks like students were
on vacation and spent more time behind computers then on the sea shore
:)

> > So that's that. Some questionable implementation details, but it does use
> > device specific logic/capabilities in order to decide which rate to use.
> > Now what do we do?
>
> As a first step, I think we (i.e. mostly you because only few other
> people have an interest right now) should work on defining an interface
> between the drivers and mac80211 that allows the drivers to export these
> capabilities like "how many different retry rates can I give you with
> one packet" in order to allow different rate control algorithms to take
> advantage of that. Oh and then don't just implement the interface and
> push it onto us as a "ok done" thing but discuss the interface first.
>
4965 is 11n card and rate scale algorithm is totally different.
One aspect is that rate scaling works  with much more parameters. MIMO
rates are rather 2 dimensional table, therefore the algorithm is
essentially different, but so far no interface change is needed.
Actually it covers also legacy rate scaling.

The second aspect of HT is the aggregation. Bunch of packets at once
and they are also ACKed at once so regular TX status path of updating
rate scale algorithm is not so natural. Mostly because it is combined
with reclaiming the packet.

Third part and this is 4965 specific is that  TX rate is not attached
to packet but rate table is updated when need on it's own path. This
is device specific.

Forth is that the aggregation. In general this involves some handshake
on protocol level i.e. MLME but efficiency of aggregation is kind of
rate scaling decision in addition  it might be enabled only for MIMO
rates (different plcp header)

I would suggest to change rate scaling interface algorithm in following way

1. rs_update_event(sta, struct rs_data *)  - function that brings rate
scaling statistics not connected to packet reclaim path
  struct rs_data is specific to rate scaling and opaque to mac80211

2. rs_add_sta/rs_init(sta)  - create new instance of rate scaling for
added station including AP in STA mode

3. rs_compute(sta/sta_addr) - actual computation of rate scaling
algorithm possible also from RX path (tx reclaim)

4.  rs_get_rate - for regular TX path setting of rates

5. void (*rs_apply_rates)(sta_addr)  - driver supplied handler for
applying rate not through TX path.


Tomas





> johannes
>
>

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-06 14:04           ` Tomas Winkler
@ 2007-09-06 14:14             ` Johannes Berg
  2007-09-06 14:31               ` Tomas Winkler
  0 siblings, 1 reply; 20+ messages in thread
From: Johannes Berg @ 2007-09-06 14:14 UTC (permalink / raw)
  To: Tomas Winkler
  Cc: Ian Schram, linux-wireless, Zhu, Yi, John W. Linville,
	Felix Fietkau

[-- Attachment #1: Type: text/plain, Size: 2777 bytes --]

On Thu, 2007-09-06 at 17:04 +0300, Tomas Winkler wrote:

> There is nothing NOT general in 3945 rate scaling algorithm just the
> current interfaces of rate scaling algorithm is a bit awkward, not
> extensible. The struct ieee80211_tx_status is tight to mac80211 and
> not to rate scale algorithm so if you create your own crazy rate scale
> algorithm you cannot decide what parameters you need.

Yeah, I agree, we need to improve this. "minstrel" really wants more
retry rates too than just two.

> 4965 is 11n card and rate scale algorithm is totally different.
> One aspect is that rate scaling works  with much more parameters. MIMO
> rates are rather 2 dimensional table, therefore the algorithm is
> essentially different, but so far no interface change is needed.
> Actually it covers also legacy rate scaling.

Right. Maybe we can orthogonalize this into a rate control interface
for .11n and one for "legacy"?

> The second aspect of HT is the aggregation. Bunch of packets at once
> and they are also ACKed at once so regular TX status path of updating
> rate scale algorithm is not so natural. Mostly because it is combined
> with reclaiming the packet.

This is something you need to work on in mac80211 anyway. I don't like
how your driver does all the decisions about when to aggregate etc. This
should be in the per-sta code in mac80211.

> Third part and this is 4965 specific is that  TX rate is not attached
> to packet but rate table is updated when need on it's own path. This
> is device specific.

It seemed like the rate was attached to each station. This is a bit and
I don't really know how to handle it.

> Forth is that the aggregation. In general this involves some handshake
> on protocol level i.e. MLME but efficiency of aggregation is kind of
> rate scaling decision in addition  it might be enabled only for MIMO
> rates (different plcp header)

Right. I think you mentioned aggregation as number two already :)

> 1. rs_update_event(sta, struct rs_data *)  - function that brings rate
> scaling statistics not connected to packet reclaim path
>   struct rs_data is specific to rate scaling and opaque to mac80211

What sort of statistics would it bring, and when?

> 2. rs_add_sta/rs_init(sta)  - create new instance of rate scaling for
> added station including AP in STA mode

That's what we have now afaict.

> 3. rs_compute(sta/sta_addr) - actual computation of rate scaling
> algorithm possible also from RX path (tx reclaim)

Where would it be called?

> 4.  rs_get_rate - for regular TX path setting of rates

Right.

> 5. void (*rs_apply_rates)(sta_addr)  - driver supplied handler for
> applying rate not through TX path.

This needs more parameters, no?

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-06 14:14             ` Johannes Berg
@ 2007-09-06 14:31               ` Tomas Winkler
  2007-09-06 14:40                 ` Johannes Berg
  0 siblings, 1 reply; 20+ messages in thread
From: Tomas Winkler @ 2007-09-06 14:31 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Ian Schram, linux-wireless, Zhu, Yi, John W. Linville,
	Felix Fietkau

On 9/6/07, Johannes Berg <johannes@sipsolutions.net> wrote:
> On Thu, 2007-09-06 at 17:04 +0300, Tomas Winkler wrote:
>
> > There is nothing NOT general in 3945 rate scaling algorithm just the
> > current interfaces of rate scaling algorithm is a bit awkward, not
> > extensible. The struct ieee80211_tx_status is tight to mac80211 and
> > not to rate scale algorithm so if you create your own crazy rate scale
> > algorithm you cannot decide what parameters you need.
>
> Yeah, I agree, we need to improve this. "minstrel" really wants more
> retry rates too than just two.
>
> > 4965 is 11n card and rate scale algorithm is totally different.
> > One aspect is that rate scaling works  with much more parameters. MIMO
> > rates are rather 2 dimensional table, therefore the algorithm is
> > essentially different, but so far no interface change is needed.
> > Actually it covers also legacy rate scaling.
>
> Right. Maybe we can orthogonalize this into a rate control interface
> for .11n and one for "legacy"?
>
11n should cover also legacy rate scaling, and legacy mode in general.

> > The second aspect of HT is the aggregation. Bunch of packets at once
> > and they are also ACKed at once so regular TX status path of updating
> > rate scale algorithm is not so natural. Mostly because it is combined
> > with reclaiming the packet.
>
> This is something you need to work on in mac80211 anyway. I don't like
> how your driver does all the decisions about when to aggregate etc. This
> should be in the per-sta code in mac80211.
>
We have solved that it just as I said it is not rebased  against
latest wireless-dev so you don't see this code. I will probably
release some RFC patches first so nobody will accuse me of selling FUD
:)

> > Third part and this is 4965 specific is that  TX rate is not attached
> > to packet but rate table is updated when need on it's own path. This
> > is device specific.
>
> It seemed like the rate was attached to each station. This is a bit and
> I don't really know how to handle it.
???

> > Forth is that the aggregation. In general this involves some handshake
> > on protocol level i.e. MLME but efficiency of aggregation is kind of
> > rate scaling decision in addition  it might be enabled only for MIMO
> > rates (different plcp header)
>
> Right. I think you mentioned aggregation as number two already :)
>
Number 2 is the rate scaling update path this is rate scaling decision path

> > 1. rs_update_event(sta, struct rs_data *)  - function that brings rate
> > scaling statistics not connected to packet reclaim path
> >   struct rs_data is specific to rate scaling and opaque to mac80211
>
> What sort of statistics would it bring, and when?
>
In legacy TX it will be the same as current implementation, actual
rate, number of retries, etc
For aggregation it need rate and number of packets ACKed and NACked.
The whole aggregation is sent in one rate. Theoreticaly multi rate
aggregation might be sent, but no vendor creates such radios yet.

> > 2. rs_add_sta/rs_init(sta)  - create new instance of rate scaling for
> > added station including AP in STA mode
>
> That's what we have now afaict.
> Yes

> > 3. rs_compute(sta/sta_addr) - actual computation of rate scaling
> > algorithm possible also from RX path (tx reclaim)
>
> Where would it be called?

This can be run in reclaim path (RX) as now  but for 4965 I would
create period work

> > 4.  rs_get_rate - for regular TX path setting of rates
>
> Right.
>
> > 5. void (*rs_apply_rates)(sta_addr)  - driver supplied handler for
> > applying rate not through TX path.
>
> This needs more parameters, no?
Sure, the rates themselves. Currently I have in vision only 4965 rate
table. Need to find something more general probably.

Thanks for your comments
Tomas
>

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH V2] Add iwlwifi wireless drivers
  2007-09-06 14:31               ` Tomas Winkler
@ 2007-09-06 14:40                 ` Johannes Berg
  0 siblings, 0 replies; 20+ messages in thread
From: Johannes Berg @ 2007-09-06 14:40 UTC (permalink / raw)
  To: Tomas Winkler
  Cc: Ian Schram, linux-wireless, Zhu, Yi, John W. Linville,
	Felix Fietkau

[-- Attachment #1: Type: text/plain, Size: 2996 bytes --]

On Thu, 2007-09-06 at 17:31 +0300, Tomas Winkler wrote:

> 11n should cover also legacy rate scaling, and legacy mode in general.

Ok so we just extend the rate control to include .11n, fine with me too.
Have you thought about .11e stuff too? This seems related (aggregation
etc)

> We have solved that it just as I said it is not rebased  against
> latest wireless-dev so you don't see this code. I will probably
> release some RFC patches first so nobody will accuse me of selling FUD
> :)

Sounds good :)

> > > Third part and this is 4965 specific is that  TX rate is not attached
> > > to packet but rate table is updated when need on it's own path. This
> > > is device specific.
> >
> > It seemed like the rate was attached to each station. This is a bit and
> > I don't really know how to handle it.

> ???

Well some comments in the code say that the rate retry stuff is attached
to the notion of station the firmware has. If so, this will most likely
require some different interaction between rate control/firmware rather
than just the rate control passing you the rates with each frame.

> > > Forth is that the aggregation. In general this involves some handshake
> > > on protocol level i.e. MLME but efficiency of aggregation is kind of
> > > rate scaling decision in addition  it might be enabled only for MIMO
> > > rates (different plcp header)
> >
> > Right. I think you mentioned aggregation as number two already :)
> >
> Number 2 is the rate scaling update path this is rate scaling decision path

Oh, ok. I think you need to elaborate on the split into these paths
though, I don't think I've fully understood it yet.

> In legacy TX it will be the same as current implementation, actual
> rate, number of retries, etc
> For aggregation it need rate and number of packets ACKed and NACked.

Right.

> The whole aggregation is sent in one rate. Theoreticaly multi rate
> aggregation might be sent, but no vendor creates such radios yet.

We can add it when we need it then.

> > > 3. rs_compute(sta/sta_addr) - actual computation of rate scaling
> > > algorithm possible also from RX path (tx reclaim)
> >
> > Where would it be called?
> 
> This can be run in reclaim path (RX) as now  but for 4965 I would
> create period work

Basically we have three paths:
 (1) tx
 (2) rx
 (3) tx status (tx reclaim)

I suppose you're thinking of TX reclaim here? Which is sort of like
RX-ack but I think of it as related to TX. If we can handle the decision
about aggregation in higher layers shouldn't the periodic work also be
in mac80211?

> Sure, the rates themselves. Currently I have in vision only 4965 rate
> table. Need to find something more general probably.

Yeah I'm not aware what it does there. If you can describe what your
hardware does I can possibly compare a bit to Broadcom (partially
started to reverse engineer it) and then see if we can come up with
something more generic.

johannes

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2007-09-06 14:39 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-27  5:20 [PATCH V2] Add iwlwifi wireless drivers Zhu Yi
2007-08-27 13:10 ` Christoph Hellwig
2007-08-28  7:25   ` Zhu Yi
2007-08-28  8:50     ` Johannes Berg
2007-08-28  9:07       ` Zhu Yi
2007-08-28  9:28         ` Johannes Berg
2007-08-28 12:28       ` Christoph Hellwig
2007-08-28 13:37         ` Tomas Winkler
2007-08-31 20:55 ` John W. Linville
2007-08-31 22:03   ` Johannes Berg
2007-09-01 10:04     ` Johannes Berg
2007-09-04  2:25   ` Zhu Yi
2007-09-04 14:13     ` Johannes Berg
2007-09-06  1:32       ` Ian Schram
2007-09-06  2:20         ` Larry Finger
2007-09-06 12:00         ` Johannes Berg
2007-09-06 14:04           ` Tomas Winkler
2007-09-06 14:14             ` Johannes Berg
2007-09-06 14:31               ` Tomas Winkler
2007-09-06 14:40                 ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).