* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2008-01-08 22:23 John W. Linville
2008-01-08 22:42 ` One more patch... -- " John W. Linville
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2008-01-08 22:23 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
davem-fT/PcQaiUtIeIZ0/mPfg9Q
[-- Attachment #1: Type: text/plain, Size: 8503 bytes --]
Jeff,
Another round of patches intended for 2.6.25...the biggest factions are
rt2x00 and b43 updates, as well as some Viro-isms... :-)
Please let me know if there are any problems!
John
P.S. Copying Dave in case he is handling these requests...FWIW, it
will definitely depend on the patches already in netdev-2.6#upstream...
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 65d0aa09c183ee45dc1786675209313fa75cf4ec:
Jeff Garzik (1):
wireless/iwl: fix namespace breakage
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Al Viro (35):
eliminate byteswapping in struct ieee80211_qos_parameters
several missing cpu_to_le16() in ieee80211softmac_capabilities()
ieee80211softmac_auth_resp() fix
ieee80211: fix misannotations
ieee80211: beacon->capability is little-endian
airo: fix transmit_802_11_packet()
airo: fix endianness bug in ->dBm handling
airo: bug in airo_interrupt() handling on incoming 802.11
airo endianness bug: cap_rid.extSoftCap
airo: fix writerids() endianness
hostap: fix endianness with txdesc->sw_support
p54common annotations and fixes
ipw2100 annotations and fixes
ray_cs fixes
ipw2200 fix: struct ieee80211_radiotap_header is little-endian
ipw2200 fix: ->rt_chbitmask is le16
ipw2200: ipw_tx_skb() endianness bug
airo: trivial endianness annotations
airo: sanitize handling of SSID_rid
bap_read()/bap_write() work with fixed-endian buffers
airo: sanitize BSSListRid handling
airo: sanitize handling of WepKeyRid
airo: sanitize handling of StatsRid
airo: sanitize handling of CapabilityRid
airo: sanitize APListRid handling
airo: sanitize handling of StatusRid
airo: last of endianness annotations
hostap annotations
hostap: don't mess with mixed-endian even for internal skb queues
p54pci: endianness annotations and fixes
bcm43xx annotations
prism54 trivial annotations
ipw2200 trivial annotations
ipw2200: do not byteswap struct ipw_associate
misc wireless annotations
Daniel Walker (1):
prism54: remove questionable down_interruptible usage
Ivo van Doorn (12):
rt2x00: Fix chipset debugfs file
rt2x00: Always call ieee80211_stop_queue() when return NETDEV_TX_BUSY
rt2x00: Only set the TBCN flag when the interface is configured to send beacons.
rt2x00: Store queue idx and entry idx in data_ring and data_entry
rt2x00: Move start() and stop() handlers into rt2x00lib.c
rt2x00: Put 802.11 data on 4 byte boundary
rt2x00: Move packet filter flags
rt2x00: Cleanup write_tx_desc() arguments
rt2x00: Determine MY_BSS from descriptor
rt2x00: Move init_txring and init_rxring into rt2x00lib
rt2x00: Correctly initialize data and desc pointer
rt2x00: Release rt2x00 2.0.14
John W. Linville (1):
Revert "rtl8187: fix tx power reading"
Michael Buesch (14):
ssb: Fix extraction of values from SPROM
b43: Only select allowed TX and RX antennas
b43: Fix chip access validation for new devices
ssb: Fix PCMCIA lowlevel register access
b43: Remove PIO support
b43: Add definitions for MAC Control register
b43: Fix upload of beacon packets to the hardware
b43: Fix template upload locking.
b43: Put multicast frames on the mcast queue
b43: Fix tim search buffer overrun
b43-ssb-bridge: Add PCI ID for BCM43XG
b43: Add NPHY kconfig option
b43: Fix any N-PHY related WARN_ON() in the attach stage.
b43: Add N-PHY related initvals firmware filenames.
Miguel Botón (3):
ssb: add 'ssb_pcihost_set_power_state' function
b44: power down PHY when interface down
iwlwifi: fix compilation warning in 'iwl-4965.c'
Zhu Yi (1):
iwlwifi: fix typo in 'drivers/net/wireless/iwlwifi/Kconfig'
drivers/net/b44.c | 28 +-
drivers/net/wireless/adm8211.c | 8 +-
drivers/net/wireless/airo.c | 1233 ++++++++++++-------------
drivers/net/wireless/atmel.c | 30 +-
drivers/net/wireless/b43/Kconfig | 58 +-
drivers/net/wireless/b43/Makefile | 9 +-
drivers/net/wireless/b43/b43.h | 97 +--
drivers/net/wireless/b43/debugfs.c | 1 -
drivers/net/wireless/b43/dma.c | 101 ++-
drivers/net/wireless/b43/dma.h | 50 -
drivers/net/wireless/b43/main.c | 627 +++++++------
drivers/net/wireless/b43/main.h | 3 +
drivers/net/wireless/b43/xmit.c | 26 +-
drivers/net/wireless/b43legacy/main.c | 5 -
drivers/net/wireless/b43legacy/phy.c | 2 +-
drivers/net/wireless/bcm43xx/bcm43xx.h | 6 +-
drivers/net/wireless/bcm43xx/bcm43xx_main.c | 40 +-
drivers/net/wireless/bcm43xx/bcm43xx_pio.c | 6 +-
drivers/net/wireless/bcm43xx/bcm43xx_xmit.c | 6 +-
drivers/net/wireless/hostap/hostap_80211.h | 34 +-
drivers/net/wireless/hostap/hostap_80211_rx.c | 2 +-
drivers/net/wireless/hostap/hostap_ap.c | 72 +-
drivers/net/wireless/hostap/hostap_common.h | 34 +-
drivers/net/wireless/hostap/hostap_download.c | 22 +-
drivers/net/wireless/hostap/hostap_hw.c | 28 +-
drivers/net/wireless/hostap/hostap_info.c | 9 +-
drivers/net/wireless/hostap/hostap_ioctl.c | 66 +-
drivers/net/wireless/hostap/hostap_main.c | 6 +-
drivers/net/wireless/hostap/hostap_pci.c | 16 +-
drivers/net/wireless/hostap/hostap_wlan.h | 202 ++--
drivers/net/wireless/ipw2100.c | 10 +-
drivers/net/wireless/ipw2200.c | 175 ++--
drivers/net/wireless/ipw2200.h | 190 ++--
drivers/net/wireless/iwlwifi/Kconfig | 4 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 2 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 4 +-
drivers/net/wireless/iwlwifi/iwl4965-base.c | 4 +-
drivers/net/wireless/p54common.c | 8 +-
drivers/net/wireless/p54pci.c | 16 +-
drivers/net/wireless/p54pci.h | 4 +-
drivers/net/wireless/prism54/isl_38xx.h | 10 +-
drivers/net/wireless/prism54/isl_ioctl.c | 12 +-
drivers/net/wireless/prism54/islpci_eth.c | 2 +-
drivers/net/wireless/prism54/islpci_eth.h | 38 +-
drivers/net/wireless/prism54/islpci_mgt.h | 2 +-
drivers/net/wireless/ray_cs.c | 69 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 102 +--
drivers/net/wireless/rt2x00/rt2500pci.c | 88 +--
drivers/net/wireless/rt2x00/rt2500usb.c | 36 +-
drivers/net/wireless/rt2x00/rt2x00.h | 32 +-
drivers/net/wireless/rt2x00/rt2x00debug.c | 13 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 142 +++-
drivers/net/wireless/rt2x00/rt2x00lib.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00mac.c | 59 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 28 +-
drivers/net/wireless/rt2x00/rt2x00ring.h | 13 +
drivers/net/wireless/rt2x00/rt2x00usb.c | 87 +-
drivers/net/wireless/rt2x00/rt2x00usb.h | 5 +-
drivers/net/wireless/rt2x00/rt61pci.c | 114 +--
drivers/net/wireless/rt2x00/rt73usb.c | 35 +-
drivers/net/wireless/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/wavelan_cs.p.h | 2 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/pci.c | 76 ++-
drivers/ssb/pcmcia.c | 71 +-
include/linux/ssb/ssb.h | 29 +-
include/linux/ssb/ssb_regs.h | 38 +-
include/net/ieee80211.h | 6 +-
net/ieee80211/ieee80211_crypt_tkip.c | 22 +-
net/ieee80211/ieee80211_rx.c | 47 +-
net/ieee80211/ieee80211_tx.c | 14 +-
net/ieee80211/softmac/ieee80211softmac_auth.c | 6 +-
net/ieee80211/softmac/ieee80211softmac_io.c | 10 +-
73 files changed, 2209 insertions(+), 2256 deletions(-)
Omnibus patch attached as 'upstream-jgarzik.patch.bz2'.
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 66997 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread* One more patch... -- Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2008-01-08 22:23 Please pull 'upstream-jgarzik' branch of wireless-2.6 John W. Linville
@ 2008-01-08 22:42 ` John W. Linville
[not found] ` <20080108224202.GE3086-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2008-01-08 22:42 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless, davem
On Tue, Jan 08, 2008 at 05:23:05PM -0500, John W. Linville wrote:
> Jeff,
>
> Another round of patches intended for 2.6.25...the biggest factions are
> rt2x00 and b43 updates, as well as some Viro-isms... :-)
>
> Please let me know if there are any problems!
>
> John
>
> P.S. Copying Dave in case he is handling these requests...FWIW, it
> will definitely depend on the patches already in netdev-2.6#upstream...
I left out a patch. I have pushed it on top of the previous request.
Let me know if there are problems!
Thanks,
John
---
The following changes since commit f94de7b013f78ad8bbe1064c108dd55141efb177:
Miguel Botón (1):
iwlwifi: fix compilation warning in 'iwl-4965.c'
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Michael Buesch (1):
zd1211rw: fix alignment for QOS and WDS frames
drivers/net/wireless/zd1211rw/zd_mac.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 14fb727..7b86930 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -623,6 +623,8 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
const struct rx_status *status;
struct sk_buff *skb;
int bad_frame = 0;
+ u16 fc;
+ bool is_qos, is_4addr, need_padding;
if (length < ZD_PLCP_HEADER_SIZE + 10 /* IEEE80211_1ADDR_LEN */ +
FCS_LEN + sizeof(struct rx_status))
@@ -674,9 +676,22 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length)
&& !mac->pass_ctrl)
return 0;
- skb = dev_alloc_skb(length);
+ fc = le16_to_cpu(*((__le16 *) buffer));
+
+ is_qos = ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
+ ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_QOS_DATA);
+ is_4addr = (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) ==
+ (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS);
+ need_padding = is_qos ^ is_4addr;
+
+ skb = dev_alloc_skb(length + (need_padding ? 2 : 0));
if (skb == NULL)
return -ENOMEM;
+ if (need_padding) {
+ /* Make sure the the payload data is 4 byte aligned. */
+ skb_reserve(skb, 2);
+ }
+
memcpy(skb_put(skb, length), buffer, length);
ieee80211_rx_irqsafe(hw, skb, &stats);
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-20 15:54 John W. Linville
0 siblings, 0 replies; 25+ messages in thread
From: John W. Linville @ 2007-12-20 15:54 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
[-- Attachment #1: Type: text/plain, Size: 5125 bytes --]
Jeff,
More for 2.6.25...Mr. Woodhouse continues his savage assault on
libertas, the b43legacy version of the rfkill led patch is here
(b43legacy rfkill stuff is not in 2.6.24), and there are a couple of
iwlwifi patches as well.
Let me know if there are problems!
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit b503d38b01bf313e4f1250c4ded89fc10a1d3da0:
Ramkrishna Vepa (1):
S2io: Fixes to enable multiple transmit fifos
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
David Woodhouse (38):
libertas: don't exit worker thread until kthread_stop() is called
libertas: stop attempting to reset devices on unload
libertas: clean up if_usb driver
libertas: kill whitespace at end of lines
libertas: kill unused wait_option field in struct cmd_ctrl_node
libertas: rename and clean up DownloadcommandToStation
libertas: don't use __lbs_cmd() with empty callback in if_usb.c
libertas: remove some pointless checks for cmdnode buffer being present
libertas: introduce and use lbs_complete_command() for command completion
libertas: don't re-initialise cmdnode when taking it off the free queue
libertas: kill cleanup_cmdnode()
libertas: let __lbs_cmd() free its own cmdnode
libertas: kill pdata_buf member of struct cmd_ctrl_node
libertas: store command result in cmdnode instead of priv->cur_cmd_retcode
libertas: add __lbs_cmd_async() for asynchronous command submission
libertas: ensure response buffer size is always set for lbs_cmd_with_response
libertas: handle command timeout in main thread instead of directly in timer
libertas: kill 'addtail' argument to lbs_queue_cmd() and make it static
libertas: fix return from lbs_update_channel()
libertas: add SLEEP_PERIOD and FW_WAKE_METHOD command definitions
libertas: fix buffer handling of PS_MODE commands and responses
libertas: don't clear priv->dnld_sent after sending sleep confirm
libertas: handle HOST_AWAKE event by sending WAKEUP_CONFIRM command
libertas: allow for PS mode to be disabled when firmware doesn't support it
libertas: Check for PS mode support on USB devices
libertas: reduce explicit references to priv->cur_cmd->cmdbuf
libertas: use priv->upld_buf for command responses
libertas: discard DEFER responses to commands; let the timeout trigger
libertas: make lbs_submit_command always 'succeed' and set command timer
libertas: submit RSSI command on tx timeout, to check whether module is dead
libertas: convert RADIO_CONTROL to a direct command
libertas: convert INACTIVITY_TIMEOUT to a direct command
libertas: convert SLEEP_PARAMS to a direct command
libertas: convert SET_WEP to a direct command
libertas: convert ENABLE_RSN to a direct command
libertas: change inference about buffer size in lbs_cmd()
libertas: convert SUBSCRIBE_EVENT to a direct command
libertas: remove check for driver_lock in lbs_interrupt()
Larry Finger (1):
b43legacy: Fix rfkill radio LED
Zhu Yi (2):
iwlwifi: proper monitor support
iwlwifi: skip mac80211 conf during a hardware scan and replay it afterwards
drivers/net/wireless/b43legacy/leds.c | 4 +
drivers/net/wireless/b43legacy/main.c | 20 +-
drivers/net/wireless/b43legacy/rfkill.c | 133 ++++---
drivers/net/wireless/iwlwifi/iwl-3945.c | 120 +++++-
drivers/net/wireless/iwlwifi/iwl-3945.h | 38 +--
drivers/net/wireless/iwlwifi/iwl-4965.c | 120 ++++++-
drivers/net/wireless/iwlwifi/iwl-4965.h | 26 +--
drivers/net/wireless/iwlwifi/iwl3945-base.c | 139 +------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 122 +------
drivers/net/wireless/libertas/assoc.c | 61 ++--
drivers/net/wireless/libertas/cmd.c | 565 +++++++++++----------------
drivers/net/wireless/libertas/cmd.h | 29 ++-
drivers/net/wireless/libertas/cmdresp.c | 162 +++-----
drivers/net/wireless/libertas/debugfs.c | 350 ++++++++---------
drivers/net/wireless/libertas/decl.h | 9 +-
drivers/net/wireless/libertas/dev.h | 19 +-
drivers/net/wireless/libertas/host.h | 8 +
drivers/net/wireless/libertas/hostcmd.h | 47 ++-
drivers/net/wireless/libertas/if_cs.c | 10 +-
drivers/net/wireless/libertas/if_sdio.c | 10 +-
drivers/net/wireless/libertas/if_usb.c | 470 ++++++++++-------------
drivers/net/wireless/libertas/if_usb.h | 95 ++---
drivers/net/wireless/libertas/main.c | 92 +++--
drivers/net/wireless/libertas/tx.c | 4 +-
drivers/net/wireless/libertas/wext.c | 7 +
25 files changed, 1200 insertions(+), 1460 deletions(-)
Omnibus patch attached is 'upstream-jgarzik.patch.bz2' due to size concerns.
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 30113 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-16 4:34 John W. Linville
2007-12-17 23:24 ` Jeff Garzik
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-12-16 4:34 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
[-- Attachment #1: Type: text/plain, Size: 9005 bytes --]
Jeff,
Some more patches intended for 2.6.25... There are a bunch of libertas
patches in there, as well as some iwlwifi cleanups from the last merge
and a couple of b43 fixes resulting from a regression in an earlier
patch already queued in netdev-2.6#upstream.
Let me know if there are any problems!
Thanks,
John
---
Individual patches available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 9c8e86195d75a1f4875e9ced083a015a99cec94e:
John W. Linville (1):
rt2x00: correct "skb_buff" typo
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik ..BRANCH.NOT.VERIFIED..
Dan Williams (11):
orinoco: always use latest BSS info when caching scan results
libertas: make lbs_cmd() usage nicer
libertas: clean up is_command_allowed_in_ps()
libertas: clean up direct command handling
libertas: add simple copyback command callback
libertas: convert GET_HW_SPEC to a direct command
libertas: rename and re-type bufvirtualaddr to cmdbuf
libertas: fix case of FWT_ACCESS_LIST_ROUTE and FWT_ACCESS_LIST_NEIGHBOR commands
libertas: convert DATA_RATE to a direct command
libertas: convert RF_CHANNEL to a direct command
libertas: endianness fixes for get_channel/set_channel
David Woodhouse (76):
libertas: Fix memory leak of RX skbs
libertas: Remove cmd_oid from struct cmd_ctrl_node
libertas: Consolidate lbs_host_to_card_done() function.
libertas: Don't claim to have checksummed incoming packets.
libertas: Move SET_BOOT2_VER command to if_usb where it belongs
libertas: Zero 'pdata_size' field in cmd_ctrl_node reliably.
libertas: Byteswap cmdptr->size in lbs_cmd()
libertas: Use lbs_cmd() for setting Boot2 version
libertas: Remove SET_BOOT2_VER support from the Big Switch Statement.
libertas: Fix endianness in boot2_version handling.
libertas: when usb_submit_usb fails, include the error code in the printk
libertas: Switch to using a callback function pointer for commands
libertas: Don't set IW_ENCODE_NOKEY when returning WEP keys.
libertas: Fix up error handling in lbs_setuserscan()
libertas: kill adapter->nr_cmd_pending
libertas: switch lbs_cmd() to take a callback function pointer
libertas: clean up lbs_thread() to make it slightly more readable
libertas: fix lbs_rtap attribute in sysfs
libertas: kill TxLockFlag
libertas: kill struct lbs_adapter
libertas: use lbs_host_to_card_done() in lbs_tx_timeout()
libertas: cope with device which already has firmware loaded
libertas: stop debugfs code looking at cmdpendingq
libertas: kill internal tx queue for PS mode
libertas: kill SendSinglePacket() function.
libertas: move lbs_hard_start_xmit() into tx.c
libertas: kill lbs_process_tx() by merging it into lbs_hard_start_xmit()
libertas: clean up lbs_hard_start_xmit()
libertas: kill lbs_pre_start_xmit(), lib_mesh_pre_start_xmit()
libertas: stop using ieee80211 for radiotap device
libertas: set dev_addr on rtap device
libertas: TX packet is radiotap iff it comes from rtap_dev
libertas: free successfully transmitted skbs again
libertas: refactor the 'should I sleep?' decision in lbs_thread()
libertas: Move actual transmission to main thread
libertas: remove unreachable code from process_rxed_802_11_packet()
libertas: fix error cases in lbs_process_rxed_802_11_packet()
libertas: kill lbs_upload_tx_packet()
libertas: kill (IS,SET,UNSET)_MESH_FRAME.
libertas: add opaque extra argument to cmd callback function
libertas: clean up lbs_interrupt()
libertas: remove pre_open_check()
libertas: make rtap and normal modes mutually exclusive, clean up open/stop
libertas: improve reliability of firmware reloading on USB
libertas: switch to a waitqueue and timer for handling USB firmware load
libertas: don't run thread while firmware not yet ready
libertas: switch USB cardp->priv to 'struct lbs_private *' and resulting fix
libertas: move removal of lbs_rtap file to lbs_stop_card()
libertas: wait for 'firmware ready' event from firmware after loading
libertas: fix debug output in lbs_cmd_copyback() function.
libertas: convert CMD_MESH_ACCESS to a direct command
libertas: remove casts from lbs_cmd() and lbs_cmd_with_response() macros
libertas: make some more functions static
libertas: fix sparse endianness warnings in scan.c
libertas: add lbs_mesh sysfs attribute for enabling mesh
libertas: kill references to mesh autostart
libertas: kill rx_urb_recall and eth_dev members of struct usb_card_rec
libertas: whitespace cleanup in host.h
libertas: allow get/set SSID on mshX device
libertas: allow setting channel on mshX device
libertas: add missing newline on debug message
libertas: disable mesh temporarily while setting eth channel/assoc
libertas: add debugging output to lbs_mesh_config()
libertas: be more careful about command responses matching cur_cmd
libertas: add missing newlines in debugging statements
libertas: slight cleanup of netif queue stop/wake
libertas: add lbs_host_sleep_cfg() command function
libertas: switch lbs_cmd() to take a _pointer_ to the command structure
libertas: make worker thread not freezable
libertas: implement suspend and resume core methods
libertas: implement suspend/resume for USB devices
libertas: add ethtool support for wake-on-lan configuration
libertas: make lbs_update_channel() function non-static
libertas: cope with both old and new mesh TLV values
libertas: pass channel argument directly to lbs_mesh_config()
libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt()
Holger Schurig (8):
libertas: remove cmd_ctrl_node->cmdflags
libertas: remove cmd_ctrl_node->status
libertas: make more functions static
libertas: handy function to call firmware commands
libertas: fix data packet size errors
libertas: implement new scanning logic
libertas: endianness fixes
libertas: fix use-after-free error
Li Zefan (1):
libertas: don't cast a pointer to pointer of
Michael Buesch (2):
b43: Fix ofdmtab write regression
b43: Fix for broken transmission
Reinette Chatre (1):
iwlwifi: remove HT code from iwl-3945.h
Tomas Winkler (2):
iwlwifi: fix compliation warnings
iwlwifi: add missing comments
drivers/net/wireless/b43/b43.h | 14 +-
drivers/net/wireless/b43/main.c | 12 +-
drivers/net/wireless/b43/phy.h | 6 +-
drivers/net/wireless/b43/tables.c | 35 +-
drivers/net/wireless/b43/wa.c | 30 +-
drivers/net/wireless/iwlwifi/iwl-3945.h | 24 -
drivers/net/wireless/iwlwifi/iwl-4965.h | 2 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2 +-
drivers/net/wireless/iwlwifi/iwl4965-base.c | 6 +-
drivers/net/wireless/libertas/11d.c | 70 +-
drivers/net/wireless/libertas/assoc.c | 194 +++---
drivers/net/wireless/libertas/assoc.h | 2 +-
drivers/net/wireless/libertas/cmd.c | 899 +++++++++++++++---------
drivers/net/wireless/libertas/cmd.h | 40 +
drivers/net/wireless/libertas/cmdresp.c | 488 +++++--------
drivers/net/wireless/libertas/debugfs.c | 93 ++--
drivers/net/wireless/libertas/decl.h | 27 +-
drivers/net/wireless/libertas/defs.h | 15 +-
drivers/net/wireless/libertas/dev.h | 122 ++--
drivers/net/wireless/libertas/ethtool.c | 66 ++-
drivers/net/wireless/libertas/host.h | 386 +++++------
drivers/net/wireless/libertas/hostcmd.h | 74 ++-
drivers/net/wireless/libertas/if_cs.c | 43 +-
drivers/net/wireless/libertas/if_sdio.c | 37 +-
drivers/net/wireless/libertas/if_usb.c | 232 +++---
drivers/net/wireless/libertas/if_usb.h | 14 +-
drivers/net/wireless/libertas/join.c | 157 ++---
drivers/net/wireless/libertas/main.c | 995 ++++++++++++--------------
drivers/net/wireless/libertas/rx.c | 187 ++---
drivers/net/wireless/libertas/scan.c | 1048 ++++++++++++---------------
drivers/net/wireless/libertas/scan.h | 6 +-
drivers/net/wireless/libertas/tx.c | 240 +++----
drivers/net/wireless/libertas/wext.c | 496 +++++++------
drivers/net/wireless/orinoco.c | 11 +-
34 files changed, 3002 insertions(+), 3071 deletions(-)
create mode 100644 drivers/net/wireless/libertas/cmd.h
Omnibus patch attached as 'upstream-jgarzik.patch.bz2' due to size
constraints.
--
John W. Linville
linville@tuxdriver.com
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 65020 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-12-16 4:34 John W. Linville
@ 2007-12-17 23:24 ` Jeff Garzik
[not found] ` <47670514.4030204-o2qLIJkoznsdnm+yROfE0A@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: Jeff Garzik @ 2007-12-17 23:24 UTC (permalink / raw)
To: John W. Linville; +Cc: netdev, linux-wireless
John W. Linville wrote:
> Jeff,
>
> Some more patches intended for 2.6.25... There are a bunch of libertas
> patches in there, as well as some iwlwifi cleanups from the last merge
> and a couple of b43 fixes resulting from a regression in an earlier
> patch already queued in netdev-2.6#upstream.
>
> Let me know if there are any problems!
>
> Thanks,
>
> John
>
> ---
>
> Individual patches available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
>
> ---
>
> The following changes since commit 9c8e86195d75a1f4875e9ced083a015a99cec94e:
> John W. Linville (1):
> rt2x00: correct "skb_buff" typo
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik ..BRANCH.NOT.VERIFIED..
>
> Dan Williams (11):
> orinoco: always use latest BSS info when caching scan results
> libertas: make lbs_cmd() usage nicer
> libertas: clean up is_command_allowed_in_ps()
> libertas: clean up direct command handling
> libertas: add simple copyback command callback
> libertas: convert GET_HW_SPEC to a direct command
> libertas: rename and re-type bufvirtualaddr to cmdbuf
> libertas: fix case of FWT_ACCESS_LIST_ROUTE and FWT_ACCESS_LIST_NEIGHBOR commands
> libertas: convert DATA_RATE to a direct command
> libertas: convert RF_CHANNEL to a direct command
> libertas: endianness fixes for get_channel/set_channel
>
> David Woodhouse (76):
> libertas: Fix memory leak of RX skbs
> libertas: Remove cmd_oid from struct cmd_ctrl_node
> libertas: Consolidate lbs_host_to_card_done() function.
> libertas: Don't claim to have checksummed incoming packets.
> libertas: Move SET_BOOT2_VER command to if_usb where it belongs
> libertas: Zero 'pdata_size' field in cmd_ctrl_node reliably.
> libertas: Byteswap cmdptr->size in lbs_cmd()
> libertas: Use lbs_cmd() for setting Boot2 version
> libertas: Remove SET_BOOT2_VER support from the Big Switch Statement.
> libertas: Fix endianness in boot2_version handling.
> libertas: when usb_submit_usb fails, include the error code in the printk
> libertas: Switch to using a callback function pointer for commands
> libertas: Don't set IW_ENCODE_NOKEY when returning WEP keys.
> libertas: Fix up error handling in lbs_setuserscan()
> libertas: kill adapter->nr_cmd_pending
> libertas: switch lbs_cmd() to take a callback function pointer
> libertas: clean up lbs_thread() to make it slightly more readable
> libertas: fix lbs_rtap attribute in sysfs
> libertas: kill TxLockFlag
> libertas: kill struct lbs_adapter
> libertas: use lbs_host_to_card_done() in lbs_tx_timeout()
> libertas: cope with device which already has firmware loaded
> libertas: stop debugfs code looking at cmdpendingq
> libertas: kill internal tx queue for PS mode
> libertas: kill SendSinglePacket() function.
> libertas: move lbs_hard_start_xmit() into tx.c
> libertas: kill lbs_process_tx() by merging it into lbs_hard_start_xmit()
> libertas: clean up lbs_hard_start_xmit()
> libertas: kill lbs_pre_start_xmit(), lib_mesh_pre_start_xmit()
> libertas: stop using ieee80211 for radiotap device
> libertas: set dev_addr on rtap device
> libertas: TX packet is radiotap iff it comes from rtap_dev
> libertas: free successfully transmitted skbs again
> libertas: refactor the 'should I sleep?' decision in lbs_thread()
> libertas: Move actual transmission to main thread
> libertas: remove unreachable code from process_rxed_802_11_packet()
> libertas: fix error cases in lbs_process_rxed_802_11_packet()
> libertas: kill lbs_upload_tx_packet()
> libertas: kill (IS,SET,UNSET)_MESH_FRAME.
> libertas: add opaque extra argument to cmd callback function
> libertas: clean up lbs_interrupt()
> libertas: remove pre_open_check()
> libertas: make rtap and normal modes mutually exclusive, clean up open/stop
> libertas: improve reliability of firmware reloading on USB
> libertas: switch to a waitqueue and timer for handling USB firmware load
> libertas: don't run thread while firmware not yet ready
> libertas: switch USB cardp->priv to 'struct lbs_private *' and resulting fix
> libertas: move removal of lbs_rtap file to lbs_stop_card()
> libertas: wait for 'firmware ready' event from firmware after loading
> libertas: fix debug output in lbs_cmd_copyback() function.
> libertas: convert CMD_MESH_ACCESS to a direct command
> libertas: remove casts from lbs_cmd() and lbs_cmd_with_response() macros
> libertas: make some more functions static
> libertas: fix sparse endianness warnings in scan.c
> libertas: add lbs_mesh sysfs attribute for enabling mesh
> libertas: kill references to mesh autostart
> libertas: kill rx_urb_recall and eth_dev members of struct usb_card_rec
> libertas: whitespace cleanup in host.h
> libertas: allow get/set SSID on mshX device
> libertas: allow setting channel on mshX device
> libertas: add missing newline on debug message
> libertas: disable mesh temporarily while setting eth channel/assoc
> libertas: add debugging output to lbs_mesh_config()
> libertas: be more careful about command responses matching cur_cmd
> libertas: add missing newlines in debugging statements
> libertas: slight cleanup of netif queue stop/wake
> libertas: add lbs_host_sleep_cfg() command function
> libertas: switch lbs_cmd() to take a _pointer_ to the command structure
> libertas: make worker thread not freezable
> libertas: implement suspend and resume core methods
> libertas: implement suspend/resume for USB devices
> libertas: add ethtool support for wake-on-lan configuration
> libertas: make lbs_update_channel() function non-static
> libertas: cope with both old and new mesh TLV values
> libertas: pass channel argument directly to lbs_mesh_config()
> libertas: use spin_is_locked() instead of spin_trylock() in lbs_interrupt()
>
> Holger Schurig (8):
> libertas: remove cmd_ctrl_node->cmdflags
> libertas: remove cmd_ctrl_node->status
> libertas: make more functions static
> libertas: handy function to call firmware commands
> libertas: fix data packet size errors
> libertas: implement new scanning logic
> libertas: endianness fixes
> libertas: fix use-after-free error
>
> Li Zefan (1):
> libertas: don't cast a pointer to pointer of
>
> Michael Buesch (2):
> b43: Fix ofdmtab write regression
> b43: Fix for broken transmission
>
> Reinette Chatre (1):
> iwlwifi: remove HT code from iwl-3945.h
>
> Tomas Winkler (2):
> iwlwifi: fix compliation warnings
> iwlwifi: add missing comments
Pulled.
PLEASE verify iwlwifi and zd1121rw drivers, as soon as netdev-2.6.git
mirrors out, because I had to do some hand-merging when bringing the .24
fixes into #upstream.
Jeff
^ permalink raw reply [flat|nested] 25+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-12-04 13:59 John W. Linville
2007-12-04 20:13 ` Jeff Garzik
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-12-04 13:59 UTC (permalink / raw)
To: jeff; +Cc: davem, netdev, linux-wireless
Jeff,
Here are more than 5 score patches intended for 2.6.25. This request
replaces the request sent on 27 November. [1]
There are tons of updates here, especially iwlwifi and libertas. The
b43, b43legacy, rt2x00, rtl8187, and zd1211rw drivers are also updated.
This pull contains the port of zd1211rw to the mac80211 infrastructure.
There is also some SSB stuff in there. I've been sending that stuff
to Dave M., but since later b43 patches depend on it I thought it
would be better to send them your way. I'll CC Dave.
Also included is the iwl4965 work to use the .11n stuff that has been
added in the net-2.6.25 tree. For now I've added a "depends on n" to
the IWL4965_HT Kconfig to avoid build breakage in your tree.
The total diff is getting big -- the patch is nearing 2MB. Please let
me know if there are any problems so we can get (at least some of)
this merged!
Thanks,
John
[1] http://marc.info/?l=linux-netdev&m=119617493212177&w=2
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit e86d91426d8b3d79010c9d5c617d7594e5c165aa:
Jeff Garzik (1):
Merge branch 'r6040' of git://git.kernel.org/.../romieu/netdev-2.6 into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Andrea Merello (1):
rtl8187: fix tx power reading
Andres Salomon (4):
libertas: drop useless default_fw_name variable
libertas: mark module_init/exit functions as __init/__exit
libertas: reset devices upon disconnect rather than module unloading
libertas: nuke useless variable usbdriver_name and useless comments
Ben M Cahill (29):
iwl3945: re-align 3945 event log data
iwl4965: add comments to rate scaling code
iwlwifi: add comments to EEPROM stuff
iwl-4965-hw.h: clean up unused eeprom structures and definitions
iwlwifi: clean up and clarify some comments after 3945/4965 split
iwlwifi: Move is_legacy() macro family from iwl-4965-hw.h to iwl-4965-rs.h
iwlwifi: Add comments to some driver data structures
iwlwifi: Document 4965 rate_n_flags bits
iwlwifi: Document Rx calibration
iwlwifi: Partially clean-up, add comments to iwl-*-hw.h
iwlwifi: clean up some unused definitions in iwl-4965.h and iwl-3945.h
iwlwifi: add comments, mostly on Tx queues
iwlwifi: add comments to iwl*-base.c
iwlwifi: Clean up unused definitions in iwl-3945-hw.h
iwlwifi: clean up unused definitions in iwl-4965-hw.h
iwlwifi: move uCode API definitions to iwl-4965-commands.h
iwlwifi: move HT_IE_EXT_CHANNEL_* driver definitions to iwl-4965.h
iwlwifi: document temperature calculation
iwlwifi: document txpower calculations
iwlwifi: document keep-warm buffer
iwlwifi: document Rx registers
iwlwifi: document Tx registers
iwlwifi: document shared Tx structures
iwlwifi: document 4965 Tx scheduler
iwlwifi: document command header and "alive" responses
iwlwifi: add comments to RXON command and txpower formats
iwlwifi: add comments to QOS and ADD_STA commands
iwlwifi: add comments to Tx commands
iwlwifi: document 4965 rate scaling
Brajesh Dave (2):
libertas: separate mesh connectivity from that of the main interface
libertas: configurable beacon interval
Christoph Hellwig (1):
iwlwifi: cleanup namespace
Daniel Drake (3):
zd1211rw: port to mac80211
zd1211rw: Add ID for Trendnet TEW-429UB A
zd1211rw: add copyright notices
Frank Lichtenheld (2):
b43: silence a bogus gcc warning
b43legacy: properly fix a bogus gcc warning
Holger Schurig (9):
libertas: move to uniform lbs_/LBS_ namespace
libertas: clean up association debug messages
libertas: remove arbitrary typedefs
libertas: rework event subscription
libertas: tweak association debug output
libertas: tweak tx path debugging
libertas: remove numprobes
libertas: remove user-specified channel list
libertas: less eventcause shifts
Ivo van Doorn (10):
rt2x00: Move duplicate code into rt2x00pci_txdone()
rt2x00: Replace DRV_NAME with KBUILD_MODNAME
rt2x00: Extend PLCP descriptor definition for rt2400pci
rt2x00: Move register value/offset files into new folder
rt2x00: Add chipset version to chipset debugfs entry
rt2x00: Add skb descriptor
rt2x00: Add TX/RX frame dumping facility
rt2x00: Use IEEE80211_IF_TYPE_INVALID directly
rt2x00: Cleanup rfkill
rt2x00: Release rt2x00 2.0.13
Johannes Berg (3):
b43: include full 64-bit timestamp in monitor mode
b43: include FCS in frames handed to mac80211
b43legacy: include full 64-bit timestamp in monitor mode
John W. Linville (1):
iwlwifi: remove redundant initialization of final_mode
Larry Finger (8):
ssb: Add new SPROM structure while keeping the old
ssb: Convert to use of the new SPROM structure
b44: Convert to use of the new SPROM structure
b43: Convert to use of the new SPROM structure
b43legacy: Convert to use of the new SPROM structure
ssb: Remove the old, now unused, data structures
b43: Changes to enable BCM4311 rev 02 with wireless core revision 13
rt2x00: Remove redundant code in rfkill setup
Matthias Mueller (1):
rtl8187: Add USB ID for Sitecom WL-168 v1 001
Mattias Nissler (2):
rt2x00: Allow rt61 to catch up after a missing tx report
rt2x00: Only update rssi average approximation on receiving beacon frames.
Miguel Botón (1):
iwlwifi: remove redundant declaration of 'iwl3945_priv' and 'iwl4965_priv' structs
Mohamed Abbas (4):
iwl4965: fix cannot find a suitable rate issue
iwlwifi: enhance WPA authenication stability
iwlwifi: fix ucode assertion for RX queue overrun
iwlwifi: avoid firmware command sending if rfkill is enabled
Reinette Chatre (2):
MAINTAINERS: Add Reinette Chatre to iwlwifi & ipw2100/ipw2200
iwlwifi: continue namespace changes - fix CONFIG variables
Ron Rindjunsky (8):
iwlwifi: 802.11n remove unnecessary config dependency
iwlwifi: 802.11n new framework structures preperation
iwlwifi: 802.11n configuring hw_mode parameters to support HT in A/G
iwlwifi: 802.11n handling probe request HT IE
iwlwifi: 802.11n comply HT self configuration flow with mac80211 framework
iwlwifi: 802.11n comply HT add station flow with mac80211 framework
iwlwifi: 802.11n comply HT rate scaling flows with mac80211 framework
iwlwifi: 802.11n add support to 8K A-MSDU Rx frames
Stefano Brivio (8):
b43legacy: use the retry limits provided by mac80211
b43legacy: use a consistent naming scheme for the ops
b43legacy: rewrite and fix rfkill initialization
b43: rewrite A PHY initialization
b43/b43legacy: fix my copyright notices
b43legacy: fix kconfig dependecies for rfkill and leds
b43: reinit on too many PHY TX errors
b43legacy: reinit on too many PHY TX errors
Tomas Winkler (1):
iwlwifi: Support for uCode without init and bsm section
Ulrich Kunitz (1):
zd1211rw: Fix alignment problems
Zhu Yi (5):
iwlwifi: replace 0x8086 with PCI_VENDOR_ID_INTEL
remove unused iwl4965_init_hw_rates function
iwl4965: fix rxon flags set to wrong value for A mode in .erp_ie_changed
iwlwifi: update version number to 1.2.22
iwlwifi: cache mac80211 conf setting during a hardware scan
MAINTAINERS | 10 +-
drivers/net/b44.c | 8 +-
drivers/net/wireless/b43/Makefile | 1 +
drivers/net/wireless/b43/b43.h | 11 +
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/dma.c | 32 +-
drivers/net/wireless/b43/leds.c | 10 +-
drivers/net/wireless/b43/lo.c | 8 +-
drivers/net/wireless/b43/main.c | 62 +-
drivers/net/wireless/b43/main.h | 2 +-
drivers/net/wireless/b43/phy.c | 672 +----
drivers/net/wireless/b43/phy.h | 18 +-
drivers/net/wireless/b43/tables.c | 103 +-
drivers/net/wireless/b43/tables.h | 12 +-
drivers/net/wireless/b43/wa.c | 666 +++++
drivers/net/wireless/b43/wa.h | 7 +
drivers/net/wireless/b43/xmit.c | 23 +-
drivers/net/wireless/b43legacy/Kconfig | 8 +-
drivers/net/wireless/b43legacy/b43legacy.h | 7 +
drivers/net/wireless/b43legacy/debugfs.c | 2 +-
drivers/net/wireless/b43legacy/ilt.c | 2 +-
drivers/net/wireless/b43legacy/leds.c | 10 +-
drivers/net/wireless/b43legacy/main.c | 172 +-
drivers/net/wireless/b43legacy/main.h | 2 +-
drivers/net/wireless/b43legacy/phy.c | 40 +-
drivers/net/wireless/b43legacy/phy.h | 2 +-
drivers/net/wireless/b43legacy/radio.c | 14 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 16 +-
drivers/net/wireless/b43legacy/rfkill.h | 8 +-
drivers/net/wireless/b43legacy/xmit.c | 25 +-
drivers/net/wireless/iwlwifi/Kconfig | 31 +-
drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 586 +++--
drivers/net/wireless/iwlwifi/iwl-3945-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 353 ++--
drivers/net/wireless/iwlwifi/iwl-3945-io.h | 256 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 146 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 37 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 553 ++--
drivers/net/wireless/iwlwifi/iwl-3945.h | 445 ++--
drivers/net/wireless/iwlwifi/iwl-4965-commands.h | 1394 ++++++++--
drivers/net/wireless/iwlwifi/iwl-4965-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 2139 ++++++++++-----
drivers/net/wireless/iwlwifi/iwl-4965-io.h | 256 +-
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 869 +++++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 87 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 1136 +++++---
drivers/net/wireless/iwlwifi/iwl-4965.h | 641 +++---
drivers/net/wireless/iwlwifi/iwl-prph.h | 14 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2776 ++++++++++---------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 3241 +++++++++++-----------
drivers/net/wireless/libertas/11d.c | 72 +-
drivers/net/wireless/libertas/11d.h | 26 +-
drivers/net/wireless/libertas/README | 40 +-
drivers/net/wireless/libertas/assoc.c | 265 +-
drivers/net/wireless/libertas/assoc.h | 14 +-
drivers/net/wireless/libertas/cmd.c | 354 ++-
drivers/net/wireless/libertas/cmdresp.c | 238 +-
drivers/net/wireless/libertas/debugfs.c | 1375 ++-------
drivers/net/wireless/libertas/debugfs.h | 12 +-
drivers/net/wireless/libertas/decl.h | 116 +-
drivers/net/wireless/libertas/defs.h | 52 +-
drivers/net/wireless/libertas/dev.h | 45 +-
drivers/net/wireless/libertas/ethtool.c | 52 +-
drivers/net/wireless/libertas/host.h | 70 +-
drivers/net/wireless/libertas/hostcmd.h | 26 +-
drivers/net/wireless/libertas/if_cs.c | 45 +-
drivers/net/wireless/libertas/if_sdio.c | 51 +-
drivers/net/wireless/libertas/if_sdio.h | 4 +-
drivers/net/wireless/libertas/if_usb.c | 132 +-
drivers/net/wireless/libertas/if_usb.h | 7 +-
drivers/net/wireless/libertas/join.c | 202 +-
drivers/net/wireless/libertas/join.h | 38 +-
drivers/net/wireless/libertas/main.c | 563 ++--
drivers/net/wireless/libertas/rx.c | 68 +-
drivers/net/wireless/libertas/scan.c | 274 +--
drivers/net/wireless/libertas/scan.h | 96 +-
drivers/net/wireless/libertas/tx.c | 45 +-
drivers/net/wireless/libertas/types.h | 25 +-
drivers/net/wireless/libertas/wext.c | 487 ++--
drivers/net/wireless/libertas/wext.h | 14 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 69 +-
drivers/net/wireless/rt2x00/rt2400pci.h | 20 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 29 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 39 +-
drivers/net/wireless/rt2x00/rt2x00.h | 26 +-
drivers/net/wireless/rt2x00/rt2x00config.c | 5 -
drivers/net/wireless/rt2x00/rt2x00debug.c | 240 ++-
drivers/net/wireless/rt2x00/rt2x00dev.c | 93 +-
drivers/net/wireless/rt2x00/rt2x00dump.h | 121 +
drivers/net/wireless/rt2x00/rt2x00firmware.c | 5 -
drivers/net/wireless/rt2x00/rt2x00lib.h | 6 +
drivers/net/wireless/rt2x00/rt2x00mac.c | 7 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 92 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 15 -
drivers/net/wireless/rt2x00/rt2x00ring.h | 22 +
drivers/net/wireless/rt2x00/rt2x00usb.c | 41 +-
drivers/net/wireless/rt2x00/rt61pci.c | 68 +-
drivers/net/wireless/rt2x00/rt73usb.c | 36 +-
drivers/net/wireless/rtl8187_dev.c | 2 +
drivers/net/wireless/rtl8187_rtl8225.c | 8 +-
drivers/net/wireless/zd1211rw/Kconfig | 7 +-
drivers/net/wireless/zd1211rw/Makefile | 3 +-
drivers/net/wireless/zd1211rw/zd_chip.c | 126 +-
drivers/net/wireless/zd1211rw/zd_chip.h | 60 +-
drivers/net/wireless/zd1211rw/zd_def.h | 5 +-
drivers/net/wireless/zd1211rw/zd_ieee80211.c | 196 +-
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 49 +-
drivers/net/wireless/zd1211rw/zd_mac.c | 1535 ++++-------
drivers/net/wireless/zd1211rw/zd_mac.h | 117 +-
drivers/net/wireless/zd1211rw/zd_netdev.c | 264 --
drivers/net/wireless/zd1211rw/zd_netdev.h | 45 -
drivers/net/wireless/zd1211rw/zd_rf.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf.h | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_al2230.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_al7230b.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c | 5 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 5 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 289 ++-
drivers/net/wireless/zd1211rw/zd_usb.h | 36 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/main.c | 10 +-
drivers/ssb/pci.c | 221 +-
include/linux/ssb/ssb.h | 71 +-
include/linux/ssb/ssb_regs.h | 59 +-
126 files changed, 14163 insertions(+), 11658 deletions(-)
create mode 100644 drivers/net/wireless/b43/wa.c
create mode 100644 drivers/net/wireless/b43/wa.h
create mode 100644 drivers/net/wireless/rt2x00/rt2x00dump.h
delete mode 100644 drivers/net/wireless/zd1211rw/zd_netdev.c
delete mode 100644 drivers/net/wireless/zd1211rw/zd_netdev.h
Omnibus patch available here:
http://www.kernel.org/pub/linux/kernel/people/linville/upstream-jgarzik.patch.bz2
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply [flat|nested] 25+ messages in thread* Re: Please pull 'upstream-jgarzik' branch of wireless-2.6
2007-12-04 13:59 John W. Linville
@ 2007-12-04 20:13 ` Jeff Garzik
0 siblings, 0 replies; 25+ messages in thread
From: Jeff Garzik @ 2007-12-04 20:13 UTC (permalink / raw)
To: John W. Linville; +Cc: davem, netdev, linux-wireless
John W. Linville wrote:
> Jeff,
>
> Here are more than 5 score patches intended for 2.6.25. This request
> replaces the request sent on 27 November. [1]
>
> There are tons of updates here, especially iwlwifi and libertas. The
> b43, b43legacy, rt2x00, rtl8187, and zd1211rw drivers are also updated.
>
> This pull contains the port of zd1211rw to the mac80211 infrastructure.
> There is also some SSB stuff in there. I've been sending that stuff
> to Dave M., but since later b43 patches depend on it I thought it
> would be better to send them your way. I'll CC Dave.
>
> Also included is the iwl4965 work to use the .11n stuff that has been
> added in the net-2.6.25 tree. For now I've added a "depends on n" to
> the IWL4965_HT Kconfig to avoid build breakage in your tree.
>
> The total diff is getting big -- the patch is nearing 2MB. Please let
> me know if there are any problems so we can get (at least some of)
> this merged!
>
> Thanks,
>
> John
>
> [1] http://marc.info/?l=linux-netdev&m=119617493212177&w=2
>
> ---
>
> Individual patches are available here:
>
> http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
>
> ---
>
> The following changes since commit e86d91426d8b3d79010c9d5c617d7594e5c165aa:
> Jeff Garzik (1):
> Merge branch 'r6040' of git://git.kernel.org/.../romieu/netdev-2.6 into upstream
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
pulled
^ permalink raw reply [flat|nested] 25+ messages in thread
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-11-27 14:47 John W. Linville
[not found] ` <20071127144748.GA12408-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-11-27 14:47 UTC (permalink / raw)
To: jeff; +Cc: netdev, linux-wireless
[-- Attachment #1: Type: text/plain, Size: 7556 bytes --]
Jeff,
A slew of patches for 2.6.25...
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik
---
The following changes since commit 02e063b58b7c7084bae3d599c54dcf26c8efa9b7:
Komuro (1):
axnet_cs: use spin_lock_irqsave instead of spin_lock + disable_irq
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Christoph Hellwig (1):
iwlwifi: cleanup namespace
Frank Lichtenheld (1):
b43: silence a bogus gcc warning
Holger Schurig (2):
libertas: move to uniform lbs_/LBS_ namespace
libertas: clean up association debug messages
Ivo van Doorn (1):
rt2x00: Move duplicate code into rt2x00pci_txdone()
John W. Linville (1):
iwlwifi: remove redundant initialization of final_mode
Larry Finger (6):
ssb: Add new SPROM structure while keeping the old
ssb: Convert to use of the new SPROM structure
b44: Convert to use of the new SPROM structure
b43: Convert to use of the new SPROM structure
b43legacy: Convert to use of the new SPROM structure
ssb: Remove the old, now unused, data structures
Mattias Nissler (1):
rt2x00: Allow rt61 to catch up after a missing tx report
Mohamed Abbas (1):
iwl4965: fix cannot find a suitable rate issue
Reinette Chatre (1):
MAINTAINERS: Add Reinette Chatre to iwlwifi & ipw2100/ipw2200
Stefano Brivio (6):
b43legacy: use the retry limits provided by mac80211
b43legacy: use a consistent naming scheme for the ops
b43legacy: rewrite and fix rfkill initialization
b43: rewrite A PHY initialization
b43/b43legacy: fix my copyright notices
b43legacy: fix kconfig dependecies for rfkill and leds
Zhu Yi (3):
iwlwifi: replace 0x8086 with PCI_VENDOR_ID_INTEL
remove unused iwl4965_init_hw_rates function
iwl4965: fix rxon flags set to wrong value for A mode in .erp_ie_changed
MAINTAINERS | 10 +-
drivers/net/b44.c | 8 +-
drivers/net/wireless/b43/Makefile | 1 +
drivers/net/wireless/b43/b43.h | 4 +
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/leds.c | 10 +-
drivers/net/wireless/b43/lo.c | 8 +-
drivers/net/wireless/b43/main.c | 37 +-
drivers/net/wireless/b43/main.h | 2 +-
drivers/net/wireless/b43/phy.c | 672 ++-----
drivers/net/wireless/b43/phy.h | 18 +-
drivers/net/wireless/b43/tables.c | 103 +-
drivers/net/wireless/b43/tables.h | 12 +-
drivers/net/wireless/b43/wa.c | 665 ++++++
drivers/net/wireless/b43/wa.h | 7 +
drivers/net/wireless/b43/xmit.c | 4 +-
drivers/net/wireless/b43legacy/Kconfig | 8 +-
drivers/net/wireless/b43legacy/ilt.c | 2 +-
drivers/net/wireless/b43legacy/leds.c | 10 +-
drivers/net/wireless/b43legacy/main.c | 155 +-
drivers/net/wireless/b43legacy/main.h | 2 +-
drivers/net/wireless/b43legacy/phy.c | 40 +-
drivers/net/wireless/b43legacy/phy.h | 2 +-
drivers/net/wireless/b43legacy/radio.c | 14 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 16 +-
drivers/net/wireless/b43legacy/rfkill.h | 8 +-
drivers/net/wireless/b43legacy/xmit.c | 7 +-
drivers/net/wireless/iwlwifi/Kconfig | 14 +-
drivers/net/wireless/iwlwifi/iwl-3945-commands.h | 190 +-
drivers/net/wireless/iwlwifi/iwl-3945-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 50 +-
drivers/net/wireless/iwlwifi/iwl-3945-io.h | 256 ++--
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 146 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 26 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 532 +++---
drivers/net/wireless/iwlwifi/iwl-3945.h | 376 ++--
drivers/net/wireless/iwlwifi/iwl-4965-commands.h | 200 +-
drivers/net/wireless/iwlwifi/iwl-4965-debug.h | 12 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 72 +-
drivers/net/wireless/iwlwifi/iwl-4965-io.h | 256 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 313 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 32 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 762 ++++----
drivers/net/wireless/iwlwifi/iwl-4965.h | 452 +++---
drivers/net/wireless/iwlwifi/iwl3945-base.c | 2208 ++++++++++----------
drivers/net/wireless/iwlwifi/iwl4965-base.c | 2327 +++++++++++-----------
drivers/net/wireless/libertas/11d.c | 72 +-
drivers/net/wireless/libertas/11d.h | 24 +-
drivers/net/wireless/libertas/assoc.c | 254 ++--
drivers/net/wireless/libertas/assoc.h | 12 +-
drivers/net/wireless/libertas/cmd.c | 274 ++--
drivers/net/wireless/libertas/cmdresp.c | 174 +-
drivers/net/wireless/libertas/debugfs.c | 402 ++--
drivers/net/wireless/libertas/debugfs.h | 12 +-
drivers/net/wireless/libertas/decl.h | 84 +-
drivers/net/wireless/libertas/defs.h | 54 +-
drivers/net/wireless/libertas/dev.h | 42 +-
drivers/net/wireless/libertas/ethtool.c | 52 +-
drivers/net/wireless/libertas/host.h | 6 +-
drivers/net/wireless/libertas/hostcmd.h | 12 +-
drivers/net/wireless/libertas/if_cs.c | 42 +-
drivers/net/wireless/libertas/if_sdio.c | 46 +-
drivers/net/wireless/libertas/if_sdio.h | 4 +-
drivers/net/wireless/libertas/if_usb.c | 86 +-
drivers/net/wireless/libertas/if_usb.h | 4 +-
drivers/net/wireless/libertas/join.c | 130 +-
drivers/net/wireless/libertas/join.h | 38 +-
drivers/net/wireless/libertas/main.c | 528 +++---
drivers/net/wireless/libertas/rx.c | 66 +-
drivers/net/wireless/libertas/scan.c | 184 +-
drivers/net/wireless/libertas/scan.h | 86 +-
drivers/net/wireless/libertas/tx.c | 38 +-
drivers/net/wireless/libertas/types.h | 6 +-
drivers/net/wireless/libertas/wext.c | 476 +++---
drivers/net/wireless/libertas/wext.h | 14 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 20 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 20 +-
drivers/net/wireless/rt2x00/rt2x00pci.c | 33 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 4 +-
drivers/net/wireless/rt2x00/rt61pci.c | 32 +-
drivers/ssb/b43_pci_bridge.c | 1 +
drivers/ssb/main.c | 10 +-
drivers/ssb/pci.c | 221 +--
include/linux/ssb/ssb.h | 71 +-
include/linux/ssb/ssb_regs.h | 59 +-
86 files changed, 7082 insertions(+), 6676 deletions(-)
create mode 100644 drivers/net/wireless/b43/wa.c
create mode 100644 drivers/net/wireless/b43/wa.h
Omnibus patch attached as upstream-jgarzik.patch.bz2 due to size
constraints.
--
John W. Linville
linville@tuxdriver.com
[-- Attachment #2: upstream-jgarzik.patch.bz2 --]
[-- Type: application/x-bzip2, Size: 170301 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-11-06 1:16 John W. Linville
2007-11-06 17:43 ` Jeff Garzik
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-11-06 1:16 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
Jeff,
Here is a slew of patches targeted for 2.6.25. There are a bunch
of rt2x00, iwl3945, iwl4965, b43, and b43legacy patches, as well as
a few others. I'm sorry I didn't spread this out better -- I got a
bit behind... :-(
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
---
The following changes since commit 5d66f151ac7cb5162f201fe2996c6e01f0323f37:
Linus Torvalds (1):
Merge master.kernel.org:/.../gregkh/pci-2.6
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Adam Baker (2):
rt2x00: Unconstify rt2x00dev
rt2x00: Place mutex around USB register access
Christoph Hellwig (3):
iwlwifi: mark more functions/variables static
iwlwifi: keep 3945 and 4965 headers separate
iwlwifi: cleanup Kconfig and ifdefs to split 3945 and 4965
Dan Williams (1):
orinoco: more reliable scan handling
Dmitry Torokhov (1):
P54: use temporary variables to reduce size of generated code
Emmanuel Grumbach (3):
iwlwifi-ht: move 4965 SCD registers to iwl-prph.h
iwlwifi: move 3945 SCD registers to iwl-prph.h
iwlwifi: add 5965 SCD registers to iwl-prph.h
Holger Schurig (1):
libertas: move wlan_*_association_work from header to c file
Ian Schram (5):
iwlwifi: fix various spelling and typos
iwlwifi: rename iwl_eeprom_aqcuire_semaphore to _acquire_
iwlwifi: Two comments in iwl-3945.c were longer than 80 columns
iwlwifi: Beautify by removing superfluous newlines and code
iwlwifi: remove late null-check and duplicate bug_on
Ivo van Doorn (15):
rt2x00: Move quality statistics into seperate structure
rt2x00: Use enum defines
rt2x00: Correctly translate mac80211 antenna setup to rt2x00
rt2x00: SW diversity should default to antenna B
rt2x00: Remove rt2x00_clear_link
rt2x00: Implement SW diversity
rt2x00: Cleanup if-statements
rt2x00: Release rt2x00 2.0.11
rt2x00: Disable RX when switching antenna
rt2x00: Split rt61/rt73 antenna selection into RX and TX antenna
rt2x00: Input-polldev requires input device
rt2x00: Detect initial rfkill state on register
rt2x00: Remove unused variables
rt2x00: Remove data_desc structure
rt2x00: Release rt2x00 2.0.12
Jes Sorensen (1):
iwlwifi: disable interrupts before calling request_irq
Larry Finger (4):
b43legacy: LED triggers support
b43legacy: RF-kill support
b43legacy: Use input-polldev for the rfkill switch
b43legacy: Rewrite pwork locking
Matthias Kaehlcke (1):
Prism54: Convert mgmt_sem to the mutex API
Mattias Nissler (4):
rt2x00: Fix antenna selection.
rt2x00: Rework rt61 antenna selection.
rt2x00: Rework rt73 antenna selection
rt2x00: Correctly set ACK bit in tx descriptors
Michael Buesch (7):
b43legacy: Remove set_key callback
b43: Dereference of wl->current_dev must be protected by wl->mutex
b43: Use the retry limit parameters from mac80211
b43: consistent naming for ieee80211_ops
b43: Fix rfkill callback deadlock
b43: debugfs SHM read buffer overrun fix
b43: Rewrite and fix rfkill init
Roel Kluin (1):
wireless: fix '!x & y' typo's
Tomas Winkler (11):
iwlwifi: Add erp_ie_changed hanlder
iwlwifi: renaming last_used and first_empty
iwlwifi: rs-4965 fix return values
iwlwifi: add TGN flag to qos parameters
iwlwifi: remove cck_flag from iwl_driver_hw_info
iwlwifi: remove cck_power_index_compensation
iwlwifi: using PCI_DEVICE macro
iwlwifi: replace restricted_reg with prph
iwlwifi: rename restricted_mem to targ_mem
iwlwifi: replacing wording restricted to nic access in iwl-io
iwlwifi: Renames struct fw_image_desc to struct fw_desc
Zhu Yi (2):
iwlwifi: Update iwlwifi version stamp to 1.1.18
iwlwifi: Update iwlwifi version stamp to 1.1.19
mabbas (2):
iwlwifi: accept up to 4K frame size on Rx side to fit A-MSDU frame
iwl4965: exclude 60M rate from probe request
drivers/net/wireless/Makefile | 3 +-
drivers/net/wireless/airo.c | 2 +-
drivers/net/wireless/atmel.c | 2 +-
drivers/net/wireless/b43/debugfs.c | 2 +-
drivers/net/wireless/b43/main.c | 159 ++--
drivers/net/wireless/b43/rfkill.c | 115 +--
drivers/net/wireless/b43/rfkill.h | 14 +-
drivers/net/wireless/b43/xmit.c | 3 +-
drivers/net/wireless/b43legacy/Kconfig | 12 +
drivers/net/wireless/b43legacy/Makefile | 29 +-
drivers/net/wireless/b43legacy/b43legacy.h | 11 +-
drivers/net/wireless/b43legacy/leds.c | 413 ++++-----
drivers/net/wireless/b43legacy/leds.h | 61 +-
drivers/net/wireless/b43legacy/main.c | 214 ++---
drivers/net/wireless/b43legacy/radio.c | 15 +-
drivers/net/wireless/b43legacy/radio.h | 2 +-
drivers/net/wireless/b43legacy/rfkill.c | 185 ++++
drivers/net/wireless/b43legacy/rfkill.h | 59 ++
drivers/net/wireless/iwlwifi/Kconfig | 169 ++--
.../{iwl-commands.h => iwl-3945-commands.h} | 275 +-----
.../iwlwifi/{iwl-debug.h => iwl-3945-debug.h} | 6 +-
drivers/net/wireless/iwlwifi/iwl-3945-hw.h | 629 ++++++++++++-
.../wireless/iwlwifi/{iwl-io.h => iwl-3945-io.h} | 289 +++---
drivers/net/wireless/iwlwifi/iwl-3945-rs.c | 8 +-
drivers/net/wireless/iwlwifi/iwl-3945-rs.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-3945.c | 182 ++--
drivers/net/wireless/iwlwifi/iwl-3945.h | 963 ++++++++++++++++++-
.../{iwl-commands.h => iwl-4965-commands.h} | 154 +---
.../iwlwifi/{iwl-debug.h => iwl-4965-debug.h} | 6 +-
drivers/net/wireless/iwlwifi/iwl-4965-hw.h | 711 +++++++++++++-
.../wireless/iwlwifi/{iwl-io.h => iwl-4965-io.h} | 289 +++---
drivers/net/wireless/iwlwifi/iwl-4965-rs.c | 149 ++--
drivers/net/wireless/iwlwifi/iwl-4965-rs.h | 4 +-
drivers/net/wireless/iwlwifi/iwl-4965.c | 305 +++---
drivers/net/wireless/iwlwifi/iwl-4965.h | 1035 +++++++++++++++++++-
drivers/net/wireless/iwlwifi/iwl-channel.h | 161 ---
drivers/net/wireless/iwlwifi/iwl-eeprom.h | 336 -------
drivers/net/wireless/iwlwifi/iwl-hw.h | 537 ----------
drivers/net/wireless/iwlwifi/iwl-priv.h | 308 ------
drivers/net/wireless/iwlwifi/iwl-prph.h | 53 +-
drivers/net/wireless/iwlwifi/iwl3945-base.c | 405 ++++----
drivers/net/wireless/iwlwifi/iwl4965-base.c | 529 +++++-----
drivers/net/wireless/iwlwifi/iwlwifi.h | 708 -------------
drivers/net/wireless/libertas/assoc.h | 18 -
drivers/net/wireless/libertas/wext.c | 52 +-
drivers/net/wireless/orinoco.c | 541 ++++++-----
drivers/net/wireless/orinoco.h | 12 +-
drivers/net/wireless/p54common.c | 2 +-
drivers/net/wireless/p54pci.c | 77 +-
drivers/net/wireless/prism54/isl_ioctl.c | 4 +-
drivers/net/wireless/prism54/islpci_dev.c | 2 +-
drivers/net/wireless/prism54/islpci_dev.h | 3 +-
drivers/net/wireless/prism54/islpci_mgt.c | 4 +-
drivers/net/wireless/rt2x00/rt2400pci.c | 104 ++-
drivers/net/wireless/rt2x00/rt2400pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2500pci.c | 112 ++--
drivers/net/wireless/rt2x00/rt2500pci.h | 4 +-
drivers/net/wireless/rt2x00/rt2500usb.c | 169 +++--
drivers/net/wireless/rt2x00/rt2500usb.h | 17 +-
drivers/net/wireless/rt2x00/rt2x00.h | 192 +++-
drivers/net/wireless/rt2x00/rt2x00config.c | 95 ++-
drivers/net/wireless/rt2x00/rt2x00debug.h | 4 +-
drivers/net/wireless/rt2x00/rt2x00dev.c | 212 ++++-
drivers/net/wireless/rt2x00/rt2x00lib.h | 2 +
drivers/net/wireless/rt2x00/rt2x00pci.c | 4 +-
drivers/net/wireless/rt2x00/rt2x00pci.h | 8 +-
drivers/net/wireless/rt2x00/rt2x00rfkill.c | 44 +-
drivers/net/wireless/rt2x00/rt2x00ring.h | 23 +-
drivers/net/wireless/rt2x00/rt2x00usb.c | 38 +-
drivers/net/wireless/rt2x00/rt2x00usb.h | 19 +-
drivers/net/wireless/rt2x00/rt61pci.c | 332 ++++---
drivers/net/wireless/rt2x00/rt61pci.h | 14 +-
drivers/net/wireless/rt2x00/rt73usb.c | 198 +++--
drivers/net/wireless/rt2x00/rt73usb.h | 14 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 2 +-
net/ieee80211/ieee80211_wx.c | 2 +-
76 files changed, 6655 insertions(+), 5189 deletions(-)
create mode 100644 drivers/net/wireless/b43legacy/rfkill.c
create mode 100644 drivers/net/wireless/b43legacy/rfkill.h
copy drivers/net/wireless/iwlwifi/{iwl-commands.h => iwl-3945-commands.h} (86%)
copy drivers/net/wireless/iwlwifi/{iwl-debug.h => iwl-3945-debug.h} (97%)
copy drivers/net/wireless/iwlwifi/{iwl-io.h => iwl-3945-io.h} (50%)
rename drivers/net/wireless/iwlwifi/{iwl-commands.h => iwl-4965-commands.h} (93%)
rename drivers/net/wireless/iwlwifi/{iwl-debug.h => iwl-4965-debug.h} (97%)
rename drivers/net/wireless/iwlwifi/{iwl-io.h => iwl-4965-io.h} (50%)
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-channel.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-eeprom.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-hw.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwl-priv.h
delete mode 100644 drivers/net/wireless/iwlwifi/iwlwifi.h
Omnibus patch available here:
http://www.kernel.org/pub/linux/kernel/people/linville/upstream-jgarzik.patch
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply [flat|nested] 25+ messages in thread* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-09-15 13:21 John W. Linville
2007-09-18 1:54 ` Zhu Yi
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-09-15 13:21 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: netdev-u79uwXL29TY76Z2rM5mHXA,
linux-wireless-u79uwXL29TY76Z2rM5mHXA
Jeff,
A few more for 2.6.24...
Thanks,
John
---
The following changes since commit 18d256761aa268fd2fb113c4fd26c400431f1dc1:
Jeff Garzik (1):
Merge branch 'stats' into upstream
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Jesper Juhl (1):
zd1211rw: Don't needlessly initialize variable to NULL in zd_chip
Larry Finger (1):
bcm43xx: Change radio hardware switch status printk from debug to regular
Ulrich Kunitz (1):
zd1211rw: add USB id for Telegent TG54USB WLAN adapter
drivers/net/wireless/bcm43xx/bcm43xx_main.c | 4 ++--
drivers/net/wireless/zd1211rw/zd_chip.c | 2 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 1 +
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
index 618d1a2..4d84631 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
@@ -2380,7 +2380,7 @@ static int bcm43xx_chip_init(struct bcm43xx_private *bcm)
goto err_gpio_cleanup;
bcm43xx_radio_turn_on(bcm);
bcm->radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm);
- dprintk(KERN_INFO PFX "Radio %s by hardware\n",
+ printk(KERN_INFO PFX "Radio %s by hardware\n",
(bcm->radio_hw_enable == 0) ? "disabled" : "enabled");
bcm43xx_write16(bcm, 0x03E6, 0x0000);
@@ -3129,7 +3129,7 @@ static void bcm43xx_periodic_every1sec(struct bcm43xx_private *bcm)
radio_hw_enable = bcm43xx_is_hw_radio_enabled(bcm);
if (unlikely(bcm->radio_hw_enable != radio_hw_enable)) {
bcm->radio_hw_enable = radio_hw_enable;
- dprintk(KERN_INFO PFX "Radio hardware status changed to %s\n",
+ printk(KERN_INFO PFX "Radio hardware status changed to %s\n",
(radio_hw_enable == 0) ? "disabled" : "enabled");
bcm43xx_leds_update(bcm, 0);
}
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 4959042..06244d8 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -106,7 +106,7 @@ int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr
{
int r;
int i;
- zd_addr_t *a16 = (zd_addr_t *)NULL;
+ zd_addr_t *a16;
u16 *v16;
unsigned int count16;
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index e49628b..895ff84 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -55,6 +55,7 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x14ea, 0xab13), .driver_info = DEVICE_ZD1211 },
{ USB_DEVICE(0x13b1, 0x001e), .driver_info = DEVICE_ZD1211 },
{ USB_DEVICE(0x0586, 0x3407), .driver_info = DEVICE_ZD1211 },
+ { USB_DEVICE(0x129b, 0x1666), .driver_info = DEVICE_ZD1211 },
/* ZD1211B */
{ USB_DEVICE(0x0ace, 0x1215), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x157e, 0x300d), .driver_info = DEVICE_ZD1211B },
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related [flat|nested] 25+ messages in thread[parent not found: <20070828231731.GB2967@tuxdriver.com>]
* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-08-15 0:36 John W. Linville
[not found] ` <20070815003637.GK7198-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-08-15 0:36 UTC (permalink / raw)
To: jeff-o2qLIJkoznsdnm+yROfE0A
Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
A few items intended for 2.6.24.
Individual patches here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/upstream-jgarzik/
Thanks!
John
---
The following changes since commit 39d3520c92cf7a28c07229ca00cc35a1e8026c77:
Linus Torvalds (1):
Linux 2.6.23-rc3
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Daniel Drake (2):
zd1211rw: Add ID for Sitecom WL-162
zd1211rw: Add ID for ZyXEL M-202 XtremeMIMO
Mariusz Kozlowski (1):
drivers/net/wireless/wl3501_cs.c: remove redundant memset
Ulrich Kunitz (2):
zd1211rw: removed noisy debug messages
zd1211rw: consistent handling of ZD1211 specific rates
drivers/net/wireless/wl3501_cs.c | 1 -
drivers/net/wireless/zd1211rw/zd_chip.c | 69 +++++++-----------
drivers/net/wireless/zd1211rw/zd_ieee80211.h | 43 +++++++----
drivers/net/wireless/zd1211rw/zd_mac.c | 99 +++++++-------------------
drivers/net/wireless/zd1211rw/zd_mac.h | 65 +++++++++++------
drivers/net/wireless/zd1211rw/zd_usb.c | 2 +
6 files changed, 128 insertions(+), 151 deletions(-)
diff --git a/drivers/net/wireless/wl3501_cs.c b/drivers/net/wireless/wl3501_cs.c
index c8b5c22..62b8669 100644
--- a/drivers/net/wireless/wl3501_cs.c
+++ b/drivers/net/wireless/wl3501_cs.c
@@ -1841,7 +1841,6 @@ static int wl3501_get_encode(struct net_device *dev,
tocopy = min_t(u8, len_keys, wrqu->encoding.length);
tocopy = min_t(u8, tocopy, 100);
wrqu->encoding.length = tocopy;
- memset(extra, 0, tocopy);
memcpy(extra, keys, tocopy);
out:
return rc;
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index c39f198..4959042 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -500,8 +500,6 @@ int zd_chip_lock_phy_regs(struct zd_chip *chip)
return r;
}
- dev_dbg_f(zd_chip_dev(chip),
- "CR_REG1: 0x%02x -> 0x%02x\n", tmp, tmp & ~UNLOCK_PHY_REGS);
tmp &= ~UNLOCK_PHY_REGS;
r = zd_iowrite32_locked(chip, tmp, CR_REG1);
@@ -523,8 +521,6 @@ int zd_chip_unlock_phy_regs(struct zd_chip *chip)
return r;
}
- dev_dbg_f(zd_chip_dev(chip),
- "CR_REG1: 0x%02x -> 0x%02x\n", tmp, tmp | UNLOCK_PHY_REGS);
tmp |= UNLOCK_PHY_REGS;
r = zd_iowrite32_locked(chip, tmp, CR_REG1);
@@ -841,8 +837,6 @@ static int get_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
s->atim_wnd_period = values[0];
s->pre_tbtt = values[1];
s->beacon_interval = values[2];
- dev_dbg_f(zd_chip_dev(chip), "aw %u pt %u bi %u\n",
- s->atim_wnd_period, s->pre_tbtt, s->beacon_interval);
return 0;
}
@@ -864,9 +858,6 @@ static int set_aw_pt_bi(struct zd_chip *chip, struct aw_pt_bi *s)
reqs[2].addr = CR_BCN_INTERVAL;
reqs[2].value = s->beacon_interval;
- dev_dbg_f(zd_chip_dev(chip),
- "aw %u pt %u bi %u\n", s->atim_wnd_period, s->pre_tbtt,
- s->beacon_interval);
return zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs));
}
@@ -1018,19 +1009,19 @@ int zd_chip_set_rts_cts_rate_locked(struct zd_chip *chip,
u32 value = 0;
/* Modulation bit */
- if (ZD_CS_TYPE(rts_rate) == ZD_CS_OFDM)
+ if (ZD_MODULATION_TYPE(rts_rate) == ZD_OFDM)
rts_mod = ZD_RX_OFDM;
dev_dbg_f(zd_chip_dev(chip), "rts_rate=%x preamble=%x\n",
rts_rate, preamble);
- value |= rts_rate << RTSCTS_SH_RTS_RATE;
+ value |= ZD_PURE_RATE(rts_rate) << RTSCTS_SH_RTS_RATE;
value |= rts_mod << RTSCTS_SH_RTS_MOD_TYPE;
value |= preamble << RTSCTS_SH_RTS_PMB_TYPE;
value |= preamble << RTSCTS_SH_CTS_PMB_TYPE;
/* We always send 11M self-CTS messages, like the vendor driver. */
- value |= ZD_CCK_RATE_11M << RTSCTS_SH_CTS_RATE;
+ value |= ZD_PURE_RATE(ZD_CCK_RATE_11M) << RTSCTS_SH_CTS_RATE;
value |= ZD_RX_CCK << RTSCTS_SH_CTS_MOD_TYPE;
return zd_iowrite32_locked(chip, value, CR_RTS_CTS_RATE);
@@ -1160,16 +1151,12 @@ out:
static int update_pwr_int(struct zd_chip *chip, u8 channel)
{
u8 value = chip->pwr_int_values[channel - 1];
- dev_dbg_f(zd_chip_dev(chip), "channel %d pwr_int %#04x\n",
- channel, value);
return zd_iowrite16_locked(chip, value, CR31);
}
static int update_pwr_cal(struct zd_chip *chip, u8 channel)
{
u8 value = chip->pwr_cal_values[channel-1];
- dev_dbg_f(zd_chip_dev(chip), "channel %d pwr_cal %#04x\n",
- channel, value);
return zd_iowrite16_locked(chip, value, CR68);
}
@@ -1184,9 +1171,6 @@ static int update_ofdm_cal(struct zd_chip *chip, u8 channel)
ioreqs[2].addr = CR65;
ioreqs[2].value = chip->ofdm_cal_values[OFDM_54M_INDEX][channel-1];
- dev_dbg_f(zd_chip_dev(chip),
- "channel %d ofdm_cal 36M %#04x 48M %#04x 54M %#04x\n",
- channel, ioreqs[0].value, ioreqs[1].value, ioreqs[2].value);
return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
@@ -1344,7 +1328,7 @@ int zd_chip_set_basic_rates_locked(struct zd_chip *chip, u16 cr_rates)
return zd_iowrite32_locked(chip, cr_rates, CR_BASIC_RATE_TBL);
}
-static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
+static int ofdm_qual_db(u8 status_quality, u8 zd_rate, unsigned int size)
{
static const u16 constants[] = {
715, 655, 585, 540, 470, 410, 360, 315,
@@ -1358,7 +1342,7 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
/* It seems that their quality parameter is somehow per signal
* and is now transferred per bit.
*/
- switch (rate) {
+ switch (zd_rate) {
case ZD_OFDM_RATE_6M:
case ZD_OFDM_RATE_12M:
case ZD_OFDM_RATE_24M:
@@ -1385,7 +1369,7 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
break;
}
- switch (rate) {
+ switch (zd_rate) {
case ZD_OFDM_RATE_6M:
case ZD_OFDM_RATE_9M:
i += 3;
@@ -1409,11 +1393,11 @@ static int ofdm_qual_db(u8 status_quality, u8 rate, unsigned int size)
return i;
}
-static int ofdm_qual_percent(u8 status_quality, u8 rate, unsigned int size)
+static int ofdm_qual_percent(u8 status_quality, u8 zd_rate, unsigned int size)
{
int r;
- r = ofdm_qual_db(status_quality, rate, size);
+ r = ofdm_qual_db(status_quality, zd_rate, size);
ZD_ASSERT(r >= 0);
if (r < 0)
r = 0;
@@ -1474,12 +1458,17 @@ static int cck_qual_percent(u8 status_quality)
return r <= 100 ? r : 100;
}
+static inline u8 zd_rate_from_ofdm_plcp_header(const void *rx_frame)
+{
+ return ZD_OFDM | zd_ofdm_plcp_header_rate(rx_frame);
+}
+
u8 zd_rx_qual_percent(const void *rx_frame, unsigned int size,
const struct rx_status *status)
{
return (status->frame_status&ZD_RX_OFDM) ?
ofdm_qual_percent(status->signal_quality_ofdm,
- zd_ofdm_plcp_header_rate(rx_frame),
+ zd_rate_from_ofdm_plcp_header(rx_frame),
size) :
cck_qual_percent(status->signal_quality_cck);
}
@@ -1495,32 +1484,32 @@ u8 zd_rx_strength_percent(u8 rssi)
u16 zd_rx_rate(const void *rx_frame, const struct rx_status *status)
{
static const u16 ofdm_rates[] = {
- [ZD_OFDM_RATE_6M] = 60,
- [ZD_OFDM_RATE_9M] = 90,
- [ZD_OFDM_RATE_12M] = 120,
- [ZD_OFDM_RATE_18M] = 180,
- [ZD_OFDM_RATE_24M] = 240,
- [ZD_OFDM_RATE_36M] = 360,
- [ZD_OFDM_RATE_48M] = 480,
- [ZD_OFDM_RATE_54M] = 540,
+ [ZD_OFDM_PLCP_RATE_6M] = 60,
+ [ZD_OFDM_PLCP_RATE_9M] = 90,
+ [ZD_OFDM_PLCP_RATE_12M] = 120,
+ [ZD_OFDM_PLCP_RATE_18M] = 180,
+ [ZD_OFDM_PLCP_RATE_24M] = 240,
+ [ZD_OFDM_PLCP_RATE_36M] = 360,
+ [ZD_OFDM_PLCP_RATE_48M] = 480,
+ [ZD_OFDM_PLCP_RATE_54M] = 540,
};
u16 rate;
if (status->frame_status & ZD_RX_OFDM) {
+ /* Deals with PLCP OFDM rate (not zd_rates) */
u8 ofdm_rate = zd_ofdm_plcp_header_rate(rx_frame);
rate = ofdm_rates[ofdm_rate & 0xf];
} else {
- u8 cck_rate = zd_cck_plcp_header_rate(rx_frame);
- switch (cck_rate) {
- case ZD_CCK_SIGNAL_1M:
+ switch (zd_cck_plcp_header_signal(rx_frame)) {
+ case ZD_CCK_PLCP_SIGNAL_1M:
rate = 10;
break;
- case ZD_CCK_SIGNAL_2M:
+ case ZD_CCK_PLCP_SIGNAL_2M:
rate = 20;
break;
- case ZD_CCK_SIGNAL_5M5:
+ case ZD_CCK_PLCP_SIGNAL_5M5:
rate = 55;
break;
- case ZD_CCK_SIGNAL_11M:
+ case ZD_CCK_PLCP_SIGNAL_11M:
rate = 110;
break;
default:
@@ -1638,7 +1627,5 @@ int zd_chip_set_multicast_hash(struct zd_chip *chip,
{ CR_GROUP_HASH_P2, hash->high },
};
- dev_dbg_f(zd_chip_dev(chip), "hash l 0x%08x h 0x%08x\n",
- ioreqs[0].value, ioreqs[1].value);
return zd_iowrite32a(chip, ioreqs, ARRAY_SIZE(ioreqs));
}
diff --git a/drivers/net/wireless/zd1211rw/zd_ieee80211.h b/drivers/net/wireless/zd1211rw/zd_ieee80211.h
index c4f36d3..fbf6491 100644
--- a/drivers/net/wireless/zd1211rw/zd_ieee80211.h
+++ b/drivers/net/wireless/zd1211rw/zd_ieee80211.h
@@ -43,21 +43,25 @@ struct ofdm_plcp_header {
__le16 service;
} __attribute__((packed));
-static inline u8 zd_ofdm_plcp_header_rate(
- const struct ofdm_plcp_header *header)
+static inline u8 zd_ofdm_plcp_header_rate(const struct ofdm_plcp_header *header)
{
return header->prefix[0] & 0xf;
}
-/* These are referred to as zd_rates */
-#define ZD_OFDM_RATE_6M 0xb
-#define ZD_OFDM_RATE_9M 0xf
-#define ZD_OFDM_RATE_12M 0xa
-#define ZD_OFDM_RATE_18M 0xe
-#define ZD_OFDM_RATE_24M 0x9
-#define ZD_OFDM_RATE_36M 0xd
-#define ZD_OFDM_RATE_48M 0x8
-#define ZD_OFDM_RATE_54M 0xc
+/* The following defines give the encoding of the 4-bit rate field in the
+ * OFDM (802.11a/802.11g) PLCP header. Notify that these values are used to
+ * define the zd-rate values for OFDM.
+ *
+ * See the struct zd_ctrlset definition in zd_mac.h.
+ */
+#define ZD_OFDM_PLCP_RATE_6M 0xb
+#define ZD_OFDM_PLCP_RATE_9M 0xf
+#define ZD_OFDM_PLCP_RATE_12M 0xa
+#define ZD_OFDM_PLCP_RATE_18M 0xe
+#define ZD_OFDM_PLCP_RATE_24M 0x9
+#define ZD_OFDM_PLCP_RATE_36M 0xd
+#define ZD_OFDM_PLCP_RATE_48M 0x8
+#define ZD_OFDM_PLCP_RATE_54M 0xc
struct cck_plcp_header {
u8 signal;
@@ -66,15 +70,22 @@ struct cck_plcp_header {
__le16 crc16;
} __attribute__((packed));
-static inline u8 zd_cck_plcp_header_rate(const struct cck_plcp_header *header)
+static inline u8 zd_cck_plcp_header_signal(const struct cck_plcp_header *header)
{
return header->signal;
}
-#define ZD_CCK_SIGNAL_1M 0x0a
-#define ZD_CCK_SIGNAL_2M 0x14
-#define ZD_CCK_SIGNAL_5M5 0x37
-#define ZD_CCK_SIGNAL_11M 0x6e
+/* These defines give the encodings of the signal field in the 802.11b PLCP
+ * header. The signal field gives the bit rate of the following packet. Even
+ * if technically wrong we use CCK here also for the 1 MBit/s and 2 MBit/s
+ * rate to stay consistent with Zydas and our use of the term.
+ *
+ * Notify that these values are *not* used in the zd-rates.
+ */
+#define ZD_CCK_PLCP_SIGNAL_1M 0x0a
+#define ZD_CCK_PLCP_SIGNAL_2M 0x14
+#define ZD_CCK_PLCP_SIGNAL_5M5 0x37
+#define ZD_CCK_PLCP_SIGNAL_11M 0x6e
enum ieee80211_std {
IEEE80211B = 0x01,
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 26869d1..f9cd317 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -582,28 +582,6 @@ u8 zd_mac_get_channel(struct zd_mac *mac)
return channel;
}
-/* If wrong rate is given, we are falling back to the slowest rate: 1MBit/s */
-static u8 zd_rate_typed(u8 zd_rate)
-{
- static const u8 typed_rates[16] = {
- [ZD_CCK_RATE_1M] = ZD_CS_CCK|ZD_CCK_RATE_1M,
- [ZD_CCK_RATE_2M] = ZD_CS_CCK|ZD_CCK_RATE_2M,
- [ZD_CCK_RATE_5_5M] = ZD_CS_CCK|ZD_CCK_RATE_5_5M,
- [ZD_CCK_RATE_11M] = ZD_CS_CCK|ZD_CCK_RATE_11M,
- [ZD_OFDM_RATE_6M] = ZD_CS_OFDM|ZD_OFDM_RATE_6M,
- [ZD_OFDM_RATE_9M] = ZD_CS_OFDM|ZD_OFDM_RATE_9M,
- [ZD_OFDM_RATE_12M] = ZD_CS_OFDM|ZD_OFDM_RATE_12M,
- [ZD_OFDM_RATE_18M] = ZD_CS_OFDM|ZD_OFDM_RATE_18M,
- [ZD_OFDM_RATE_24M] = ZD_CS_OFDM|ZD_OFDM_RATE_24M,
- [ZD_OFDM_RATE_36M] = ZD_CS_OFDM|ZD_OFDM_RATE_36M,
- [ZD_OFDM_RATE_48M] = ZD_CS_OFDM|ZD_OFDM_RATE_48M,
- [ZD_OFDM_RATE_54M] = ZD_CS_OFDM|ZD_OFDM_RATE_54M,
- };
-
- ZD_ASSERT(ZD_CS_RATE_MASK == 0x0f);
- return typed_rates[zd_rate & ZD_CS_RATE_MASK];
-}
-
int zd_mac_set_mode(struct zd_mac *mac, u32 mode)
{
struct ieee80211_device *ieee;
@@ -707,25 +685,30 @@ int zd_mac_get_range(struct zd_mac *mac, struct iw_range *range)
static int zd_calc_tx_length_us(u8 *service, u8 zd_rate, u16 tx_length)
{
+ /* ZD_PURE_RATE() must be used to remove the modulation type flag of
+ * the zd-rate values. */
static const u8 rate_divisor[] = {
- [ZD_CCK_RATE_1M] = 1,
- [ZD_CCK_RATE_2M] = 2,
- [ZD_CCK_RATE_5_5M] = 11, /* bits must be doubled */
- [ZD_CCK_RATE_11M] = 11,
- [ZD_OFDM_RATE_6M] = 6,
- [ZD_OFDM_RATE_9M] = 9,
- [ZD_OFDM_RATE_12M] = 12,
- [ZD_OFDM_RATE_18M] = 18,
- [ZD_OFDM_RATE_24M] = 24,
- [ZD_OFDM_RATE_36M] = 36,
- [ZD_OFDM_RATE_48M] = 48,
- [ZD_OFDM_RATE_54M] = 54,
+ [ZD_PURE_RATE(ZD_CCK_RATE_1M)] = 1,
+ [ZD_PURE_RATE(ZD_CCK_RATE_2M)] = 2,
+
+ /* bits must be doubled */
+ [ZD_PURE_RATE(ZD_CCK_RATE_5_5M)] = 11,
+
+ [ZD_PURE_RATE(ZD_CCK_RATE_11M)] = 11,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_6M)] = 6,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_9M)] = 9,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_12M)] = 12,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_18M)] = 18,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_24M)] = 24,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_36M)] = 36,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_48M)] = 48,
+ [ZD_PURE_RATE(ZD_OFDM_RATE_54M)] = 54,
};
u32 bits = (u32)tx_length * 8;
u32 divisor;
- divisor = rate_divisor[zd_rate];
+ divisor = rate_divisor[ZD_PURE_RATE(zd_rate)];
if (divisor == 0)
return -EINVAL;
@@ -748,52 +731,24 @@ static int zd_calc_tx_length_us(u8 *service, u8 zd_rate, u16 tx_length)
return bits/divisor;
}
-enum {
- R2M_SHORT_PREAMBLE = 0x01,
- R2M_11A = 0x02,
-};
-
-static u8 zd_rate_to_modulation(u8 zd_rate, int flags)
-{
- u8 modulation;
-
- modulation = zd_rate_typed(zd_rate);
- if (flags & R2M_SHORT_PREAMBLE) {
- switch (ZD_CS_RATE(modulation)) {
- case ZD_CCK_RATE_2M:
- case ZD_CCK_RATE_5_5M:
- case ZD_CCK_RATE_11M:
- modulation |= ZD_CS_CCK_PREA_SHORT;
- return modulation;
- }
- }
- if (flags & R2M_11A) {
- if (ZD_CS_TYPE(modulation) == ZD_CS_OFDM)
- modulation |= ZD_CS_OFDM_MODE_11A;
- }
- return modulation;
-}
-
static void cs_set_modulation(struct zd_mac *mac, struct zd_ctrlset *cs,
struct ieee80211_hdr_4addr *hdr)
{
struct ieee80211softmac_device *softmac = ieee80211_priv(mac->netdev);
u16 ftype = WLAN_FC_GET_TYPE(le16_to_cpu(hdr->frame_ctl));
- u8 rate, zd_rate;
+ u8 rate;
int is_mgt = (ftype == IEEE80211_FTYPE_MGMT) != 0;
int is_multicast = is_multicast_ether_addr(hdr->addr1);
int short_preamble = ieee80211softmac_short_preamble_ok(softmac,
is_multicast, is_mgt);
- int flags = 0;
- /* FIXME: 802.11a? */
rate = ieee80211softmac_suggest_txrate(softmac, is_multicast, is_mgt);
+ cs->modulation = rate_to_zd_rate(rate);
- if (short_preamble)
- flags |= R2M_SHORT_PREAMBLE;
-
- zd_rate = rate_to_zd_rate(rate);
- cs->modulation = zd_rate_to_modulation(zd_rate, flags);
+ /* Set short preamble bit when appropriate */
+ if (short_preamble && ZD_MODULATION_TYPE(cs->modulation) == ZD_CCK
+ && cs->modulation != ZD_CCK_RATE_1M)
+ cs->modulation |= ZD_CCK_PREA_SHORT;
}
static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
@@ -832,7 +787,7 @@ static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
cs->control |= ZD_CS_RTS;
/* Use CTS-to-self protection if required */
- if (ZD_CS_TYPE(cs->modulation) == ZD_CS_OFDM &&
+ if (ZD_MODULATION_TYPE(cs->modulation) == ZD_OFDM &&
ieee80211softmac_protection_needed(softmac)) {
/* FIXME: avoid sending RTS *and* self-CTS, is that correct? */
cs->control &= ~ZD_CS_RTS;
@@ -893,7 +848,7 @@ static int fill_ctrlset(struct zd_mac *mac,
* - see line 53 of zdinlinef.h
*/
cs->service = 0;
- r = zd_calc_tx_length_us(&cs->service, ZD_CS_RATE(cs->modulation),
+ r = zd_calc_tx_length_us(&cs->service, ZD_RATE(cs->modulation),
le16_to_cpu(cs->tx_length));
if (r < 0)
return r;
@@ -902,7 +857,7 @@ static int fill_ctrlset(struct zd_mac *mac,
if (next_frag_len == 0) {
cs->next_frame_length = 0;
} else {
- r = zd_calc_tx_length_us(NULL, ZD_CS_RATE(cs->modulation),
+ r = zd_calc_tx_length_us(NULL, ZD_RATE(cs->modulation),
next_frag_len);
if (r < 0)
return r;
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
index 9f9344e..1b15bde 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.h
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h
@@ -40,28 +40,51 @@ struct zd_ctrlset {
#define ZD_CS_RESERVED_SIZE 25
-/* zd_crtlset field modulation */
-#define ZD_CS_RATE_MASK 0x0f
-#define ZD_CS_TYPE_MASK 0x10
-#define ZD_CS_RATE(modulation) ((modulation) & ZD_CS_RATE_MASK)
-#define ZD_CS_TYPE(modulation) ((modulation) & ZD_CS_TYPE_MASK)
-
-#define ZD_CS_CCK 0x00
-#define ZD_CS_OFDM 0x10
-
-/* These are referred to as zd_rates */
-#define ZD_CCK_RATE_1M 0x00
-#define ZD_CCK_RATE_2M 0x01
-#define ZD_CCK_RATE_5_5M 0x02
-#define ZD_CCK_RATE_11M 0x03
-/* The rates for OFDM are encoded as in the PLCP header. Use ZD_OFDM_RATE_*.
+/* The field modulation of struct zd_ctrlset controls the bit rate, the use
+ * of short or long preambles in 802.11b (CCK mode) or the use of 802.11a or
+ * 802.11g in OFDM mode.
+ *
+ * The term zd-rate is used for the combination of the modulation type flag
+ * and the "pure" rate value.
*/
-
-/* bit 5 is preamble (when in CCK mode), or a/g selection (when in OFDM mode) */
-#define ZD_CS_CCK_PREA_LONG 0x00
-#define ZD_CS_CCK_PREA_SHORT 0x20
-#define ZD_CS_OFDM_MODE_11G 0x00
-#define ZD_CS_OFDM_MODE_11A 0x20
+#define ZD_PURE_RATE_MASK 0x0f
+#define ZD_MODULATION_TYPE_MASK 0x10
+#define ZD_RATE_MASK (ZD_PURE_RATE_MASK|ZD_MODULATION_TYPE_MASK)
+#define ZD_PURE_RATE(modulation) ((modulation) & ZD_PURE_RATE_MASK)
+#define ZD_MODULATION_TYPE(modulation) ((modulation) & ZD_MODULATION_TYPE_MASK)
+#define ZD_RATE(modulation) ((modulation) & ZD_RATE_MASK)
+
+/* The two possible modulation types. Notify that 802.11b doesn't use the CCK
+ * codeing for the 1 and 2 MBit/s rate. We stay with the term here to remain
+ * consistent with uses the term at other places.
+ */
+#define ZD_CCK 0x00
+#define ZD_OFDM 0x10
+
+/* The ZD1211 firmware uses proprietary encodings of the 802.11b (CCK) rates.
+ * For OFDM the PLCP rate encodings are used. We combine these "pure" rates
+ * with the modulation type flag and call the resulting values zd-rates.
+ */
+#define ZD_CCK_RATE_1M (ZD_CCK|0x00)
+#define ZD_CCK_RATE_2M (ZD_CCK|0x01)
+#define ZD_CCK_RATE_5_5M (ZD_CCK|0x02)
+#define ZD_CCK_RATE_11M (ZD_CCK|0x03)
+#define ZD_OFDM_RATE_6M (ZD_OFDM|ZD_OFDM_PLCP_RATE_6M)
+#define ZD_OFDM_RATE_9M (ZD_OFDM|ZD_OFDM_PLCP_RATE_9M)
+#define ZD_OFDM_RATE_12M (ZD_OFDM|ZD_OFDM_PLCP_RATE_12M)
+#define ZD_OFDM_RATE_18M (ZD_OFDM|ZD_OFDM_PLCP_RATE_18M)
+#define ZD_OFDM_RATE_24M (ZD_OFDM|ZD_OFDM_PLCP_RATE_24M)
+#define ZD_OFDM_RATE_36M (ZD_OFDM|ZD_OFDM_PLCP_RATE_36M)
+#define ZD_OFDM_RATE_48M (ZD_OFDM|ZD_OFDM_PLCP_RATE_48M)
+#define ZD_OFDM_RATE_54M (ZD_OFDM|ZD_OFDM_PLCP_RATE_54M)
+
+/* The bit 5 of the zd_ctrlset modulation field controls the preamble in CCK
+ * mode or the 802.11a/802.11g selection in OFDM mode.
+ */
+#define ZD_CCK_PREA_LONG 0x00
+#define ZD_CCK_PREA_SHORT 0x20
+#define ZD_OFDM_MODE_11G 0x00
+#define ZD_OFDM_MODE_11A 0x20
/* zd_ctrlset control field */
#define ZD_CS_NEED_RANDOM_BACKOFF 0x01
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index a9c339e..e49628b 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -74,6 +74,8 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0cde, 0x001a), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0586, 0x340a), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
--
John W. Linville
linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org
^ permalink raw reply related [flat|nested] 25+ messages in thread* Please pull 'fixes-jgarzik' branch of wireless-2.6
@ 2007-08-06 20:14 John W. Linville
[not found] ` <20070806201441.GJ6442-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-08-06 20:14 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
The following changes since commit d4ac2477fad0f2680e84ec12e387ce67682c5c13:
Linus Torvalds (1):
Linux 2.6.23-rc2
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git fixes-jgarzik
John W. Linville (1):
Revert "[PATCH] bcm43xx: Fix deviation from specifications in set_baseband_attenuation"
Masakazu Mokuno (1):
remove duplicated ioctl entries in compat_ioctl.c
Michael Buesch (1):
softmac: Fix deadlock of wx_set_essid with assoc work
Michael Wu (1):
rtl8187: ensure priv->hwaddr is always valid
Ulrich Kunitz (1):
zd1211rw: fix filter for PSPOLL frames
drivers/net/wireless/bcm43xx/bcm43xx_phy.c | 2 +-
drivers/net/wireless/rtl8187_dev.c | 2 +-
drivers/net/wireless/zd1211rw/zd_mac.c | 2 +-
fs/compat_ioctl.c | 3 ---
net/ieee80211/softmac/ieee80211softmac_wx.c | 11 ++++++++---
5 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_phy.c b/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
index d779199..b37f1e3 100644
--- a/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
+++ b/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
@@ -1638,7 +1638,7 @@ void bcm43xx_phy_set_baseband_attenuation(struct bcm43xx_private *bcm,
return;
}
- if (phy->analog == 1) {
+ if (phy->analog > 1) {
value = bcm43xx_phy_read(bcm, 0x0060) & ~0x003C;
value |= (baseband_attenuation << 2) & 0x003C;
} else {
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c
index cea8589..e61c6d5 100644
--- a/drivers/net/wireless/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl8187_dev.c
@@ -466,7 +466,7 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev,
return -EOPNOTSUPP;
}
- priv->hwaddr = conf->mac_addr;
+ priv->hwaddr = conf->mac_addr ? conf->mac_addr : dev->wiphy->perm_addr;
return 0;
}
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index f6c487a..26869d1 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -822,7 +822,7 @@ static void cs_set_control(struct zd_mac *mac, struct zd_ctrlset *cs,
cs->control |= ZD_CS_MULTICAST;
/* PS-POLL */
- if (stype == IEEE80211_STYPE_PSPOLL)
+ if (ftype == IEEE80211_FTYPE_CTL && stype == IEEE80211_STYPE_PSPOLL)
cs->control |= ZD_CS_PS_POLL_FRAME;
/* Unicast data frames over the threshold should have RTS */
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index 2bc1428..a6c9078 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -3161,12 +3161,9 @@ COMPATIBLE_IOCTL(SIOCSIWSENS)
COMPATIBLE_IOCTL(SIOCGIWSENS)
COMPATIBLE_IOCTL(SIOCSIWRANGE)
COMPATIBLE_IOCTL(SIOCSIWPRIV)
-COMPATIBLE_IOCTL(SIOCGIWPRIV)
COMPATIBLE_IOCTL(SIOCSIWSTATS)
-COMPATIBLE_IOCTL(SIOCGIWSTATS)
COMPATIBLE_IOCTL(SIOCSIWAP)
COMPATIBLE_IOCTL(SIOCGIWAP)
-COMPATIBLE_IOCTL(SIOCSIWSCAN)
COMPATIBLE_IOCTL(SIOCSIWRATE)
COMPATIBLE_IOCTL(SIOCGIWRATE)
COMPATIBLE_IOCTL(SIOCSIWRTS)
diff --git a/net/ieee80211/softmac/ieee80211softmac_wx.c b/net/ieee80211/softmac/ieee80211softmac_wx.c
index f13937b..d054e92 100644
--- a/net/ieee80211/softmac/ieee80211softmac_wx.c
+++ b/net/ieee80211/softmac/ieee80211softmac_wx.c
@@ -74,8 +74,8 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
struct ieee80211softmac_auth_queue_item *authptr;
int length = 0;
+check_assoc_again:
mutex_lock(&sm->associnfo.mutex);
-
/* Check if we're already associating to this or another network
* If it's another network, cancel and start over with our new network
* If it's our network, ignore the change, we're already doing it!
@@ -98,13 +98,18 @@ ieee80211softmac_wx_set_essid(struct net_device *net_dev,
cancel_delayed_work(&authptr->work);
sm->associnfo.bssvalid = 0;
sm->associnfo.bssfixed = 0;
- flush_scheduled_work();
sm->associnfo.associating = 0;
sm->associnfo.associated = 0;
+ /* We must unlock to avoid deadlocks with the assoc workqueue
+ * on the associnfo.mutex */
+ mutex_unlock(&sm->associnfo.mutex);
+ flush_scheduled_work();
+ /* Avoid race! Check assoc status again. Maybe someone started an
+ * association while we flushed. */
+ goto check_assoc_again;
}
}
-
sm->associnfo.static_essid = 0;
sm->associnfo.assoc_wait = 0;
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 25+ messages in thread* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-18 2:19 John W. Linville
[not found] ` <20070718021953.GC26907-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-07-18 2:19 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
A few more for 2.6.23...
Thanks!
John
---
The following changes since commit 4ad1366376bfef32ec0ffa12d1faa483d6f330bd:
NeilBrown (1):
md: change bitmap_unplug and others to void functions
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Daniel Drake (1):
zd1211rw: Add ID for Siemens Gigaset USB Stick 54
Jean Tourrilhes (1):
softmac: Channel is listed twice in scan output
Masakazu Mokuno (1):
zd1211rw: Add ID for Planex GW-US54GXS
Zhu Yi (4):
ipw2100: Fix `iwpriv set_power` error
Fix ipw2200 set wrong power parameter causing firmware error
ipw2200: Fix ipw_isr() comments error on shared IRQ
Update version ipw2200 stamp to 1.2.2
drivers/net/wireless/ipw2100.c | 6 +++---
drivers/net/wireless/ipw2200.c | 18 ++++++++----------
drivers/net/wireless/zd1211rw/zd_usb.c | 2 ++
net/ieee80211/ieee80211_wx.c | 7 ++-----
4 files changed, 15 insertions(+), 18 deletions(-)
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
index 072ede7..8990585 100644
--- a/drivers/net/wireless/ipw2100.c
+++ b/drivers/net/wireless/ipw2100.c
@@ -7868,10 +7868,10 @@ static int ipw2100_wx_set_powermode(struct net_device *dev,
goto done;
}
- if ((mode < 1) || (mode > POWER_MODES))
+ if ((mode < 0) || (mode > POWER_MODES))
mode = IPW_POWER_AUTO;
- if (priv->power_mode != mode)
+ if (IPW_POWER_LEVEL(priv->power_mode) != mode)
err = ipw2100_set_power_mode(priv, mode);
done:
mutex_unlock(&priv->action_mutex);
@@ -7902,7 +7902,7 @@ static int ipw2100_wx_get_powermode(struct net_device *dev,
break;
case IPW_POWER_AUTO:
snprintf(extra, MAX_POWER_STRING,
- "Power save level: %d (Auto)", 0);
+ "Power save level: %d (Auto)", level);
break;
default:
timeout = timeout_duration[level - 1] / 1000;
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index aa32a97..61497c4 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -70,7 +70,7 @@
#define VQ
#endif
-#define IPW2200_VERSION "1.2.0" VK VD VM VP VR VQ
+#define IPW2200_VERSION "1.2.2" VK VD VM VP VR VQ
#define DRV_DESCRIPTION "Intel(R) PRO/Wireless 2200/2915 Network Driver"
#define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation"
#define DRV_VERSION IPW2200_VERSION
@@ -2506,7 +2506,7 @@ static int ipw_send_power_mode(struct ipw_priv *priv, u32 mode)
break;
}
- param = cpu_to_le32(mode);
+ param = cpu_to_le32(param);
return ipw_send_cmd_pdu(priv, IPW_CMD_POWER_MODE, sizeof(param),
¶m);
}
@@ -9568,6 +9568,7 @@ static int ipw_wx_set_power(struct net_device *dev,
priv->power_mode = IPW_POWER_ENABLED | IPW_POWER_BATTERY;
else
priv->power_mode = IPW_POWER_ENABLED | priv->power_mode;
+
err = ipw_send_power_mode(priv, IPW_POWER_LEVEL(priv->power_mode));
if (err) {
IPW_DEBUG_WX("failed setting power mode.\n");
@@ -9604,22 +9605,19 @@ static int ipw_wx_set_powermode(struct net_device *dev,
struct ipw_priv *priv = ieee80211_priv(dev);
int mode = *(int *)extra;
int err;
+
mutex_lock(&priv->mutex);
- if ((mode < 1) || (mode > IPW_POWER_LIMIT)) {
+ if ((mode < 1) || (mode > IPW_POWER_LIMIT))
mode = IPW_POWER_AC;
- priv->power_mode = mode;
- } else {
- priv->power_mode = IPW_POWER_ENABLED | mode;
- }
- if (priv->power_mode != mode) {
+ if (IPW_POWER_LEVEL(priv->power_mode) != mode) {
err = ipw_send_power_mode(priv, mode);
-
if (err) {
IPW_DEBUG_WX("failed setting power mode.\n");
mutex_unlock(&priv->mutex);
return err;
}
+ priv->power_mode = IPW_POWER_ENABLED | mode;
}
mutex_unlock(&priv->mutex);
return 0;
@@ -10555,7 +10553,7 @@ static irqreturn_t ipw_isr(int irq, void *data)
spin_lock(&priv->irq_lock);
if (!(priv->status & STATUS_INT_ENABLED)) {
- /* Shared IRQ */
+ /* IRQ is disabled */
goto none;
}
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index 28d41a2..a9c339e 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -72,6 +72,8 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x2019, 0x5303), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x129b, 0x1667), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c
index 523a137..465b73d 100644
--- a/net/ieee80211/ieee80211_wx.c
+++ b/net/ieee80211/ieee80211_wx.c
@@ -90,14 +90,11 @@ static char *ieee80211_translate_scan(struct ieee80211_device *ieee,
}
/* Add channel and frequency */
+ /* Note : userspace automatically computes channel using iwrange */
iwe.cmd = SIOCGIWFREQ;
- iwe.u.freq.m = network->channel;
- iwe.u.freq.e = 0;
- iwe.u.freq.i = 0;
- start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
-
iwe.u.freq.m = ieee80211_channel_to_freq(ieee, network->channel);
iwe.u.freq.e = 6;
+ iwe.u.freq.i = 0;
start = iwe_stream_add_event(start, stop, &iwe, IW_EV_FREQ_LEN);
/* Add encryption capability */
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 25+ messages in thread* Please pull 'upstream-jgarzik' branch of wireless-2.6
@ 2007-07-10 18:57 John W. Linville
[not found] ` <20070710185758.GH7927-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
0 siblings, 1 reply; 25+ messages in thread
From: John W. Linville @ 2007-07-10 18:57 UTC (permalink / raw)
To: jeff; +Cc: linux-wireless, netdev
The following changes since commit 71780f59e127bb281a9302d430495ca9586c14e7:
Linus Torvalds (1):
Merge branch 'for-linus' of git://git.kernel.org/.../ieee1394/linux1394-2.6
are found in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git upstream-jgarzik
Adrian Bunk (1):
drivers/net/wireless/libertas/wext.c: remove dead code
Dan Williams (1):
libertas: fix disabling WPA
Daniel Drake (4):
zd1211rw: Allow channels 1-11 for unrecognised regulatory domains
zd1211rw: Detect more AL2230S radios
zd1211rw: Add ID for Buffalo WLI-U2-KG54L
zd1211rw: Defer firmware load until first ifup
Holger Schurig (1):
libertas: fix use-after-free in rx path
Jean Tourrilhes (1):
softmac: Fix ESSID problem
Matthias Kaehlcke (1):
use list_for_each_entry() for iteration in Prism 54 driver
Michael Wu (1):
rtl8187: fix endianness issue in rtl8225 register writing
Michal Schmidt (5):
airo: disable the PCI device when unloading module
airo: delay some initialization until the netdev is up
airo: fix a race causing initialization failures
airo: simpler calling convention for enable_MAC()
airo: start with radio off
Robert P. J. Day (1):
WIRELESS: Remove clearly obsolete libertas/version.h file.
Stephen Hemminger (2):
ipw2200: rf kill switch polling power saving
ipw2100: RF kill switch timer power save
drivers/net/wireless/airo.c | 208 ++++++++++++------------
drivers/net/wireless/ipw2100.c | 11 +-
drivers/net/wireless/ipw2200.c | 5 +-
drivers/net/wireless/libertas/cmd.c | 2 +-
drivers/net/wireless/libertas/rx.c | 1 -
drivers/net/wireless/libertas/version.h | 1 -
drivers/net/wireless/libertas/wext.c | 3 -
drivers/net/wireless/prism54/isl_ioctl.c | 22 +--
drivers/net/wireless/rtl8187_rtl8225.c | 4 +-
drivers/net/wireless/zd1211rw/zd_chip.c | 88 ++---------
drivers/net/wireless/zd1211rw/zd_chip.h | 13 +-
drivers/net/wireless/zd1211rw/zd_mac.c | 59 +++++---
drivers/net/wireless/zd1211rw/zd_mac.h | 3 +-
drivers/net/wireless/zd1211rw/zd_rf.c | 3 +-
drivers/net/wireless/zd1211rw/zd_rf.h | 2 +-
drivers/net/wireless/zd1211rw/zd_rf_al2230.c | 12 +-
drivers/net/wireless/zd1211rw/zd_rf_al7230b.c | 2 +-
drivers/net/wireless/zd1211rw/zd_rf_rf2959.c | 2 +-
drivers/net/wireless/zd1211rw/zd_rf_uw2453.c | 2 +-
drivers/net/wireless/zd1211rw/zd_usb.c | 98 ++++++++---
drivers/net/wireless/zd1211rw/zd_usb.h | 3 +
net/ieee80211/softmac/ieee80211softmac_assoc.c | 5 +-
22 files changed, 280 insertions(+), 269 deletions(-)
delete mode 100644 drivers/net/wireless/libertas/version.h
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index 2d3a180..1c54908 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -52,6 +52,8 @@
#include "airo.h"
+#define DRV_NAME "airo"
+
#ifdef CONFIG_PCI
static struct pci_device_id card_ids[] = {
{ 0x14b9, 1, PCI_ANY_ID, PCI_ANY_ID, },
@@ -71,7 +73,7 @@ static int airo_pci_suspend(struct pci_dev *pdev, pm_message_t state);
static int airo_pci_resume(struct pci_dev *pdev);
static struct pci_driver airo_driver = {
- .name = "airo",
+ .name = DRV_NAME,
.id_table = card_ids,
.probe = airo_pci_probe,
.remove = __devexit_p(airo_pci_remove),
@@ -1092,7 +1094,7 @@ static int get_dec_u16( char *buffer, int *start, int limit );
static void OUT4500( struct airo_info *, u16 register, u16 value );
static unsigned short IN4500( struct airo_info *, u16 register );
static u16 setup_card(struct airo_info*, u8 *mac, int lock);
-static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock );
+static int enable_MAC(struct airo_info *ai, int lock);
static void disable_MAC(struct airo_info *ai, int lock);
static void enable_interrupts(struct airo_info*);
static void disable_interrupts(struct airo_info*);
@@ -1250,7 +1252,7 @@ static int flashputbuf(struct airo_info *ai);
static int flashrestart(struct airo_info *ai,struct net_device *dev);
#define airo_print(type, name, fmt, args...) \
- { printk(type "airo(%s): " fmt "\n", name, ##args); }
+ printk(type DRV_NAME "(%s): " fmt "\n", name, ##args)
#define airo_print_info(name, fmt, args...) \
airo_print(KERN_INFO, name, fmt, ##args)
@@ -1926,28 +1928,54 @@ static int readStatsRid(struct airo_info*ai, StatsRid *sr, int rid, int lock) {
return rc;
}
+static void try_auto_wep(struct airo_info *ai)
+{
+ if (auto_wep && !(ai->flags & FLAG_RADIO_DOWN)) {
+ ai->expires = RUN_AT(3*HZ);
+ wake_up_interruptible(&ai->thr_wait);
+ }
+}
+
static int airo_open(struct net_device *dev) {
- struct airo_info *info = dev->priv;
- Resp rsp;
+ struct airo_info *ai = dev->priv;
+ int rc = 0;
- if (test_bit(FLAG_FLASHING, &info->flags))
+ if (test_bit(FLAG_FLASHING, &ai->flags))
return -EIO;
/* Make sure the card is configured.
* Wireless Extensions may postpone config changes until the card
* is open (to pipeline changes and speed-up card setup). If
* those changes are not yet commited, do it now - Jean II */
- if (test_bit (FLAG_COMMIT, &info->flags)) {
- disable_MAC(info, 1);
- writeConfigRid(info, 1);
+ if (test_bit(FLAG_COMMIT, &ai->flags)) {
+ disable_MAC(ai, 1);
+ writeConfigRid(ai, 1);
}
- if (info->wifidev != dev) {
+ if (ai->wifidev != dev) {
+ clear_bit(JOB_DIE, &ai->jobs);
+ ai->airo_thread_task = kthread_run(airo_thread, dev, dev->name);
+ if (IS_ERR(ai->airo_thread_task))
+ return (int)PTR_ERR(ai->airo_thread_task);
+
+ rc = request_irq(dev->irq, airo_interrupt, IRQF_SHARED,
+ dev->name, dev);
+ if (rc) {
+ airo_print_err(dev->name,
+ "register interrupt %d failed, rc %d",
+ dev->irq, rc);
+ set_bit(JOB_DIE, &ai->jobs);
+ kthread_stop(ai->airo_thread_task);
+ return rc;
+ }
+
/* Power on the MAC controller (which may have been disabled) */
- clear_bit(FLAG_RADIO_DOWN, &info->flags);
- enable_interrupts(info);
+ clear_bit(FLAG_RADIO_DOWN, &ai->flags);
+ enable_interrupts(ai);
+
+ try_auto_wep(ai);
}
- enable_MAC(info, &rsp, 1);
+ enable_MAC(ai, 1);
netif_start_queue(dev);
return 0;
@@ -2338,14 +2366,13 @@ static int airo_set_mac_address(struct net_device *dev, void *p)
{
struct airo_info *ai = dev->priv;
struct sockaddr *addr = p;
- Resp rsp;
readConfigRid(ai, 1);
memcpy (ai->config.macAddr, addr->sa_data, dev->addr_len);
set_bit (FLAG_COMMIT, &ai->flags);
disable_MAC(ai, 1);
writeConfigRid (ai, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
memcpy (ai->dev->dev_addr, addr->sa_data, dev->addr_len);
if (ai->wifidev)
memcpy (ai->wifidev->dev_addr, addr->sa_data, dev->addr_len);
@@ -2392,6 +2419,11 @@ static int airo_close(struct net_device *dev) {
disable_MAC(ai, 1);
#endif
disable_interrupts( ai );
+
+ free_irq(dev->irq, dev);
+
+ set_bit(JOB_DIE, &ai->jobs);
+ kthread_stop(ai->airo_thread_task);
}
return 0;
}
@@ -2403,7 +2435,6 @@ void stop_airo_card( struct net_device *dev, int freeres )
set_bit(FLAG_RADIO_DOWN, &ai->flags);
disable_MAC(ai, 1);
disable_interrupts(ai);
- free_irq( dev->irq, dev );
takedown_proc_entry( dev, ai );
if (test_bit(FLAG_REGISTERED, &ai->flags)) {
unregister_netdev( dev );
@@ -2414,9 +2445,6 @@ void stop_airo_card( struct net_device *dev, int freeres )
}
clear_bit(FLAG_REGISTERED, &ai->flags);
}
- set_bit(JOB_DIE, &ai->jobs);
- kthread_stop(ai->airo_thread_task);
-
/*
* Clean out tx queue
*/
@@ -2554,8 +2582,7 @@ static int mpi_init_descriptors (struct airo_info *ai)
* 2) Map PCI memory for issueing commands.
* 3) Allocate memory (shared) to send and receive ethernet frames.
*/
-static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci,
- const char *name)
+static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci)
{
unsigned long mem_start, mem_len, aux_start, aux_len;
int rc = -1;
@@ -2569,35 +2596,35 @@ static int mpi_map_card(struct airo_info *ai, struct pci_dev *pci,
aux_start = pci_resource_start(pci, 2);
aux_len = AUXMEMSIZE;
- if (!request_mem_region(mem_start, mem_len, name)) {
- airo_print_err(ai->dev->name, "Couldn't get region %x[%x] for %s",
- (int)mem_start, (int)mem_len, name);
+ if (!request_mem_region(mem_start, mem_len, DRV_NAME)) {
+ airo_print_err("", "Couldn't get region %x[%x]",
+ (int)mem_start, (int)mem_len);
goto out;
}
- if (!request_mem_region(aux_start, aux_len, name)) {
- airo_print_err(ai->dev->name, "Couldn't get region %x[%x] for %s",
- (int)aux_start, (int)aux_len, name);
+ if (!request_mem_region(aux_start, aux_len, DRV_NAME)) {
+ airo_print_err("", "Couldn't get region %x[%x]",
+ (int)aux_start, (int)aux_len);
goto free_region1;
}
ai->pcimem = ioremap(mem_start, mem_len);
if (!ai->pcimem) {
- airo_print_err(ai->dev->name, "Couldn't map region %x[%x] for %s",
- (int)mem_start, (int)mem_len, name);
+ airo_print_err("", "Couldn't map region %x[%x]",
+ (int)mem_start, (int)mem_len);
goto free_region2;
}
ai->pciaux = ioremap(aux_start, aux_len);
if (!ai->pciaux) {
- airo_print_err(ai->dev->name, "Couldn't map region %x[%x] for %s",
- (int)aux_start, (int)aux_len, name);
+ airo_print_err("", "Couldn't map region %x[%x]",
+ (int)aux_start, (int)aux_len);
goto free_memmap;
}
/* Reserve PKTSIZE for each fid and 2K for the Rids */
ai->shared = pci_alloc_consistent(pci, PCI_SHARED_LEN, &ai->shared_dma);
if (!ai->shared) {
- airo_print_err(ai->dev->name, "Couldn't alloc_consistent %d",
- PCI_SHARED_LEN);
+ airo_print_err("", "Couldn't alloc_consistent %d",
+ PCI_SHARED_LEN);
goto free_auxmap;
}
@@ -2742,7 +2769,7 @@ static int airo_networks_allocate(struct airo_info *ai)
kzalloc(AIRO_MAX_NETWORK_COUNT * sizeof(BSSListElement),
GFP_KERNEL);
if (!ai->networks) {
- airo_print_warn(ai->dev->name, "Out of memory allocating beacons");
+ airo_print_warn("", "Out of memory allocating beacons");
return -ENOMEM;
}
@@ -2770,7 +2797,6 @@ static int airo_test_wpa_capable(struct airo_info *ai)
{
int status;
CapabilityRid cap_rid;
- const char *name = ai->dev->name;
status = readCapabilityRid(ai, &cap_rid, 1);
if (status != SUCCESS) return 0;
@@ -2778,12 +2804,12 @@ static int airo_test_wpa_capable(struct airo_info *ai)
/* Only firmware versions 5.30.17 or better can do WPA */
if ((cap_rid.softVer > 0x530)
|| ((cap_rid.softVer == 0x530) && (cap_rid.softSubVer >= 17))) {
- airo_print_info(name, "WPA is supported.");
+ airo_print_info("", "WPA is supported.");
return 1;
}
/* No WPA support */
- airo_print_info(name, "WPA unsupported (only firmware versions 5.30.17"
+ airo_print_info("", "WPA unsupported (only firmware versions 5.30.17"
" and greater support WPA. Detected %s)", cap_rid.prodVer);
return 0;
}
@@ -2797,23 +2823,19 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
int i, rc;
/* Create the network device object. */
- dev = alloc_etherdev(sizeof(*ai));
- if (!dev) {
+ dev = alloc_netdev(sizeof(*ai), "", ether_setup);
+ if (!dev) {
airo_print_err("", "Couldn't alloc_etherdev");
return NULL;
- }
- if (dev_alloc_name(dev, dev->name) < 0) {
- airo_print_err("", "Couldn't get name!");
- goto err_out_free;
}
ai = dev->priv;
ai->wifidev = NULL;
- ai->flags = 0;
+ ai->flags = 1 << FLAG_RADIO_DOWN;
ai->jobs = 0;
ai->dev = dev;
if (pci && (pci->device == 0x5000 || pci->device == 0xa504)) {
- airo_print_dbg(dev->name, "Found an MPI350 card");
+ airo_print_dbg("", "Found an MPI350 card");
set_bit(FLAG_MPI, &ai->flags);
}
spin_lock_init(&ai->aux_lock);
@@ -2821,14 +2843,11 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
ai->config.len = 0;
ai->pci = pci;
init_waitqueue_head (&ai->thr_wait);
- ai->airo_thread_task = kthread_run(airo_thread, dev, dev->name);
- if (IS_ERR(ai->airo_thread_task))
- goto err_out_free;
ai->tfm = NULL;
add_airo_dev(ai);
if (airo_networks_allocate (ai))
- goto err_out_thr;
+ goto err_out_free;
airo_networks_initialize (ai);
/* The Airo-specific entries in the device structure. */
@@ -2851,27 +2870,22 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
dev->base_addr = port;
SET_NETDEV_DEV(dev, dmdev);
+ SET_MODULE_OWNER(dev);
reset_card (dev, 1);
msleep(400);
- rc = request_irq( dev->irq, airo_interrupt, IRQF_SHARED, dev->name, dev );
- if (rc) {
- airo_print_err(dev->name, "register interrupt %d failed, rc %d",
- irq, rc);
- goto err_out_nets;
- }
if (!is_pcmcia) {
- if (!request_region( dev->base_addr, 64, dev->name )) {
+ if (!request_region(dev->base_addr, 64, DRV_NAME)) {
rc = -EBUSY;
airo_print_err(dev->name, "Couldn't request region");
- goto err_out_irq;
+ goto err_out_nets;
}
}
if (test_bit(FLAG_MPI,&ai->flags)) {
- if (mpi_map_card(ai, pci, dev->name)) {
- airo_print_err(dev->name, "Could not map memory");
+ if (mpi_map_card(ai, pci)) {
+ airo_print_err("", "Could not map memory");
goto err_out_res;
}
}
@@ -2899,6 +2913,7 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
ai->bssListRidLen = sizeof(BSSListRid) - sizeof(BSSListRidExtra);
}
+ strcpy(dev->name, "eth%d");
rc = register_netdev(dev);
if (rc) {
airo_print_err(dev->name, "Couldn't register_netdev");
@@ -2921,8 +2936,6 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
if (setup_proc_entry(dev, dev->priv) < 0)
goto err_out_wifi;
- netif_start_queue(dev);
- SET_MODULE_OWNER(dev);
return dev;
err_out_wifi:
@@ -2940,14 +2953,9 @@ err_out_map:
err_out_res:
if (!is_pcmcia)
release_region( dev->base_addr, 64 );
-err_out_irq:
- free_irq(dev->irq, dev);
err_out_nets:
airo_networks_free(ai);
-err_out_thr:
del_airo_dev(ai);
- set_bit(JOB_DIE, &ai->jobs);
- kthread_stop(ai->airo_thread_task);
err_out_free:
free_netdev(dev);
return NULL;
@@ -3529,9 +3537,11 @@ static u16 IN4500( struct airo_info *ai, u16 reg ) {
return rc;
}
-static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock ) {
+static int enable_MAC(struct airo_info *ai, int lock)
+{
int rc;
- Cmd cmd;
+ Cmd cmd;
+ Resp rsp;
/* FLAG_RADIO_OFF : Radio disabled via /proc or Wireless Extensions
* FLAG_RADIO_DOWN : Radio disabled via "ifconfig ethX down"
@@ -3547,7 +3557,7 @@ static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock ) {
if (!test_bit(FLAG_ENABLED, &ai->flags)) {
memset(&cmd, 0, sizeof(cmd));
cmd.cmd = MAC_ENABLE;
- rc = issuecommand(ai, &cmd, rsp);
+ rc = issuecommand(ai, &cmd, &rsp);
if (rc == SUCCESS)
set_bit(FLAG_ENABLED, &ai->flags);
} else
@@ -3557,8 +3567,12 @@ static int enable_MAC( struct airo_info *ai, Resp *rsp, int lock ) {
up(&ai->sem);
if (rc)
- airo_print_err(ai->dev->name, "%s: Cannot enable MAC, err=%d",
- __FUNCTION__, rc);
+ airo_print_err(ai->dev->name, "Cannot enable MAC");
+ else if ((rsp.status & 0xFF00) != 0) {
+ airo_print_err(ai->dev->name, "Bad MAC enable reason=%x, "
+ "rid=%x, offset=%d", rsp.rsp0, rsp.rsp1, rsp.rsp2);
+ rc = ERROR;
+ }
return rc;
}
@@ -3902,12 +3916,9 @@ static u16 setup_card(struct airo_info *ai, u8 *mac, int lock)
if ( status != SUCCESS ) return ERROR;
}
- status = enable_MAC(ai, &rsp, lock);
- if ( status != SUCCESS || (rsp.status & 0xFF00) != 0) {
- airo_print_err(ai->dev->name, "Bad MAC enable reason = %x, rid = %x,"
- " offset = %d", rsp.rsp0, rsp.rsp1, rsp.rsp2 );
+ status = enable_MAC(ai, lock);
+ if (status != SUCCESS)
return ERROR;
- }
/* Grab the initial wep key, we gotta save it for auto_wep */
rc = readWepKeyRid(ai, &wkr, 1, lock);
@@ -3919,10 +3930,7 @@ static u16 setup_card(struct airo_info *ai, u8 *mac, int lock)
rc = readWepKeyRid(ai, &wkr, 0, lock);
} while(lastindex != wkr.kindex);
- if (auto_wep) {
- ai->expires = RUN_AT(3*HZ);
- wake_up_interruptible(&ai->thr_wait);
- }
+ try_auto_wep(ai);
return SUCCESS;
}
@@ -4004,7 +4012,7 @@ static int bap_setup(struct airo_info *ai, u16 rid, u16 offset, int whichbap )
}
if ( !(max_tries--) ) {
airo_print_err(ai->dev->name,
- "airo: BAP setup error too many retries\n");
+ "BAP setup error too many retries\n");
return ERROR;
}
// -- PC4500 missed it, try again
@@ -5152,7 +5160,6 @@ static void proc_SSID_on_close( struct inode *inode, struct file *file ) {
struct net_device *dev = dp->data;
struct airo_info *ai = dev->priv;
SsidRid SSID_rid;
- Resp rsp;
int i;
int offset = 0;
@@ -5177,7 +5184,7 @@ static void proc_SSID_on_close( struct inode *inode, struct file *file ) {
SSID_rid.len = sizeof(SSID_rid);
disable_MAC(ai, 1);
writeSsidRid(ai, &SSID_rid, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
}
static inline u8 hexVal(char c) {
@@ -5193,7 +5200,6 @@ static void proc_APList_on_close( struct inode *inode, struct file *file ) {
struct net_device *dev = dp->data;
struct airo_info *ai = dev->priv;
APListRid APList_rid;
- Resp rsp;
int i;
if ( !data->writelen ) return;
@@ -5218,18 +5224,17 @@ static void proc_APList_on_close( struct inode *inode, struct file *file ) {
}
disable_MAC(ai, 1);
writeAPListRid(ai, &APList_rid, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
}
/* This function wraps PC4500_writerid with a MAC disable */
static int do_writerid( struct airo_info *ai, u16 rid, const void *rid_data,
int len, int dummy ) {
int rc;
- Resp rsp;
disable_MAC(ai, 1);
rc = PC4500_writerid(ai, rid, rid_data, len, 1);
- enable_MAC(ai, &rsp, 1);
+ enable_MAC(ai, 1);
return rc;
}
@@ -5260,7 +5265,6 @@ static int set_wep_key(struct airo_info *ai, u16 index,
const char *key, u16 keylen, int perm, int lock ) {
static const unsigned char macaddr[ETH_ALEN] = { 0x01, 0, 0, 0, 0, 0 };
WepKeyRid wkr;
- Resp rsp;
memset(&wkr, 0, sizeof(wkr));
if (keylen == 0) {
@@ -5280,7 +5284,7 @@ static int set_wep_key(struct airo_info *ai, u16 index,
if (perm) disable_MAC(ai, lock);
writeWepKeyRid(ai, &wkr, perm, lock);
- if (perm) enable_MAC(ai, &rsp, lock);
+ if (perm) enable_MAC(ai, lock);
return 0;
}
@@ -5548,7 +5552,6 @@ static int proc_close( struct inode *inode, struct file *file )
changed. */
static void timer_func( struct net_device *dev ) {
struct airo_info *apriv = dev->priv;
- Resp rsp;
/* We don't have a link so try changing the authtype */
readConfigRid(apriv, 0);
@@ -5575,7 +5578,7 @@ static void timer_func( struct net_device *dev ) {
}
set_bit (FLAG_COMMIT, &apriv->flags);
writeConfigRid(apriv, 0);
- enable_MAC(apriv, &rsp, 0);
+ enable_MAC(apriv, 0);
up(&apriv->sem);
/* Schedule check to see if the change worked */
@@ -5597,8 +5600,10 @@ static int __devinit airo_pci_probe(struct pci_dev *pdev,
dev = _init_airo_card(pdev->irq, pdev->resource[0].start, 0, pdev, &pdev->dev);
else
dev = _init_airo_card(pdev->irq, pdev->resource[2].start, 0, pdev, &pdev->dev);
- if (!dev)
+ if (!dev) {
+ pci_disable_device(pdev);
return -ENODEV;
+ }
pci_set_drvdata(pdev, dev);
return 0;
@@ -5610,6 +5615,8 @@ static void __devexit airo_pci_remove(struct pci_dev *pdev)
airo_print_info(dev->name, "Unregistering...");
stop_airo_card(dev, 1);
+ pci_disable_device(pdev);
+ pci_set_drvdata(pdev, NULL);
}
static int airo_pci_suspend(struct pci_dev *pdev, pm_message_t state)
@@ -5646,7 +5653,6 @@ static int airo_pci_resume(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
struct airo_info *ai = dev->priv;
- Resp rsp;
pci_power_t prev_state = pdev->current_state;
pci_set_power_state(pdev, PCI_D0);
@@ -5679,7 +5685,7 @@ static int airo_pci_resume(struct pci_dev *pdev)
ai->APList = NULL;
}
writeConfigRid(ai, 0);
- enable_MAC(ai, &rsp, 0);
+ enable_MAC(ai, 0);
ai->power = PMSG_ON;
netif_device_attach(dev);
netif_wake_queue(dev);
@@ -5903,7 +5909,6 @@ static int airo_set_essid(struct net_device *dev,
char *extra)
{
struct airo_info *local = dev->priv;
- Resp rsp;
SsidRid SSID_rid; /* SSIDs */
/* Reload the list of current SSID */
@@ -5935,7 +5940,7 @@ static int airo_set_essid(struct net_device *dev,
/* Write it to the card */
disable_MAC(local, 1);
writeSsidRid(local, &SSID_rid, 1);
- enable_MAC(local, &rsp, 1);
+ enable_MAC(local, 1);
return 0;
}
@@ -6000,7 +6005,7 @@ static int airo_set_wap(struct net_device *dev,
memcpy(APList_rid.ap[0], awrq->sa_data, ETH_ALEN);
disable_MAC(local, 1);
writeAPListRid(local, &APList_rid, 1);
- enable_MAC(local, &rsp, 1);
+ enable_MAC(local, 1);
}
return 0;
}
@@ -7454,7 +7459,6 @@ static int airo_config_commit(struct net_device *dev,
char *extra) /* NULL */
{
struct airo_info *local = dev->priv;
- Resp rsp;
if (!test_bit (FLAG_COMMIT, &local->flags))
return 0;
@@ -7479,7 +7483,7 @@ static int airo_config_commit(struct net_device *dev,
if (down_interruptible(&local->sem))
return -ERESTARTSYS;
writeConfigRid(local, 0);
- enable_MAC(local, &rsp, 0);
+ enable_MAC(local, 0);
if (test_bit (FLAG_RESET, &local->flags))
airo_set_promisc(local);
else
@@ -7746,7 +7750,6 @@ static int readrids(struct net_device *dev, aironet_ioctl *comp) {
unsigned char *iobuf;
int len;
struct airo_info *ai = dev->priv;
- Resp rsp;
if (test_bit(FLAG_FLASHING, &ai->flags))
return -EIO;
@@ -7758,7 +7761,7 @@ static int readrids(struct net_device *dev, aironet_ioctl *comp) {
if (test_bit(FLAG_COMMIT, &ai->flags)) {
disable_MAC (ai, 1);
writeConfigRid (ai, 1);
- enable_MAC (ai, &rsp, 1);
+ enable_MAC(ai, 1);
}
break;
case AIROGSLIST: ridcode = RID_SSID; break;
@@ -7815,7 +7818,6 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
struct airo_info *ai = dev->priv;
int ridcode;
int enabled;
- Resp rsp;
static int (* writer)(struct airo_info *, u16 rid, const void *, int, int);
unsigned char *iobuf;
@@ -7849,7 +7851,7 @@ static int writerids(struct net_device *dev, aironet_ioctl *comp) {
* same with MAC off
*/
case AIROPMACON:
- if (enable_MAC(ai, &rsp, 1) != 0)
+ if (enable_MAC(ai, 1) != 0)
return -EIO;
return 0;
diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
index d51daf8..072ede7 100644
--- a/drivers/net/wireless/ipw2100.c
+++ b/drivers/net/wireless/ipw2100.c
@@ -1768,7 +1768,8 @@ static int ipw2100_up(struct ipw2100_priv *priv, int deferred)
if (priv->stop_rf_kill) {
priv->stop_rf_kill = 0;
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies(HZ));
}
deferred = 1;
@@ -2098,7 +2099,7 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
/* Make sure the RF Kill check timer is running */
priv->stop_rf_kill = 0;
cancel_delayed_work(&priv->rf_kill);
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
}
static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
@@ -4233,7 +4234,8 @@ static int ipw_radio_kill_sw(struct ipw2100_priv *priv, int disable_radio)
/* Make sure the RF_KILL check timer is running */
priv->stop_rf_kill = 0;
cancel_delayed_work(&priv->rf_kill);
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies(HZ));
} else
schedule_reset(priv);
}
@@ -5969,7 +5971,8 @@ static void ipw2100_rf_kill(struct work_struct *work)
if (rf_kill_active(priv)) {
IPW_DEBUG_RF_KILL("RF Kill active, rescheduling GPIO check\n");
if (!priv->stop_rf_kill)
- queue_delayed_work(priv->workqueue, &priv->rf_kill, HZ);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill,
+ round_jiffies(HZ));
goto exit_unlock;
}
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index 7cb2052..aa32a97 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -1751,7 +1751,7 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio)
/* Make sure the RF_KILL check timer is running */
cancel_delayed_work(&priv->rf_kill);
queue_delayed_work(priv->workqueue, &priv->rf_kill,
- 2 * HZ);
+ round_jiffies(2 * HZ));
} else
queue_work(priv->workqueue, &priv->up);
}
@@ -4690,7 +4690,8 @@ static void ipw_rx_notification(struct ipw_priv *priv,
else if (priv->config & CFG_BACKGROUND_SCAN
&& priv->status & STATUS_ASSOCIATED)
queue_delayed_work(priv->workqueue,
- &priv->request_scan, HZ);
+ &priv->request_scan,
+ round_jiffies(HZ));
/* Send an empty event to user space.
* We don't send the received data on the event because
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c
index 13f6528..4a8f5dc 100644
--- a/drivers/net/wireless/libertas/cmd.c
+++ b/drivers/net/wireless/libertas/cmd.c
@@ -240,7 +240,7 @@ static int wlan_cmd_802_11_enable_rsn(wlan_private * priv,
if (*enable)
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
else
- penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
+ penableRSN->enable = cpu_to_le16(cmd_disable_rsn);
}
lbs_deb_leave(LBS_DEB_CMD);
diff --git a/drivers/net/wireless/libertas/rx.c b/drivers/net/wireless/libertas/rx.c
index 88d9d2d..769c86f 100644
--- a/drivers/net/wireless/libertas/rx.c
+++ b/drivers/net/wireless/libertas/rx.c
@@ -439,7 +439,6 @@ static int process_rxed_802_11_packet(wlan_private * priv, struct sk_buff *skb)
ret = 0;
done:
- skb->protocol = __constant_htons(0x0019); /* ETH_P_80211_RAW */
lbs_deb_leave_args(LBS_DEB_RX, "ret %d", ret);
return ret;
}
diff --git a/drivers/net/wireless/libertas/version.h b/drivers/net/wireless/libertas/version.h
deleted file mode 100644
index 8b13789..0000000
--- a/drivers/net/wireless/libertas/version.h
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/drivers/net/wireless/libertas/wext.c b/drivers/net/wireless/libertas/wext.c
index f42b796..2fcc3bf 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -1719,9 +1719,6 @@ static int wlan_set_encodeext(struct net_device *dev,
pkey->type = KEY_TYPE_ID_TKIP;
} else if (alg == IW_ENCODE_ALG_CCMP) {
pkey->type = KEY_TYPE_ID_AES;
- } else {
- ret = -EINVAL;
- goto out;
}
/* If WPA isn't enabled yet, do that now */
diff --git a/drivers/net/wireless/prism54/isl_ioctl.c b/drivers/net/wireless/prism54/isl_ioctl.c
index 283be4a..585f599 100644
--- a/drivers/net/wireless/prism54/isl_ioctl.c
+++ b/drivers/net/wireless/prism54/isl_ioctl.c
@@ -1853,7 +1853,6 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,
islpci_private *priv = netdev_priv(ndev);
struct islpci_acl *acl = &priv->acl;
struct mac_entry *entry;
- struct list_head *ptr;
struct sockaddr *addr = (struct sockaddr *) extra;
if (addr->sa_family != ARPHRD_ETHER)
@@ -1861,11 +1860,9 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,
if (down_interruptible(&acl->sem))
return -ERESTARTSYS;
- for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) {
- entry = list_entry(ptr, struct mac_entry, _list);
-
+ list_for_each_entry(entry, &acl->mac_list, _list) {
if (memcmp(entry->addr, addr->sa_data, ETH_ALEN) == 0) {
- list_del(ptr);
+ list_del(&entry->_list);
acl->size--;
kfree(entry);
up(&acl->sem);
@@ -1883,7 +1880,6 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,
islpci_private *priv = netdev_priv(ndev);
struct islpci_acl *acl = &priv->acl;
struct mac_entry *entry;
- struct list_head *ptr;
struct sockaddr *dst = (struct sockaddr *) extra;
dwrq->length = 0;
@@ -1891,9 +1887,7 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,
if (down_interruptible(&acl->sem))
return -ERESTARTSYS;
- for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) {
- entry = list_entry(ptr, struct mac_entry, _list);
-
+ list_for_each_entry(entry, &acl->mac_list, _list) {
memcpy(dst->sa_data, entry->addr, ETH_ALEN);
dst->sa_family = ARPHRD_ETHER;
dwrq->length++;
@@ -1960,7 +1954,6 @@ prism54_get_policy(struct net_device *ndev, struct iw_request_info *info,
static int
prism54_mac_accept(struct islpci_acl *acl, char *mac)
{
- struct list_head *ptr;
struct mac_entry *entry;
int res = 0;
@@ -1972,8 +1965,7 @@ prism54_mac_accept(struct islpci_acl *acl, char *mac)
return 1;
}
- for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) {
- entry = list_entry(ptr, struct mac_entry, _list);
+ list_for_each_entry(entry, &acl->mac_list, _list) {
if (memcmp(entry->addr, mac, ETH_ALEN) == 0) {
res = 1;
break;
@@ -2216,11 +2208,9 @@ prism54_wpa_bss_ie_init(islpci_private *priv)
void
prism54_wpa_bss_ie_clean(islpci_private *priv)
{
- struct list_head *ptr, *n;
+ struct islpci_bss_wpa_ie *bss, *n;
- list_for_each_safe(ptr, n, &priv->bss_wpa_list) {
- struct islpci_bss_wpa_ie *bss;
- bss = list_entry(ptr, struct islpci_bss_wpa_ie, list);
+ list_for_each_entry_safe(bss, n, &priv->bss_wpa_list, list) {
kfree(bss);
}
}
diff --git a/drivers/net/wireless/rtl8187_rtl8225.c b/drivers/net/wireless/rtl8187_rtl8225.c
index e25a09f..efc4120 100644
--- a/drivers/net/wireless/rtl8187_rtl8225.c
+++ b/drivers/net/wireless/rtl8187_rtl8225.c
@@ -67,7 +67,7 @@ static void rtl8225_write_bitbang(struct ieee80211_hw *dev, u8 addr, u16 data)
msleep(2);
}
-static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, u16 data)
+static void rtl8225_write_8051(struct ieee80211_hw *dev, u8 addr, __le16 data)
{
struct rtl8187_priv *priv = dev->priv;
u16 reg80, reg82, reg84;
@@ -106,7 +106,7 @@ void rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data)
struct rtl8187_priv *priv = dev->priv;
if (priv->asic_rev)
- rtl8225_write_8051(dev, addr, data);
+ rtl8225_write_8051(dev, addr, cpu_to_le16(data));
else
rtl8225_write_bitbang(dev, addr, data);
}
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.c b/drivers/net/wireless/zd1211rw/zd_chip.c
index 5b624bf..c39f198 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.c
+++ b/drivers/net/wireless/zd1211rw/zd_chip.c
@@ -49,8 +49,9 @@ void zd_chip_clear(struct zd_chip *chip)
ZD_MEMCLEAR(chip, sizeof(*chip));
}
-static int scnprint_mac_oui(const u8 *addr, char *buffer, size_t size)
+static int scnprint_mac_oui(struct zd_chip *chip, char *buffer, size_t size)
{
+ u8 *addr = zd_usb_to_netdev(&chip->usb)->dev_addr;
return scnprintf(buffer, size, "%02x-%02x-%02x",
addr[0], addr[1], addr[2]);
}
@@ -61,10 +62,10 @@ static int scnprint_id(struct zd_chip *chip, char *buffer, size_t size)
int i = 0;
i = scnprintf(buffer, size, "zd1211%s chip ",
- chip->is_zd1211b ? "b" : "");
+ zd_chip_is_zd1211b(chip) ? "b" : "");
i += zd_usb_scnprint_id(&chip->usb, buffer+i, size-i);
i += scnprintf(buffer+i, size-i, " ");
- i += scnprint_mac_oui(chip->e2p_mac, buffer+i, size-i);
+ i += scnprint_mac_oui(chip, buffer+i, size-i);
i += scnprintf(buffer+i, size-i, " ");
i += zd_rf_scnprint_id(&chip->rf, buffer+i, size-i);
i += scnprintf(buffer+i, size-i, " pa%1x %c%c%c%c%c", chip->pa_type,
@@ -366,64 +367,9 @@ error:
return r;
}
-static int _read_mac_addr(struct zd_chip *chip, u8 *mac_addr,
- const zd_addr_t *addr)
-{
- int r;
- u32 parts[2];
-
- r = zd_ioread32v_locked(chip, parts, (const zd_addr_t *)addr, 2);
- if (r) {
- dev_dbg_f(zd_chip_dev(chip),
- "error: couldn't read e2p macs. Error number %d\n", r);
- return r;
- }
-
- mac_addr[0] = parts[0];
- mac_addr[1] = parts[0] >> 8;
- mac_addr[2] = parts[0] >> 16;
- mac_addr[3] = parts[0] >> 24;
- mac_addr[4] = parts[1];
- mac_addr[5] = parts[1] >> 8;
-
- return 0;
-}
-
-static int read_e2p_mac_addr(struct zd_chip *chip)
-{
- static const zd_addr_t addr[2] = { E2P_MAC_ADDR_P1, E2P_MAC_ADDR_P2 };
-
- ZD_ASSERT(mutex_is_locked(&chip->mutex));
- return _read_mac_addr(chip, chip->e2p_mac, (const zd_addr_t *)addr);
-}
-
/* MAC address: if custom mac addresses are to to be used CR_MAC_ADDR_P1 and
* CR_MAC_ADDR_P2 must be overwritten
*/
-void zd_get_e2p_mac_addr(struct zd_chip *chip, u8 *mac_addr)
-{
- mutex_lock(&chip->mutex);
- memcpy(mac_addr, chip->e2p_mac, ETH_ALEN);
- mutex_unlock(&chip->mutex);
-}
-
-static int read_mac_addr(struct zd_chip *chip, u8 *mac_addr)
-{
- static const zd_addr_t addr[2] = { CR_MAC_ADDR_P1, CR_MAC_ADDR_P2 };
- return _read_mac_addr(chip, mac_addr, (const zd_addr_t *)addr);
-}
-
-int zd_read_mac_addr(struct zd_chip *chip, u8 *mac_addr)
-{
- int r;
-
- dev_dbg_f(zd_chip_dev(chip), "\n");
- mutex_lock(&chip->mutex);
- r = read_mac_addr(chip, mac_addr);
- mutex_unlock(&chip->mutex);
- return r;
-}
-
int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
{
int r;
@@ -444,12 +390,6 @@ int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr)
mutex_lock(&chip->mutex);
r = zd_iowrite32a_locked(chip, reqs, ARRAY_SIZE(reqs));
-#ifdef DEBUG
- {
- u8 tmp[ETH_ALEN];
- read_mac_addr(chip, tmp);
- }
-#endif /* DEBUG */
mutex_unlock(&chip->mutex);
return r;
}
@@ -809,7 +749,7 @@ out:
static int hw_reset_phy(struct zd_chip *chip)
{
- return chip->is_zd1211b ? zd1211b_hw_reset_phy(chip) :
+ return zd_chip_is_zd1211b(chip) ? zd1211b_hw_reset_phy(chip) :
zd1211_hw_reset_phy(chip);
}
@@ -874,7 +814,7 @@ static int hw_init_hmac(struct zd_chip *chip)
if (r)
return r;
- return chip->is_zd1211b ?
+ return zd_chip_is_zd1211b(chip) ?
zd1211b_hw_init_hmac(chip) : zd1211_hw_init_hmac(chip);
}
@@ -1136,8 +1076,15 @@ static int read_fw_regs_offset(struct zd_chip *chip)
return 0;
}
+/* Read mac address using pre-firmware interface */
+int zd_chip_read_mac_addr_fw(struct zd_chip *chip, u8 *addr)
+{
+ dev_dbg_f(zd_chip_dev(chip), "\n");
+ return zd_usb_read_fw(&chip->usb, E2P_MAC_ADDR_P1, addr,
+ ETH_ALEN);
+}
-int zd_chip_init_hw(struct zd_chip *chip, u8 device_type)
+int zd_chip_init_hw(struct zd_chip *chip)
{
int r;
u8 rf_type;
@@ -1145,7 +1092,6 @@ int zd_chip_init_hw(struct zd_chip *chip, u8 device_type)
dev_dbg_f(zd_chip_dev(chip), "\n");
mutex_lock(&chip->mutex);
- chip->is_zd1211b = (device_type == DEVICE_ZD1211B) != 0;
#ifdef DEBUG
r = test_init(chip);
@@ -1201,10 +1147,6 @@ int zd_chip_init_hw(struct zd_chip *chip, u8 device_type)
goto out;
#endif /* DEBUG */
- r = read_e2p_mac_addr(chip);
- if (r)
- goto out;
-
r = read_cal_int_tables(chip);
if (r)
goto out;
@@ -1259,7 +1201,7 @@ static int update_channel_integration_and_calibration(struct zd_chip *chip,
r = update_pwr_int(chip, channel);
if (r)
return r;
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
static const struct zd_ioreq16 ioreqs[] = {
{ CR69, 0x28 },
{},
diff --git a/drivers/net/wireless/zd1211rw/zd_chip.h b/drivers/net/wireless/zd1211rw/zd_chip.h
index 79d0288..f469857 100644
--- a/drivers/net/wireless/zd1211rw/zd_chip.h
+++ b/drivers/net/wireless/zd1211rw/zd_chip.h
@@ -704,7 +704,6 @@ struct zd_chip {
struct mutex mutex;
/* Base address of FW_REG_ registers */
zd_addr_t fw_regs_base;
- u8 e2p_mac[ETH_ALEN];
/* EepSetPoint in the vendor driver */
u8 pwr_cal_values[E2P_CHANNEL_COUNT];
/* integration values in the vendor driver */
@@ -715,7 +714,7 @@ struct zd_chip {
unsigned int pa_type:4,
patch_cck_gain:1, patch_cr157:1, patch_6m_band_edge:1,
new_phy_layout:1, al2230s_bit:1,
- is_zd1211b:1, supports_tx_led:1;
+ supports_tx_led:1;
};
static inline struct zd_chip *zd_usb_to_chip(struct zd_usb *usb)
@@ -734,9 +733,15 @@ void zd_chip_init(struct zd_chip *chip,
struct net_device *netdev,
struct usb_interface *intf);
void zd_chip_clear(struct zd_chip *chip);
-int zd_chip_init_hw(struct zd_chip *chip, u8 device_type);
+int zd_chip_read_mac_addr_fw(struct zd_chip *chip, u8 *addr);
+int zd_chip_init_hw(struct zd_chip *chip);
int zd_chip_reset(struct zd_chip *chip);
+static inline int zd_chip_is_zd1211b(struct zd_chip *chip)
+{
+ return chip->usb.is_zd1211b;
+}
+
static inline int zd_ioread16v_locked(struct zd_chip *chip, u16 *values,
const zd_addr_t *addresses,
unsigned int count)
@@ -825,8 +830,6 @@ static inline u8 _zd_chip_get_channel(struct zd_chip *chip)
}
u8 zd_chip_get_channel(struct zd_chip *chip);
int zd_read_regdomain(struct zd_chip *chip, u8 *regdomain);
-void zd_get_e2p_mac_addr(struct zd_chip *chip, u8 *mac_addr);
-int zd_read_mac_addr(struct zd_chip *chip, u8 *mac_addr);
int zd_write_mac_addr(struct zd_chip *chip, const u8 *mac_addr);
int zd_chip_switch_radio_on(struct zd_chip *chip);
int zd_chip_switch_radio_off(struct zd_chip *chip);
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 6753d24..f6c487a 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -86,38 +86,46 @@ out:
return r;
}
-int zd_mac_init_hw(struct zd_mac *mac, u8 device_type)
+int zd_mac_preinit_hw(struct zd_mac *mac)
{
int r;
- struct zd_chip *chip = &mac->chip;
u8 addr[ETH_ALEN];
+
+ r = zd_chip_read_mac_addr_fw(&mac->chip, addr);
+ if (r)
+ return r;
+
+ memcpy(mac->netdev->dev_addr, addr, ETH_ALEN);
+ return 0;
+}
+
+int zd_mac_init_hw(struct zd_mac *mac)
+{
+ int r;
+ struct zd_chip *chip = &mac->chip;
u8 default_regdomain;
r = zd_chip_enable_int(chip);
if (r)
goto out;
- r = zd_chip_init_hw(chip, device_type);
+ r = zd_chip_init_hw(chip);
if (r)
goto disable_int;
- zd_get_e2p_mac_addr(chip, addr);
- r = zd_write_mac_addr(chip, addr);
- if (r)
- goto disable_int;
ZD_ASSERT(!irqs_disabled());
- spin_lock_irq(&mac->lock);
- memcpy(mac->netdev->dev_addr, addr, ETH_ALEN);
- spin_unlock_irq(&mac->lock);
r = zd_read_regdomain(chip, &default_regdomain);
if (r)
goto disable_int;
if (!zd_regdomain_supported(default_regdomain)) {
- dev_dbg_f(zd_mac_dev(mac),
- "Regulatory Domain %#04x is not supported.\n",
- default_regdomain);
- r = -EINVAL;
- goto disable_int;
+ /* The vendor driver overrides the regulatory domain and
+ * allowed channel registers and unconditionally restricts
+ * available channels to 1-11 everywhere. Match their
+ * questionable behaviour only for regdomains which we don't
+ * recognise. */
+ dev_warn(zd_mac_dev(mac), "Unrecognised regulatory domain: "
+ "%#04x. Defaulting to FCC.\n", default_regdomain);
+ default_regdomain = ZD_REGDOMAIN_FCC;
}
spin_lock_irq(&mac->lock);
mac->regdomain = mac->default_regdomain = default_regdomain;
@@ -164,14 +172,25 @@ int zd_mac_open(struct net_device *netdev)
{
struct zd_mac *mac = zd_netdev_mac(netdev);
struct zd_chip *chip = &mac->chip;
+ struct zd_usb *usb = &chip->usb;
int r;
+ if (!usb->initialized) {
+ r = zd_usb_init_hw(usb);
+ if (r)
+ goto out;
+ }
+
tasklet_enable(&mac->rx_tasklet);
r = zd_chip_enable_int(chip);
if (r < 0)
goto out;
+ r = zd_write_mac_addr(chip, netdev->dev_addr);
+ if (r)
+ goto disable_int;
+
r = zd_chip_set_basic_rates(chip, CR_RATES_80211B | CR_RATES_80211G);
if (r < 0)
goto disable_int;
@@ -251,9 +270,11 @@ int zd_mac_set_mac_address(struct net_device *netdev, void *p)
dev_dbg_f(zd_mac_dev(mac),
"Setting MAC to " MAC_FMT "\n", MAC_ARG(addr->sa_data));
- r = zd_write_mac_addr(chip, addr->sa_data);
- if (r)
- return r;
+ if (netdev->flags & IFF_UP) {
+ r = zd_write_mac_addr(chip, addr->sa_data);
+ if (r)
+ return r;
+ }
spin_lock_irqsave(&mac->lock, flags);
memcpy(netdev->dev_addr, addr->sa_data, ETH_ALEN);
@@ -855,7 +876,7 @@ static int fill_ctrlset(struct zd_mac *mac,
/* ZD1211B: Computing the length difference this way, gives us
* flexibility to compute the packet length.
*/
- cs->packet_length = cpu_to_le16(mac->chip.is_zd1211b ?
+ cs->packet_length = cpu_to_le16(zd_chip_is_zd1211b(&mac->chip) ?
packet_length - frag_len : packet_length);
/*
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.h b/drivers/net/wireless/zd1211rw/zd_mac.h
index faf4c78..9f9344e 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.h
+++ b/drivers/net/wireless/zd1211rw/zd_mac.h
@@ -189,7 +189,8 @@ int zd_mac_init(struct zd_mac *mac,
struct usb_interface *intf);
void zd_mac_clear(struct zd_mac *mac);
-int zd_mac_init_hw(struct zd_mac *mac, u8 device_type);
+int zd_mac_preinit_hw(struct zd_mac *mac);
+int zd_mac_init_hw(struct zd_mac *mac);
int zd_mac_open(struct net_device *netdev);
int zd_mac_stop(struct net_device *netdev);
diff --git a/drivers/net/wireless/zd1211rw/zd_rf.c b/drivers/net/wireless/zd1211rw/zd_rf.c
index 7407409..abe5d38 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf.c
@@ -34,7 +34,7 @@ static const char * const rfs[] = {
[AL2210_RF] = "AL2210_RF",
[MAXIM_NEW_RF] = "MAXIM_NEW_RF",
[UW2453_RF] = "UW2453_RF",
- [UNKNOWN_A_RF] = "UNKNOWN_A_RF",
+ [AL2230S_RF] = "AL2230S_RF",
[RALINK_RF] = "RALINK_RF",
[INTERSIL_RF] = "INTERSIL_RF",
[RF2959_RF] = "RF2959_RF",
@@ -77,6 +77,7 @@ int zd_rf_init_hw(struct zd_rf *rf, u8 type)
r = zd_rf_init_rf2959(rf);
break;
case AL2230_RF:
+ case AL2230S_RF:
r = zd_rf_init_al2230(rf);
break;
case AL7230B_RF:
diff --git a/drivers/net/wireless/zd1211rw/zd_rf.h b/drivers/net/wireless/zd1211rw/zd_rf.h
index c6dfd82..30502f2 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf.h
+++ b/drivers/net/wireless/zd1211rw/zd_rf.h
@@ -26,7 +26,7 @@
#define AL2210_RF 0x7
#define MAXIM_NEW_RF 0x8
#define UW2453_RF 0x9
-#define UNKNOWN_A_RF 0xa
+#define AL2230S_RF 0xa
#define RALINK_RF 0xb
#define INTERSIL_RF 0xc
#define RF2959_RF 0xd
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_al2230.c b/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
index e7a4ecf..006774d 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
@@ -21,6 +21,8 @@
#include "zd_usb.h"
#include "zd_chip.h"
+#define IS_AL2230S(chip) ((chip)->al2230s_bit || (chip)->rf.type == AL2230S_RF)
+
static const u32 zd1211_al2230_table[][3] = {
RF_CHANNEL( 1) = { 0x03f790, 0x033331, 0x00000d, },
RF_CHANNEL( 2) = { 0x03f790, 0x0b3331, 0x00000d, },
@@ -176,7 +178,7 @@ static int zd1211_al2230_init_hw(struct zd_rf *rf)
if (r)
return r;
- if (chip->al2230s_bit) {
+ if (IS_AL2230S(chip)) {
r = zd_iowrite16a_locked(chip, ioreqs_init_al2230s,
ARRAY_SIZE(ioreqs_init_al2230s));
if (r)
@@ -188,7 +190,7 @@ static int zd1211_al2230_init_hw(struct zd_rf *rf)
return r;
/* improve band edge for AL2230S */
- if (chip->al2230s_bit)
+ if (IS_AL2230S(chip))
r = zd_rfwrite_locked(chip, 0x000824, RF_RV_BITS);
else
r = zd_rfwrite_locked(chip, 0x0005a4, RF_RV_BITS);
@@ -314,7 +316,7 @@ static int zd1211b_al2230_init_hw(struct zd_rf *rf)
if (r)
return r;
- if (chip->al2230s_bit) {
+ if (IS_AL2230S(chip)) {
r = zd_iowrite16a_locked(chip, ioreqs_init_al2230s,
ARRAY_SIZE(ioreqs_init_al2230s));
if (r)
@@ -328,7 +330,7 @@ static int zd1211b_al2230_init_hw(struct zd_rf *rf)
if (r)
return r;
- if (chip->al2230s_bit)
+ if (IS_AL2230S(chip))
r = zd_rfwrite_locked(chip, 0x241000, RF_RV_BITS);
else
r = zd_rfwrite_locked(chip, 0x25a000, RF_RV_BITS);
@@ -422,7 +424,7 @@ int zd_rf_init_al2230(struct zd_rf *rf)
struct zd_chip *chip = zd_rf_to_chip(rf);
rf->switch_radio_off = al2230_switch_radio_off;
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
rf->init_hw = zd1211b_al2230_init_hw;
rf->set_channel = zd1211b_al2230_set_channel;
rf->switch_radio_on = zd1211b_al2230_switch_radio_on;
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c b/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
index f4e8b6a..73d0bb2 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
@@ -473,7 +473,7 @@ int zd_rf_init_al7230b(struct zd_rf *rf)
{
struct zd_chip *chip = zd_rf_to_chip(rf);
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
rf->init_hw = zd1211b_al7230b_init_hw;
rf->switch_radio_on = zd1211b_al7230b_switch_radio_on;
rf->set_channel = zd1211b_al7230b_set_channel;
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c b/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
index 2d736bd..cc70d40 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
@@ -265,7 +265,7 @@ int zd_rf_init_rf2959(struct zd_rf *rf)
{
struct zd_chip *chip = zd_rf_to_chip(rf);
- if (chip->is_zd1211b) {
+ if (zd_chip_is_zd1211b(chip)) {
dev_err(zd_chip_dev(chip),
"RF2959 is currently not supported for ZD1211B"
" devices\n");
diff --git a/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c b/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
index 414e40d..857dcf3 100644
--- a/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
+++ b/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
@@ -486,7 +486,7 @@ static int uw2453_switch_radio_on(struct zd_rf *rf)
if (r)
return r;
- if (chip->is_zd1211b)
+ if (zd_chip_is_zd1211b(chip))
ioreqs[1].value = 0x7f;
return zd_iowrite16a_locked(chip, ioreqs, ARRAY_SIZE(ioreqs));
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
index 740a219..a1a5474 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zd1211rw/zd_usb.c
@@ -71,6 +71,7 @@ static struct usb_device_id usb_ids[] = {
{ USB_DEVICE(0x0586, 0x3412), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0586, 0x3413), .driver_info = DEVICE_ZD1211B },
{ USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B },
+ { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B },
/* "Driverless" devices that need ejecting */
{ USB_DEVICE(0x0ace, 0x2011), .driver_info = DEVICE_INSTALLER },
{ USB_DEVICE(0x0ace, 0x20ff), .driver_info = DEVICE_INSTALLER },
@@ -195,26 +196,27 @@ static u16 get_word(const void *data, u16 offset)
return le16_to_cpu(p[offset]);
}
-static char *get_fw_name(char *buffer, size_t size, u8 device_type,
+static char *get_fw_name(struct zd_usb *usb, char *buffer, size_t size,
const char* postfix)
{
scnprintf(buffer, size, "%s%s",
- device_type == DEVICE_ZD1211B ?
+ usb->is_zd1211b ?
FW_ZD1211B_PREFIX : FW_ZD1211_PREFIX,
postfix);
return buffer;
}
-static int handle_version_mismatch(struct usb_device *udev, u8 device_type,
+static int handle_version_mismatch(struct zd_usb *usb,
const struct firmware *ub_fw)
{
+ struct usb_device *udev = zd_usb_to_usbdev(usb);
const struct firmware *ur_fw = NULL;
int offset;
int r = 0;
char fw_name[128];
r = request_fw_file(&ur_fw,
- get_fw_name(fw_name, sizeof(fw_name), device_type, "ur"),
+ get_fw_name(usb, fw_name, sizeof(fw_name), "ur"),
&udev->dev);
if (r)
goto error;
@@ -237,11 +239,12 @@ error:
return r;
}
-static int upload_firmware(struct usb_device *udev, u8 device_type)
+static int upload_firmware(struct zd_usb *usb)
{
int r;
u16 fw_bcdDevice;
u16 bcdDevice;
+ struct usb_device *udev = zd_usb_to_usbdev(usb);
const struct firmware *ub_fw = NULL;
const struct firmware *uph_fw = NULL;
char fw_name[128];
@@ -249,7 +252,7 @@ static int upload_firmware(struct usb_device *udev, u8 device_type)
bcdDevice = get_bcdDevice(udev);
r = request_fw_file(&ub_fw,
- get_fw_name(fw_name, sizeof(fw_name), device_type, "ub"),
+ get_fw_name(usb, fw_name, sizeof(fw_name), "ub"),
&udev->dev);
if (r)
goto error;
@@ -264,7 +267,7 @@ static int upload_firmware(struct usb_device *udev, u8 device_type)
dev_warn(&udev->dev, "device has old bootcode, please "
"report success or failure\n");
- r = handle_version_mismatch(udev, device_type, ub_fw);
+ r = handle_version_mismatch(usb, ub_fw);
if (r)
goto error;
} else {
@@ -275,7 +278,7 @@ static int upload_firmware(struct usb_device *udev, u8 device_type)
r = request_fw_file(&uph_fw,
- get_fw_name(fw_name, sizeof(fw_name), device_type, "uphr"),
+ get_fw_name(usb, fw_name, sizeof(fw_name), "uphr"),
&udev->dev);
if (r)
goto error;
@@ -294,6 +297,30 @@ error:
return r;
}
+/* Read data from device address space using "firmware interface" which does
+ * not require firmware to be loaded. */
+int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len)
+{
+ int r;
+ struct usb_device *udev = zd_usb_to_usbdev(usb);
+
+ r = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
+ USB_REQ_FIRMWARE_READ_DATA, USB_DIR_IN | 0x40, addr, 0,
+ data, len, 5000);
+ if (r < 0) {
+ dev_err(&udev->dev,
+ "read over firmware interface failed: %d\n", r);
+ return r;
+ } else if (r != len) {
+ dev_err(&udev->dev,
+ "incomplete read over firmware interface: %d/%d\n",
+ r, len);
+ return -EIO;
+ }
+
+ return 0;
+}
+
#define urb_dev(urb) (&(urb)->dev->dev)
static inline void handle_regs_int(struct urb *urb)
@@ -920,9 +947,42 @@ static int eject_installer(struct usb_interface *intf)
return 0;
}
+int zd_usb_init_hw(struct zd_usb *usb)
+{
+ int r;
+ struct zd_mac *mac = zd_usb_to_mac(usb);
+
+ dev_dbg_f(zd_usb_dev(usb), "\n");
+
+ r = upload_firmware(usb);
+ if (r) {
+ dev_err(zd_usb_dev(usb),
+ "couldn't load firmware. Error number %d\n", r);
+ return r;
+ }
+
+ r = usb_reset_configuration(zd_usb_to_usbdev(usb));
+ if (r) {
+ dev_dbg_f(zd_usb_dev(usb),
+ "couldn't reset configuration. Error number %d\n", r);
+ return r;
+ }
+
+ r = zd_mac_init_hw(mac);
+ if (r) {
+ dev_dbg_f(zd_usb_dev(usb),
+ "couldn't initialize mac. Error number %d\n", r);
+ return r;
+ }
+
+ usb->initialized = 1;
+ return 0;
+}
+
static int probe(struct usb_interface *intf, const struct usb_device_id *id)
{
int r;
+ struct zd_usb *usb;
struct usb_device *udev = interface_to_usbdev(intf);
struct net_device *netdev = NULL;
@@ -950,26 +1010,10 @@ static int probe(struct usb_interface *intf, const struct usb_device_id *id)
goto error;
}
- r = upload_firmware(udev, id->driver_info);
- if (r) {
- dev_err(&intf->dev,
- "couldn't load firmware. Error number %d\n", r);
- goto error;
- }
+ usb = &zd_netdev_mac(netdev)->chip.usb;
+ usb->is_zd1211b = (id->driver_info == DEVICE_ZD1211B) != 0;
- r = usb_reset_configuration(udev);
- if (r) {
- dev_dbg_f(&intf->dev,
- "couldn't reset configuration. Error number %d\n", r);
- goto error;
- }
-
- /* At this point the interrupt endpoint is not generally enabled. We
- * save the USB bandwidth until the network device is opened. But
- * notify that the initialization of the MAC will require the
- * interrupts to be temporary enabled.
- */
- r = zd_mac_init_hw(zd_netdev_mac(netdev), id->driver_info);
+ r = zd_mac_preinit_hw(zd_netdev_mac(netdev));
if (r) {
dev_dbg_f(&intf->dev,
"couldn't initialize mac. Error number %d\n", r);
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.h b/drivers/net/wireless/zd1211rw/zd_usb.h
index 506ea6a..961a7a1 100644
--- a/drivers/net/wireless/zd1211rw/zd_usb.h
+++ b/drivers/net/wireless/zd1211rw/zd_usb.h
@@ -188,6 +188,7 @@ struct zd_usb {
struct zd_usb_rx rx;
struct zd_usb_tx tx;
struct usb_interface *intf;
+ u8 is_zd1211b:1, initialized:1;
};
#define zd_usb_dev(usb) (&usb->intf->dev)
@@ -236,6 +237,8 @@ int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
int zd_usb_rfwrite(struct zd_usb *usb, u32 value, u8 bits);
+int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len);
+
extern struct workqueue_struct *zd_workqueue;
#endif /* _ZD_USB_H */
diff --git a/net/ieee80211/softmac/ieee80211softmac_assoc.c b/net/ieee80211/softmac/ieee80211softmac_assoc.c
index cc8110b..afb6c66 100644
--- a/net/ieee80211/softmac/ieee80211softmac_assoc.c
+++ b/net/ieee80211/softmac/ieee80211softmac_assoc.c
@@ -271,8 +271,11 @@ ieee80211softmac_assoc_work(struct work_struct *work)
*/
dprintk(KERN_INFO PFX "Associate: Scanning for networks first.\n");
ieee80211softmac_notify(mac->dev, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, ieee80211softmac_assoc_notify_scan, NULL);
- if (ieee80211softmac_start_scan(mac))
+ if (ieee80211softmac_start_scan(mac)) {
dprintk(KERN_INFO PFX "Associate: failed to initiate scan. Is device up?\n");
+ mac->associnfo.associating = 0;
+ mac->associnfo.associated = 0;
+ }
goto out;
} else {
mac->associnfo.associating = 0;
--
John W. Linville
linville@tuxdriver.com
^ permalink raw reply related [flat|nested] 25+ messages in thread
end of thread, other threads:[~2008-01-09 1:49 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-08 22:23 Please pull 'upstream-jgarzik' branch of wireless-2.6 John W. Linville
2008-01-08 22:42 ` One more patch... -- " John W. Linville
[not found] ` <20080108224202.GE3086-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2008-01-09 1:49 ` Belay that... " John W. Linville
-- strict thread matches above, loose matches on Subject: below --
2007-12-20 15:54 John W. Linville
2007-12-16 4:34 John W. Linville
2007-12-17 23:24 ` Jeff Garzik
[not found] ` <47670514.4030204-o2qLIJkoznsdnm+yROfE0A@public.gmane.org>
2007-12-17 23:40 ` Jeff Garzik
2007-12-18 1:24 ` Zhu Yi
2007-12-04 13:59 John W. Linville
2007-12-04 20:13 ` Jeff Garzik
2007-11-27 14:47 John W. Linville
[not found] ` <20071127144748.GA12408-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-12-04 13:55 ` John W. Linville
2007-11-06 1:16 John W. Linville
2007-11-06 17:43 ` Jeff Garzik
2007-09-15 13:21 John W. Linville
2007-09-18 1:54 ` Zhu Yi
[not found] <20070828231731.GB2967@tuxdriver.com>
[not found] ` <20070828231731.GB2967-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-08-31 13:44 ` Jeff Garzik
2007-08-15 0:36 John W. Linville
[not found] ` <20070815003637.GK7198-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-08-25 6:40 ` Jeff Garzik
2007-08-06 20:14 Please pull 'fixes-jgarzik' " John W. Linville
[not found] ` <20070806201441.GJ6442-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-08-06 20:16 ` Please pull 'upstream-jgarzik' " John W. Linville
2007-08-07 22:21 ` Jeff Garzik
2007-07-18 2:19 John W. Linville
[not found] ` <20070718021953.GC26907-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-07-18 22:31 ` Jeff Garzik
2007-07-10 18:57 John W. Linville
[not found] ` <20070710185758.GH7927-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
2007-07-16 21:59 ` Jeff Garzik
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).