Alexander Duyck [Tue, 27 Oct 2009 23:48:51 +0000 (23:48 +0000)]
igb: make tx hang check multiqueue, check eop descriptor
This change makes the tx hang check run over all tx queues instead of just
queue 0. Also have hang display info on EOP descriptor instead of the
descriptor at the start of the chain.
Alexander Duyck [Tue, 27 Oct 2009 23:48:12 +0000 (23:48 +0000)]
igb: only process global stats in igb_update_stats
This patch moves the update of adapter->net_stats.rx/tx values out of the
interrupt routine and into igb_update_stats by just adding together the
tx/rx byte/packet counts for the rings.
Alexander Duyck [Tue, 27 Oct 2009 23:47:16 +0000 (23:47 +0000)]
igb: rework use of VMOLR in regards to PF and VFs
This patch updates the use of the VMOLR to include enabling multicast
promiscous for the VFs should they attempt to send over 30 multicast
addresses or if they use the new message type to enable multicast
promiscuous.
Alexander Duyck [Tue, 27 Oct 2009 23:46:01 +0000 (23:46 +0000)]
igb: cleanup some of the code related to hw timestamping
The code for the hw timestamping is a bit bulky and making some of the
functions difficult to read. In order to clean things up a bit I am moving
the timestamping operations into seperate functions.
Alexander Duyck [Tue, 27 Oct 2009 23:45:42 +0000 (23:45 +0000)]
igb: add support for seperate tx-usecs setting in ethtool
This patch adds support for a seperate tx-usecs interrupt moderation setting
in ethtool which is supported when tx and rx interrupt vectors are sperated.
Ben Hutchings [Wed, 28 Oct 2009 09:50:44 +0000 (02:50 -0700)]
sfc: Really allow RX checksum offload to be disabled
We have never checked the efx_nic::rx_checksum_enabled flag everywhere
we should, and since the switch to GRO we don't check it anywhere.
It's simplest to check it in the one place where we initialise the
per-packet checksummed flag.
Randy Dunlap [Mon, 26 Oct 2009 12:09:45 +0000 (12:09 +0000)]
netxen: fix builds for SYSFS=n or MODULES=n
When CONFIG_MODULES=n:
drivers/net/netxen/netxen_nic_main.c:2751: error: dereferencing pointer to incomplete type
drivers/net/netxen/netxen_nic_main.c:2764: error: dereferencing pointer to incomplete type
Also needs addition of <linux/sysfs.h> for sysfs function prototypes or
stubs when CONFIG_SYSFS=n.
Eric Dumazet [Tue, 27 Oct 2009 07:03:04 +0000 (07:03 +0000)]
net: Introduce unregister_netdevice_queue()
This patchs adds an unreg_list anchor to struct net_device, and
introduces an unregister_netdevice_queue() function, able to queue
a net_device to a list instead of immediately unregister it.
Alexander Duyck [Tue, 27 Oct 2009 15:55:22 +0000 (15:55 +0000)]
igb: add single vector msi-x testing to interrupt test
This change adds testing of the first msix vector to the interrupt testing.
This should help with determining the cause of interrupt issues when they are
encountered.
Alexander Duyck [Tue, 27 Oct 2009 15:55:02 +0000 (15:55 +0000)]
igb: make ethtool use core xmit map and free functionality
This change adds a clean_rx/tx_irq type function call to the ethtool loopback
testing which allows us to test the core transmit and receive functionality in
the driver.
Alexander Duyck [Tue, 27 Oct 2009 15:54:43 +0000 (15:54 +0000)]
igb: make tx ring map and free functionality non-static
This change makes a minor change to the xmit_frame_ring_adv funcition in that
it moves 2 checks from it into the xmit_frame_adv since the checks were not
ring specific. In addition it exports the xmit_frame_ring_adv and the
unmap_and_free_tx_resource calls so that they can be used by other code such
as the ethtool loopback testing calls.
Alexander Duyck [Tue, 27 Oct 2009 15:54:23 +0000 (15:54 +0000)]
igb: re-use ring configuration code in ethtool testing
Since all of the ring code is now specific to the ring instead of the adapter
struct it is possible to cut a large section of code out of the ethtool
testing configuraiton since we can just use the existing functions to
configure the rings.
Alexander Duyck [Tue, 27 Oct 2009 15:53:45 +0000 (15:53 +0000)]
igb: delay VF reset notification until after interrupts are enabed
This update delays the VF reset notification until after interrupts are
enabled. Otherwise there is a chance of having the VF try to reset itself too
soon and being ignored by the PF as a result.
Alexander Duyck [Tue, 27 Oct 2009 15:53:25 +0000 (15:53 +0000)]
igb: move the multiple receive queue configuration into seperate function
This patch moves the multiple receive queue configuration into a seperate
function from igb_configure_rx. We can essentially do the configuration for
the multiple receive queues just prior to enabling the RX and this will allow
us to seperate the queue enablement from the receive queue layout
configuration.
Alexander Duyck [Tue, 27 Oct 2009 15:53:06 +0000 (15:53 +0000)]
igb: place a pointer to the netdev struct in the ring itself
This change adds a pointer to the netdev to the ring itself. The idea being
at some point in the future it will be possible to support multiple netdevs
from a single adapter struct.
Alexander Duyck [Tue, 27 Oct 2009 15:52:46 +0000 (15:52 +0000)]
igb: add a flags value to the ring
This patch adds a flags value to the ring that cleans up some of the last
remaining items from the ring in order to help seperate it from the adapter
struct. By implementing these flags it becomes possible for different rings
to support different functions such as rx checksumming.
Alexander Duyck [Tue, 27 Oct 2009 15:52:27 +0000 (15:52 +0000)]
igb: move alloc_failed and csum_err stats into per rx-ring stat
The allocation failed and checksum error stats are currently kept as a
global stat. If we end up allocating the queues to multiple netdevs then
the global counter doesn't make much sense. For this reason I felt it
necessary to move the alloc_rx_buff_failed stat into the rx_stats
portion of the rx_ring.
Alexander Duyck [Tue, 27 Oct 2009 15:52:07 +0000 (15:52 +0000)]
igb: move rx_buffer_len into the ring structure
This patch moves the rx_buffer_len value into the ring structure. This allows
greater flexibility and the option of doing things such as supporting packet
split only on some queues, or enabling virtualization.
Alexander Duyck [Tue, 27 Oct 2009 15:51:27 +0000 (15:51 +0000)]
igb: change the head and tail offsets into pointers
Since we are writting to the head/tail pointers frequently we might as well
save ourselves some processing time by converting the head and tail offsets
directly to pointers. This will shave a few cycles off the rx/tx path and
allows us to move one step closer to the rings being a bit more independant of
each other.
Alexander Duyck [Tue, 27 Oct 2009 15:51:07 +0000 (15:51 +0000)]
igb: move SRRCTL register configuration into ring specific config
The SRRCTL register exists per ring. Instead of configuring all of them in
the RCTL configuration which is meant to be global it makes more sense to move
this out into the ring specific configuration.
Alexander Duyck [Tue, 27 Oct 2009 15:50:48 +0000 (15:50 +0000)]
igb: remove rx_ps_hdr_len
This patch removes the rx_ps_hdr_len which isn't really needed since we can
now use rx_buffer_len less than 1K to indicate that we are in a packet split
mode. We also don't need it since we always use a half page for the data
buffers when receiving so we always know the size to map/unmap.
Alexander Duyck [Tue, 27 Oct 2009 15:50:08 +0000 (15:50 +0000)]
igb: increase minimum rx buffer size to 1K
This update increases the minimum rx buffer size to 1K. The reason for this
change is to support SR-IOV and avoid any conflicts with the rings being able
to set their own MTU sizes.
Alexander Duyck [Tue, 27 Oct 2009 15:49:49 +0000 (15:49 +0000)]
igb: remove rx checksum good counter
Counting packets with a good checksum can cause a significant amount of cache
line bouncing due to the shared counter being written to by all of the queues.
In order to avoid this I am removing the counter since we still have the
checksum failed counter which will tell us if there are any issues.
Alexander Duyck [Tue, 27 Oct 2009 15:49:27 +0000 (15:49 +0000)]
igb: add new data structure for handling interrupts and NAPI
Add a new igb_q_vector data structure to handle interrupts and NAPI. This
helps to abstract the rings away from the adapter struct. In addition it
allows for a bit of consolidation since a tx and rx ring can share a
q_vector.
Ben Cahill [Fri, 23 Oct 2009 20:42:35 +0000 (13:42 -0700)]
iwlwifi: make sure device is reset when unloading driver
Add unconditional call to apm_ops.stop() to reset device to low power state
when unloading driver. Some paths have existed to unload driver *without*
resetting device, therefore some errors have persisted through multiple
load/unload cycles, until the whole platform gets rebooted; this is an
attempt to remedy some of those situations. Sorry, I can't seem to find
a bughost.org bug that specifically has these symptoms, but I had it happen
recently here.
Note that this will *not* fix situations in which the PCI express bus has
crashed (evidenced by register reads showing "0xffffffff"), e.g. bughost.org
1855 and 2096; device is unreachable from driver in those cases.
Wey-Yi Guy [Fri, 23 Oct 2009 20:42:34 +0000 (13:42 -0700)]
iwlwifi: update lowest API version support for 6x00 & 6x50 series
For 6x00 and 6x50 series devices, APIv4 is the lowest firmware version
driver can support. This is also the lowest API version available to the
public so there is no need for backward compatibility support for the
earlier API versions.
Zhu Yi [Fri, 23 Oct 2009 20:42:32 +0000 (13:42 -0700)]
iwlwifi: reuse page for notification packets
For notification packets and SKBs that fail to rx correctly, add
them back into the rx_free list so that the pages can be reused
later. This avoids allocating new rx pages unnecessarily.
Wey-Yi Guy [Fri, 23 Oct 2009 20:42:29 +0000 (13:42 -0700)]
iwlwifi: add channel switch support to 5000 series and up
Support "channel switch" request by issue "channel switch" host command
to uCode.
There is no separated "channel switch" indication from mac80211,
when detected "IEEE80211_CONF_CHANGE_CHANNEL" flag in iwl_mac_config(),
if the station is in "associated" state, then assume "channel switch
announcement" IE was received by mac80211.
Zhu Yi [Fri, 23 Oct 2009 20:42:25 +0000 (13:42 -0700)]
iwlwifi: fix use after free bug for paged rx
In the paged rx patch (4854fde2), I introduced a bug that could possibly
touch an already freed page. It is fixed by avoiding the access in this
patch. I've also added some comments so that other people touching the
code won't make the same mistake. In the future, if we cannot avoid
access the page after being handled to the upper layer, we can use
get_page/put_page to handle it. For now, it's just not necessary.
It also fixed a debug message print bug reported by Stanislaw Gruszka
<[email protected]>.
Wey-Yi Guy [Fri, 23 Oct 2009 20:42:22 +0000 (13:42 -0700)]
iwlwifi: separate led function from statistic notification
Detach led background task from statistic notification routine. if led
blinking is required; the blink rate is based on the traffic condition.
It do not relate to statistics notification. In addition to that, there is
not a requirement for statistics notification has to occur all the time.
Ben Cahill [Fri, 23 Oct 2009 20:42:21 +0000 (13:42 -0700)]
iwlwifi: consolidate apm_init() functions
Consolidate most iwlXXXX_apm_init() functions into single iwl_apm_init().
Keep iwl3945_apm_init(), but leverage iwl_apm_init() for most functionality.
Update 4965 init sequence to follow most recent factory recommendations.
Add following members to struct iwl_cfg to guide the init sequence:
pll_cfg_val (replaces needs_pll_cfg), set_l0s, use_bsm
Move L0S enable/disable from nic_config() functions to iwl_apm_init().
This satisifies the "FIXME: put here L1A -L0S w/a" notice, and complies
with factory-recommended sequence.
Add debug info message in iwl_apm_init(), and symmetrical message
in iwl_apm_stop().
Wey-Yi Guy [Fri, 23 Oct 2009 20:42:20 +0000 (13:42 -0700)]
iwlwifi: fix gain computation for 5000 series and up
In Rx gain balancing (chain noise) computation for 5000 series and up,
the delta gain calculation should use the average noise of default
chain, not "chain 0" which do not exist for all the devices.
Holger Schurig [Thu, 22 Oct 2009 13:30:45 +0000 (15:30 +0200)]
libertas: remove unused 11d code
Most of the 11d code was protected with an "if (priv->enable11d)" clause.
But there was no code that anywhere that was able to set this
variable to true. So all 11d code was dead for almost a year and no one
complained. That's enought incentive to remove this code.
Besides removing old cruft, we gain back the 11d capability in a common way
when we merge the cfg80211 functionality.
zd1211rw: Fix TX status reporting in order to have proper rate control
First, we reduce the number of hardware retries to 0 (ie 2 real retries
for each rate). Next, when we report the retries to mac80211, we always
report a retry count of 1 (it seems to be 2 in fact, but using 2 seems
to lead to wrong performance for some reason). We use a state machine to
determine the real fate of a packet based on the 802.11 ACK and what the
Zydas hardware is saying when a real retry occurs. The real retry rates
are encoded in a static array. It has been tested with both zd1211 and
zd1211b hardware. Of course, since the Zydas hardware is not reporting
retries accurately, we are just doing our best in order to get the best
performance (ie higher throughput).
Luciano Coelho [Wed, 21 Oct 2009 11:03:46 +0000 (14:03 +0300)]
wl1271: use ieee80211_rx_ni()
Use the new ieee80211_rx_ni() function instead of ieee80211_rx(). Since we
use a workqueue to handle the RX path, we need to call the new function,
which disables bottom half handling. This patch fixes the NOHZ:
local_softirq_pending messages.
Wey-Yi Guy [Fri, 16 Oct 2009 21:25:58 +0000 (14:25 -0700)]
iwlwifi: rework for static power save
For static power save, the actual intervals are calculated by driver based on
the default table and DTIM flag, then sent to uCode when the scheme
is changed.
Three tables are defined based on DTIM period.
1. DTIM 0 - 2
2. DTIM 3 - 10
3. DTIM > 11
The actual number of DTIM a station may miss may not exceed the
following:
. Only 1 DTIM may be skipped at PI=4 when allowed
. Only 2 DTIMs may be skipped at PI=5 when allowed
. DTIM may be skipped only 5 sec after last activity
. DTIM may be skipped only 30 sec after connection establishment
Only allow user to override the power_level when rf is ready to make sure
power level gets changed upon request.
Reinette Chatre [Fri, 16 Oct 2009 21:25:55 +0000 (14:25 -0700)]
iwlagn: store station rate scale information in mac80211 station structure
Currently mac80211 initializes the rate scaling before notifying the driver
of the station's existence. The driver dealt with this by not relying on
mac80211's station notifications and instead mixing this functionality with
the rate scaling code and other places. To clean this up the driver needs
to do rate scaling initialization after being notified of the station, this
can be done if the rate scaling information forms part of the station
information passed from mac80211 to driver.
Wey-Yi Guy [Fri, 16 Oct 2009 21:25:50 +0000 (14:25 -0700)]
iwlwifi: show current power save status reported by uCode
Power save request is sent from driver to uCode, but there is no
indication from uCode about the current device power save state.
Reading GP_CNTRL register bit 25:24 to show the current power save
status
00: no power save
01: MAC power down
10: PHY power down
11: Error
The uCode could switch in and out of power save mode in the order of
once per 100-300 ms in many cases. The reading here should just be used for
reference on the current uCode power save status. Do not confuse this
reading with the PowerSave set by driver and mac80211.