Commit bb1231052e265e960d902ab32e67c5ccdabc9434
Exists in
master
and in
7 other branches
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Showing 13 changed files Side-by-side Diff
- Documentation/DocBook/80211.tmpl
- drivers/net/wireless/ath/ath9k/ar9002_calib.c
- drivers/net/wireless/ath/ath9k/eeprom_def.c
- drivers/net/wireless/ath/ath9k/htc.h
- drivers/net/wireless/ath/ath9k/htc_drv_main.c
- drivers/net/wireless/ath/ath9k/hw.c
- drivers/net/wireless/hostap/hostap_cs.c
- drivers/net/wireless/ipw2x00/ipw2200.c
- drivers/net/wireless/p54/txrx.c
- drivers/ssb/scan.c
- include/linux/nl80211.h
- include/net/cfg80211.h
- include/net/mac80211.h
Documentation/DocBook/80211.tmpl
... | ... | @@ -268,10 +268,6 @@ |
268 | 268 | !Finclude/net/mac80211.h ieee80211_ops |
269 | 269 | !Finclude/net/mac80211.h ieee80211_alloc_hw |
270 | 270 | !Finclude/net/mac80211.h ieee80211_register_hw |
271 | -!Finclude/net/mac80211.h ieee80211_get_tx_led_name | |
272 | -!Finclude/net/mac80211.h ieee80211_get_rx_led_name | |
273 | -!Finclude/net/mac80211.h ieee80211_get_assoc_led_name | |
274 | -!Finclude/net/mac80211.h ieee80211_get_radio_led_name | |
275 | 271 | !Finclude/net/mac80211.h ieee80211_unregister_hw |
276 | 272 | !Finclude/net/mac80211.h ieee80211_free_hw |
277 | 273 | </chapter> |
... | ... | @@ -381,6 +377,23 @@ |
381 | 377 | improve performance. |
382 | 378 | </para> |
383 | 379 | </partintro> |
380 | + | |
381 | + <chapter id="led-support"> | |
382 | + <title>LED support</title> | |
383 | + <para> | |
384 | + Mac80211 supports various ways of blinking LEDs. Wherever possible, | |
385 | + device LEDs should be exposed as LED class devices and hooked up to | |
386 | + the appropriate trigger, which will then be triggered appropriately | |
387 | + by mac80211. | |
388 | + </para> | |
389 | +!Finclude/net/mac80211.h ieee80211_get_tx_led_name | |
390 | +!Finclude/net/mac80211.h ieee80211_get_rx_led_name | |
391 | +!Finclude/net/mac80211.h ieee80211_get_assoc_led_name | |
392 | +!Finclude/net/mac80211.h ieee80211_get_radio_led_name | |
393 | +!Finclude/net/mac80211.h ieee80211_tpt_blink | |
394 | +!Finclude/net/mac80211.h ieee80211_tpt_led_trigger_flags | |
395 | +!Finclude/net/mac80211.h ieee80211_create_tpt_led_trigger | |
396 | + </chapter> | |
384 | 397 | |
385 | 398 | <chapter id="hardware-crypto-offload"> |
386 | 399 | <title>Hardware crypto acceleration</title> |
drivers/net/wireless/ath/ath9k/ar9002_calib.c
drivers/net/wireless/ath/ath9k/eeprom_def.c
drivers/net/wireless/ath/ath9k/htc.h
... | ... | @@ -433,6 +433,7 @@ |
433 | 433 | void ath9k_htc_beaconep(void *drv_priv, struct sk_buff *skb, |
434 | 434 | enum htc_endpoint_id ep_id, bool txok); |
435 | 435 | |
436 | +int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv); | |
436 | 437 | void ath9k_htc_station_work(struct work_struct *work); |
437 | 438 | void ath9k_htc_aggr_work(struct work_struct *work); |
438 | 439 | void ath9k_ani_work(struct work_struct *work);; |
drivers/net/wireless/ath/ath9k/htc_drv_main.c
... | ... | @@ -301,6 +301,16 @@ |
301 | 301 | |
302 | 302 | priv->nstations++; |
303 | 303 | |
304 | + /* | |
305 | + * Set chainmask etc. on the target. | |
306 | + */ | |
307 | + ret = ath9k_htc_update_cap_target(priv); | |
308 | + if (ret) | |
309 | + ath_dbg(common, ATH_DBG_CONFIG, | |
310 | + "Failed to update capability in target\n"); | |
311 | + | |
312 | + priv->ah->is_monitoring = true; | |
313 | + | |
304 | 314 | return 0; |
305 | 315 | |
306 | 316 | err_vif: |
... | ... | @@ -328,6 +338,7 @@ |
328 | 338 | } |
329 | 339 | |
330 | 340 | priv->nstations--; |
341 | + priv->ah->is_monitoring = false; | |
331 | 342 | |
332 | 343 | return 0; |
333 | 344 | } |
... | ... | @@ -419,7 +430,7 @@ |
419 | 430 | return 0; |
420 | 431 | } |
421 | 432 | |
422 | -static int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv) | |
433 | +int ath9k_htc_update_cap_target(struct ath9k_htc_priv *priv) | |
423 | 434 | { |
424 | 435 | struct ath9k_htc_cap_target tcap; |
425 | 436 | int ret; |
... | ... | @@ -1186,6 +1197,20 @@ |
1186 | 1197 | } |
1187 | 1198 | } |
1188 | 1199 | |
1200 | + /* | |
1201 | + * Monitor interface should be added before | |
1202 | + * IEEE80211_CONF_CHANGE_CHANNEL is handled. | |
1203 | + */ | |
1204 | + if (changed & IEEE80211_CONF_CHANGE_MONITOR) { | |
1205 | + if (conf->flags & IEEE80211_CONF_MONITOR) { | |
1206 | + if (ath9k_htc_add_monitor_interface(priv)) | |
1207 | + ath_err(common, "Failed to set monitor mode\n"); | |
1208 | + else | |
1209 | + ath_dbg(common, ATH_DBG_CONFIG, | |
1210 | + "HW opmode set to Monitor mode\n"); | |
1211 | + } | |
1212 | + } | |
1213 | + | |
1189 | 1214 | if (changed & IEEE80211_CONF_CHANGE_CHANNEL) { |
1190 | 1215 | struct ieee80211_channel *curchan = hw->conf.channel; |
1191 | 1216 | int pos = curchan->hw_value; |
... | ... | @@ -1219,16 +1244,6 @@ |
1219 | 1244 | if (changed & IEEE80211_CONF_CHANGE_POWER) { |
1220 | 1245 | priv->txpowlimit = 2 * conf->power_level; |
1221 | 1246 | ath_update_txpow(priv); |
1222 | - } | |
1223 | - | |
1224 | - if (changed & IEEE80211_CONF_CHANGE_MONITOR) { | |
1225 | - if (conf->flags & IEEE80211_CONF_MONITOR) { | |
1226 | - if (ath9k_htc_add_monitor_interface(priv)) | |
1227 | - ath_err(common, "Failed to set monitor mode\n"); | |
1228 | - else | |
1229 | - ath_dbg(common, ATH_DBG_CONFIG, | |
1230 | - "HW opmode set to Monitor mode\n"); | |
1231 | - } | |
1232 | 1247 | } |
1233 | 1248 | |
1234 | 1249 | if (changed & IEEE80211_CONF_CHANGE_IDLE) { |
drivers/net/wireless/ath/ath9k/hw.c
... | ... | @@ -436,9 +436,10 @@ |
436 | 436 | |
437 | 437 | static int ath9k_hw_post_init(struct ath_hw *ah) |
438 | 438 | { |
439 | + struct ath_common *common = ath9k_hw_common(ah); | |
439 | 440 | int ecode; |
440 | 441 | |
441 | - if (!AR_SREV_9271(ah)) { | |
442 | + if (common->bus_ops->ath_bus_type != ATH_USB) { | |
442 | 443 | if (!ath9k_hw_chip_test(ah)) |
443 | 444 | return -ENODEV; |
444 | 445 | } |
... | ... | @@ -1213,7 +1214,7 @@ |
1213 | 1214 | ah->txchainmask = common->tx_chainmask; |
1214 | 1215 | ah->rxchainmask = common->rx_chainmask; |
1215 | 1216 | |
1216 | - if (!ah->chip_fullsleep) { | |
1217 | + if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) { | |
1217 | 1218 | ath9k_hw_abortpcurecv(ah); |
1218 | 1219 | if (!ath9k_hw_stopdmarecv(ah)) { |
1219 | 1220 | ath_dbg(common, ATH_DBG_XMIT, |
drivers/net/wireless/hostap/hostap_cs.c
... | ... | @@ -518,22 +518,21 @@ |
518 | 518 | hw_priv->link = link; |
519 | 519 | |
520 | 520 | /* |
521 | - * Make sure the IRQ handler cannot proceed until at least | |
522 | - * dev->base_addr is initialized. | |
521 | + * We enable IRQ here, but IRQ handler will not proceed | |
522 | + * until dev->base_addr is set below. This protect us from | |
523 | + * receive interrupts when driver is not initialized. | |
523 | 524 | */ |
524 | - spin_lock_irqsave(&local->irq_init_lock, flags); | |
525 | - | |
526 | 525 | ret = pcmcia_request_irq(link, prism2_interrupt); |
527 | 526 | if (ret) |
528 | - goto failed_unlock; | |
527 | + goto failed; | |
529 | 528 | |
530 | 529 | ret = pcmcia_enable_device(link); |
531 | 530 | if (ret) |
532 | - goto failed_unlock; | |
531 | + goto failed; | |
533 | 532 | |
533 | + spin_lock_irqsave(&local->irq_init_lock, flags); | |
534 | 534 | dev->irq = link->irq; |
535 | 535 | dev->base_addr = link->resource[0]->start; |
536 | - | |
537 | 536 | spin_unlock_irqrestore(&local->irq_init_lock, flags); |
538 | 537 | |
539 | 538 | local->shutdown = 0; |
... | ... | @@ -546,8 +545,6 @@ |
546 | 545 | |
547 | 546 | return ret; |
548 | 547 | |
549 | - failed_unlock: | |
550 | - spin_unlock_irqrestore(&local->irq_init_lock, flags); | |
551 | 548 | failed: |
552 | 549 | kfree(hw_priv); |
553 | 550 | prism2_release((u_long)link); |
drivers/net/wireless/ipw2x00/ipw2200.c
... | ... | @@ -1973,6 +1973,13 @@ |
1973 | 1973 | |
1974 | 1974 | inta = ipw_read32(priv, IPW_INTA_RW); |
1975 | 1975 | inta_mask = ipw_read32(priv, IPW_INTA_MASK_R); |
1976 | + | |
1977 | + if (inta == 0xFFFFFFFF) { | |
1978 | + /* Hardware disappeared */ | |
1979 | + IPW_WARNING("TASKLET INTA == 0xFFFFFFFF\n"); | |
1980 | + /* Only handle the cached INTA values */ | |
1981 | + inta = 0; | |
1982 | + } | |
1976 | 1983 | inta &= (IPW_INTA_MASK_ALL & inta_mask); |
1977 | 1984 | |
1978 | 1985 | /* Add any cached INTA values that need to be handled */ |
drivers/net/wireless/p54/txrx.c
... | ... | @@ -618,7 +618,7 @@ |
618 | 618 | else |
619 | 619 | *burst_possible = false; |
620 | 620 | |
621 | - if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) | |
621 | + if (!(info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)) | |
622 | 622 | *flags |= P54_HDR_FLAG_DATA_OUT_SEQNR; |
623 | 623 | |
624 | 624 | if (info->flags & IEEE80211_TX_CTL_PSPOLL_RESPONSE) |
drivers/ssb/scan.c
... | ... | @@ -420,6 +420,16 @@ |
420 | 420 | bus->pcicore.dev = dev; |
421 | 421 | #endif /* CONFIG_SSB_DRIVER_PCICORE */ |
422 | 422 | break; |
423 | + case SSB_DEV_ETHERNET: | |
424 | + if (bus->bustype == SSB_BUSTYPE_PCI) { | |
425 | + if (bus->host_pci->vendor == PCI_VENDOR_ID_BROADCOM && | |
426 | + (bus->host_pci->device & 0xFF00) == 0x4300) { | |
427 | + /* This is a dangling ethernet core on a | |
428 | + * wireless device. Ignore it. */ | |
429 | + continue; | |
430 | + } | |
431 | + } | |
432 | + break; | |
423 | 433 | default: |
424 | 434 | break; |
425 | 435 | } |
include/linux/nl80211.h
... | ... | @@ -148,6 +148,10 @@ |
148 | 148 | * @NL80211_CMD_SET_MPATH: Set mesh path attributes for mesh path to |
149 | 149 | * destination %NL80211_ATTR_MAC on the interface identified by |
150 | 150 | * %NL80211_ATTR_IFINDEX. |
151 | + * @NL80211_CMD_NEW_MPATH: Create a new mesh path for the destination given by | |
152 | + * %NL80211_ATTR_MAC via %NL80211_ATTR_MPATH_NEXT_HOP. | |
153 | + * @NL80211_CMD_DEL_MPATH: Delete a mesh path to the destination given by | |
154 | + * %NL80211_ATTR_MAC. | |
151 | 155 | * @NL80211_CMD_NEW_PATH: Add a mesh path with given attributes to the |
152 | 156 | * the interface identified by %NL80211_ATTR_IFINDEX. |
153 | 157 | * @NL80211_CMD_DEL_PATH: Remove a mesh path identified by %NL80211_ATTR_MAC |
... | ... | @@ -612,7 +616,7 @@ |
612 | 616 | * consisting of a nested array. |
613 | 617 | * |
614 | 618 | * @NL80211_ATTR_MESH_ID: mesh id (1-32 bytes). |
615 | - * @NL80211_ATTR_PLINK_ACTION: action to perform on the mesh peer link. | |
619 | + * @NL80211_ATTR_STA_PLINK_ACTION: action to perform on the mesh peer link. | |
616 | 620 | * @NL80211_ATTR_MPATH_NEXT_HOP: MAC address of the next hop for a mesh path. |
617 | 621 | * @NL80211_ATTR_MPATH_INFO: information about a mesh_path, part of mesh path |
618 | 622 | * info given for %NL80211_CMD_GET_MPATH, nested attribute described at |
... | ... | @@ -879,7 +883,9 @@ |
879 | 883 | * See &enum nl80211_key_default_types. |
880 | 884 | * |
881 | 885 | * @NL80211_ATTR_MESH_SETUP: Optional mesh setup parameters. These cannot be |
882 | - * changed once the mesh is active. | |
886 | + * changed once the mesh is active. | |
887 | + * @NL80211_ATTR_MESH_CONFIG: Mesh configuration parameters, a nested attribute | |
888 | + * containing attributes from &enum nl80211_meshconf_params. | |
883 | 889 | * |
884 | 890 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
885 | 891 | * @__NL80211_ATTR_AFTER_LAST: internal use |
... | ... | @@ -1225,8 +1231,6 @@ |
1225 | 1231 | * @NL80211_STA_INFO_INACTIVE_TIME: time since last activity (u32, msecs) |
1226 | 1232 | * @NL80211_STA_INFO_RX_BYTES: total received bytes (u32, from this station) |
1227 | 1233 | * @NL80211_STA_INFO_TX_BYTES: total transmitted bytes (u32, to this station) |
1228 | - * @__NL80211_STA_INFO_AFTER_LAST: internal | |
1229 | - * @NL80211_STA_INFO_MAX: highest possible station info attribute | |
1230 | 1234 | * @NL80211_STA_INFO_SIGNAL: signal strength of last received PPDU (u8, dBm) |
1231 | 1235 | * @NL80211_STA_INFO_TX_BITRATE: current unicast tx rate, nested attribute |
1232 | 1236 | * containing info as possible, see &enum nl80211_sta_info_txrate. |
... | ... | @@ -1236,6 +1240,11 @@ |
1236 | 1240 | * @NL80211_STA_INFO_TX_RETRIES: total retries (u32, to this station) |
1237 | 1241 | * @NL80211_STA_INFO_TX_FAILED: total failed packets (u32, to this station) |
1238 | 1242 | * @NL80211_STA_INFO_SIGNAL_AVG: signal strength average (u8, dBm) |
1243 | + * @NL80211_STA_INFO_LLID: the station's mesh LLID | |
1244 | + * @NL80211_STA_INFO_PLID: the station's mesh PLID | |
1245 | + * @NL80211_STA_INFO_PLINK_STATE: peer link state for the station | |
1246 | + * @__NL80211_STA_INFO_AFTER_LAST: internal | |
1247 | + * @NL80211_STA_INFO_MAX: highest possible station info attribute | |
1239 | 1248 | */ |
1240 | 1249 | enum nl80211_sta_info { |
1241 | 1250 | __NL80211_STA_INFO_INVALID, |
... | ... | @@ -1626,7 +1635,7 @@ |
1626 | 1635 | * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs) |
1627 | 1636 | * that it takes for an HWMP information element to propagate across the mesh |
1628 | 1637 | * |
1629 | - * @NL80211_MESHCONF_ROOTMODE: whether root mode is enabled or not | |
1638 | + * @NL80211_MESHCONF_HWMP_ROOTMODE: whether root mode is enabled or not | |
1630 | 1639 | * |
1631 | 1640 | * @NL80211_MESHCONF_ELEMENT_TTL: specifies the value of TTL field set at a |
1632 | 1641 | * source mesh point for path selection elements. |
... | ... | @@ -1678,6 +1687,7 @@ |
1678 | 1687 | * element that vendors will use to identify the path selection methods and |
1679 | 1688 | * metrics in use. |
1680 | 1689 | * |
1690 | + * @NL80211_MESH_SETUP_ATTR_MAX: highest possible mesh setup attribute number | |
1681 | 1691 | * @__NL80211_MESH_SETUP_ATTR_AFTER_LAST: Internal use |
1682 | 1692 | */ |
1683 | 1693 | enum nl80211_mesh_setup_params { |
include/net/cfg80211.h
... | ... | @@ -1103,6 +1103,8 @@ |
1103 | 1103 | * @change_mpath: change a given mesh path |
1104 | 1104 | * @get_mpath: get a mesh path for the given parameters |
1105 | 1105 | * @dump_mpath: dump mesh path callback -- resume dump at index @idx |
1106 | + * @join_mesh: join the mesh network with the specified parameters | |
1107 | + * @leave_mesh: leave the current mesh network | |
1106 | 1108 | * |
1107 | 1109 | * @get_mesh_config: Get the current mesh configuration |
1108 | 1110 | * |
include/net/mac80211.h
... | ... | @@ -337,6 +337,10 @@ |
337 | 337 | * @IEEE80211_TX_CTL_LDPC: tells the driver to use LDPC for this frame |
338 | 338 | * @IEEE80211_TX_CTL_STBC: Enables Space-Time Block Coding (STBC) for this |
339 | 339 | * frame and selects the maximum number of streams that it can use. |
340 | + * @IEEE80211_TX_CTL_TX_OFFCHAN: Marks this packet to be transmitted on | |
341 | + * the off-channel channel when a remain-on-channel offload is done | |
342 | + * in hardware -- normal packets still flow and are expected to be | |
343 | + * handled properly by the device. | |
340 | 344 | * |
341 | 345 | * Note: If you have to add new flags to the enumeration, then don't |
342 | 346 | * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary. |
... | ... | @@ -1753,6 +1757,16 @@ |
1753 | 1757 | * (also see nl80211.h @NL80211_ATTR_WIPHY_ANTENNA_TX). |
1754 | 1758 | * |
1755 | 1759 | * @get_antenna: Get current antenna configuration from device (tx_ant, rx_ant). |
1760 | + * | |
1761 | + * @remain_on_channel: Starts an off-channel period on the given channel, must | |
1762 | + * call back to ieee80211_ready_on_channel() when on that channel. Note | |
1763 | + * that normal channel traffic is not stopped as this is intended for hw | |
1764 | + * offload. Frames to transmit on the off-channel channel are transmitted | |
1765 | + * normally except for the %IEEE80211_TX_CTL_TX_OFFCHAN flag. When the | |
1766 | + * duration (which will always be non-zero) expires, the driver must call | |
1767 | + * ieee80211_remain_on_channel_expired(). This callback may sleep. | |
1768 | + * @cancel_remain_on_channel: Requests that an ongoing off-channel period is | |
1769 | + * aborted before it expires. This callback may sleep. | |
1756 | 1770 | */ |
1757 | 1771 | struct ieee80211_ops { |
1758 | 1772 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |