diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-23 12:25:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-03-23 12:25:58 -0400 |
commit | d56ffd38a93841a07c839a375049a56b51e9567c (patch) | |
tree | ac668709aa6f973de26e993f21adcf98626bed46 /drivers/net/wireless/ath9k/hw.c | |
parent | 12a37b5e2c93f6550b82490c3de6d4eedc509c39 (diff) | |
parent | 61fa9dcf9329cb92c220f7b656410fbe5e72f933 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (32 commits)
ucc_geth: Fix oops when using fixed-link support
dm9000: locking bugfix
net: update dnet.c for bus_id removal
dnet: DNET should depend on HAS_IOMEM
dca: add missing copyright/license headers
nl80211: Check that function pointer != NULL before using it
sungem: missing net_device_ops
be2net: fix to restore vlan ids into BE2 during a IF DOWN->UP cycle
be2net: replenish when posting to rx-queue is starved in out of mem conditions
bas_gigaset: correctly allocate USB interrupt transfer buffer
smsc911x: reset last known duplex and carrier on open
sh_eth: Fix mistake of the address of SH7763
sh_eth: Change handling of IRQ
netns: oops in ip[6]_frag_reasm incrementing stats
net: kfree(napi->skb) => kfree_skb
net: fix sctp breakage
ipv6: fix display of local and remote sit endpoints
net: Document /proc/sys/net/core/netdev_budget
tulip: fix crash on iface up with shirq debug
virtio_net: Make virtio_net support carrier detection
...
Diffstat (limited to 'drivers/net/wireless/ath9k/hw.c')
-rw-r--r-- | drivers/net/wireless/ath9k/hw.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath9k/hw.c b/drivers/net/wireless/ath9k/hw.c index 34474edefc97..c38a00bbce64 100644 --- a/drivers/net/wireless/ath9k/hw.c +++ b/drivers/net/wireless/ath9k/hw.c | |||
@@ -437,6 +437,25 @@ static void ath9k_hw_set_defaults(struct ath_hal *ah) | |||
437 | } | 437 | } |
438 | 438 | ||
439 | ah->ah_config.intr_mitigation = 1; | 439 | ah->ah_config.intr_mitigation = 1; |
440 | |||
441 | /* | ||
442 | * We need this for PCI devices only (Cardbus, PCI, miniPCI) | ||
443 | * _and_ if on non-uniprocessor systems (Multiprocessor/HT). | ||
444 | * This means we use it for all AR5416 devices, and the few | ||
445 | * minor PCI AR9280 devices out there. | ||
446 | * | ||
447 | * Serialization is required because these devices do not handle | ||
448 | * well the case of two concurrent reads/writes due to the latency | ||
449 | * involved. During one read/write another read/write can be issued | ||
450 | * on another CPU while the previous read/write may still be working | ||
451 | * on our hardware, if we hit this case the hardware poops in a loop. | ||
452 | * We prevent this by serializing reads and writes. | ||
453 | * | ||
454 | * This issue is not present on PCI-Express devices or pre-AR5416 | ||
455 | * devices (legacy, 802.11abg). | ||
456 | */ | ||
457 | if (num_possible_cpus() > 1) | ||
458 | ah->ah_config.serialize_regmode = SER_REG_MODE_AUTO; | ||
440 | } | 459 | } |
441 | 460 | ||
442 | static struct ath_hal_5416 *ath9k_hw_newstate(u16 devid, | 461 | static struct ath_hal_5416 *ath9k_hw_newstate(u16 devid, |
@@ -668,7 +687,8 @@ static struct ath_hal *ath9k_hw_do_attach(u16 devid, struct ath_softc *sc, | |||
668 | } | 687 | } |
669 | 688 | ||
670 | if (ah->ah_config.serialize_regmode == SER_REG_MODE_AUTO) { | 689 | if (ah->ah_config.serialize_regmode == SER_REG_MODE_AUTO) { |
671 | if (ah->ah_macVersion == AR_SREV_VERSION_5416_PCI) { | 690 | if (ah->ah_macVersion == AR_SREV_VERSION_5416_PCI || |
691 | (AR_SREV_9280(ah) && !ah->ah_isPciExpress)) { | ||
672 | ah->ah_config.serialize_regmode = | 692 | ah->ah_config.serialize_regmode = |
673 | SER_REG_MODE_ON; | 693 | SER_REG_MODE_ON; |
674 | } else { | 694 | } else { |