linux/drivers/net/wireless/iwlwifi
Emmanuel Grumbach eb9a372a73 iwlwifi: don't count the tfds in HW queue any more
Since packets sent to an RA / TID in AGG are sent from a
separate HW Tx queue, we may get into a race:
the regular queue isn't empty while we already begin to
send packets from the AGG queue. This would result in sending
packets out of order.

In order to cope with this, mac80211 waits until the driver
reports that the legacy queue is drained before it can send
packets to the AGG queue. During that time, mac80211 buffers
packets for the driver. These packets will be sent in order
after the driver reports it is ready.

The way this was implemented in the driver is as follows:
We held a counter that monitors the number of packets for
an RA / TID in the HW queues. When this counter reached 0,
we knew that the HW queues were drained and we reported to
mac80211 that were ready to proceed.

This patch changes the implementation described above. We
now remember what is the wifi sequence number of the first
packet that will be sent in the AGG queue (lets' call it
ssn). When we reclaim the packet before ssn, we know that
the queue is drained, and we are ready to proceed.

This will allow us to move this logic in the upper layer and
eventually remove the tid_data from the shared area.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
2011-12-16 07:22:33 -08:00
..
Kconfig iwlwifi: P2P is not enabled by default 2011-12-08 15:54:46 -08:00
Makefile iwlwifi: rename CONFIG_IWLWIFI_DEVICE_SVTOOL to CONFIG_IWLWIFI_DEVICE_TESTMODE 2011-12-08 15:54:30 -08:00
iwl-1000.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-2000.c iwlwifi: Add official names for new devices 2011-12-16 07:22:23 -08:00
iwl-5000.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-6000.c iwlwifi: Add official names for new devices 2011-12-16 07:22:23 -08:00
iwl-agn-calib.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn-calib.h iwlwifi: move calib_results list from iwl_priv to iwl_trans 2011-12-08 15:55:24 -08:00
iwl-agn-hw.h iwlagn: remove 6000 hw header 2011-10-14 14:48:13 -04:00
iwl-agn-lib.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn-rs.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn-rs.h iwlagn: use IWL_MAX_TID_COUNT instead of TID_MAX_LOAD_COUNT 2011-12-08 15:55:52 -08:00
iwl-agn-rx.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn-rxon.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn-sta.c iwlwifi: minor cleanup 2011-12-08 15:54:07 -08:00
iwl-agn-tt.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn-tt.h iwlagn: clean up of transport layer 2011-09-14 13:56:37 -04:00
iwl-agn-tx.c iwlwifi: don't count the tfds in HW queue any more 2011-12-16 07:22:33 -08:00
iwl-agn.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-agn.h iwlwifi: move eeprom pointer from iwl_priv to iwl_shared 2011-12-08 15:55:08 -08:00
iwl-bus.h iwlagn: remove drvdata support from bus layer 2011-09-19 16:10:10 -04:00
iwl-cfg.h iwlwifi: remove un-supported SKUs 2011-11-11 12:32:53 -05:00
iwl-commands.h iwlagn: fix TID use bug 2011-12-08 15:55:35 -08:00
iwl-core.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-core.h iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-csr.h iwlwifi: HW rev for 105 and 135 series 2011-11-08 15:53:54 -05:00
iwl-debug.h iwlagn: make debug levels more readable 2011-12-06 16:07:05 -05:00
iwl-debugfs.c iwlwifi: don't count the tfds in HW queue any more 2011-12-16 07:22:33 -08:00
iwl-dev.h iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-devtrace.c iwlagn: remove unnecessary type for tracing operations 2011-11-08 15:53:54 -05:00
iwl-devtrace.h iwlagn: remove unnecessary type for tracing operations 2011-11-08 15:53:54 -05:00
iwl-eeprom.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-eeprom.h iwlwifi: move eeprom pointer from iwl_priv to iwl_shared 2011-12-08 15:55:08 -08:00
iwl-fh.h
iwl-io.c iwlwifi: remove redundancy 2011-11-21 16:20:48 -05:00
iwl-io.h iwlagn: all function iwl-io.c receive iwl_bus 2011-08-29 15:30:29 -04:00
iwl-led.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-led.h iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-mac80211.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-pci.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux 2011-11-22 14:05:46 -05:00
iwl-power.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-power.h
iwl-prph.h
iwl-scan.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-shared.h iwlwifi: don't count the tfds in HW queue any more 2011-12-16 07:22:33 -08:00
iwl-testmode.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-testmode.h iwlwifi: add device ID information support by testmode 2011-12-08 15:54:40 -08:00
iwl-trans-pcie-int.h iwlwifi: improve the prints in the reclaim path 2011-11-21 16:20:47 -05:00
iwl-trans-pcie-rx.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00
iwl-trans-pcie-tx.c iwlwifi: don't count the tfds in HW queue any more 2011-12-16 07:22:33 -08:00
iwl-trans-pcie.c iwlwifi: don't count the tfds in HW queue any more 2011-12-16 07:22:33 -08:00
iwl-trans.c iwlagn: generically provide iwl_trans_send_cmd_pdu 2011-09-19 16:08:07 -04:00
iwl-trans.h iwlwifi: move calib_results list from iwl_priv to iwl_trans 2011-12-08 15:55:24 -08:00
iwl-ucode.c iwlwifi: move iwl_cfg from iwl_priv to iwl_shared 2011-12-16 07:22:16 -08:00