Commit bb1231052e265e960d902ab32e67c5ccdabc9434

Authored by David S. Miller

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
... ... @@ -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
... ... @@ -954,6 +954,9 @@
954 954 &adc_dc_cal_multi_sample;
955 955 }
956 956 ah->supp_cals = ADC_GAIN_CAL | ADC_DC_CAL | IQ_MISMATCH_CAL;
  957 +
  958 + if (AR_SREV_9287(ah))
  959 + ah->supp_cals &= ~ADC_GAIN_CAL;
957 960 }
958 961 }
959 962  
drivers/net/wireless/ath/ath9k/eeprom_def.c
... ... @@ -226,6 +226,10 @@
226 226 eep->baseEepHeader.pwdclkind == 0)
227 227 ah->need_an_top2_fixup = 1;
228 228  
  229 + if ((common->bus_ops->ath_bus_type == ATH_USB) &&
  230 + (AR_SREV_9280(ah)))
  231 + eep->modalHeader[0].xpaBiasLvl = 0;
  232 +
229 233 return 0;
230 234 }
231 235  
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)
... ... @@ -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);