23 Apr, 2009

40 commits

  • The maximum sleep interval, for powersave purposes, is
    determined by the DTIM period (it may not be larger)
    and the required networking latency (it must be small
    enough to fulfil those constraints).

    This makes mac80211 calculate the maximum sleep interval
    based on those constraints, and pass it to the driver.
    Then the driver should instruct the device to sleep at
    most that long.

    Note that the device is responsible for aligning the
    maximum sleep interval between DTIMs, we make sure it's
    not longer but it needs to make sure it's between them.

    Also, group some powersave documentation together and
    make it more explicit that we support managed mode only,
    and no IBSS powersaving (yet).

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Make the JOIN_IBSS command look at the beacon interval
    attribute to see if the user requested a specific beacon
    interval, if not default to 100 TU (wext too).

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Just setting IEEE80211_CONF_CHANGE_PS should be sufficient
    for changes in the power saving things. The driver already
    tells us whether it wants notification of dynps via the
    "have dynps support" hw flag.

    Signed-off-by: Johannes Berg
    Reviewed-by: Kalle Valo
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Stephen Rothwell reported these warnings from a 32-bit build:

    net/mac80211/mlme.c:1771: warning: left shift count >= width of type
    net/mac80211/mlme.c:1772: warning: left shift count >= width of type
    net/mac80211/mlme.c:1773: warning: left shift count >= width of type
    net/mac80211/mlme.c:1774: warning: left shift count >= width of type
    net/mac80211/mlme.c:1775: warning: left shift count >= width of type

    This shows a bug in my code -- BIT(X) uses just "1 << X" which means
    a 32-bit integer on 32-bit platforms, but the code here needs a u64
    on all platforms. Fix this by using "1ULL << X" instead of BIT(X).

    Thanks Stephen!

    Reported-by: Stephen Rothwell
    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Private structure is allocated by wiphy_new now, so use
    wiphy_free instead of kfree.

    Signed-off-by: Jussi Kivilinna
    Signed-off-by: John W. Linville

    Jussi Kivilinna
     
  • rndis_wext_link_change() might be called from rndis_command() at
    initialization stage and priv->workqueue/priv->work have not been
    initialized yet. This causes invalid opcode at rndis_wext_bind on
    some brands of bcm4320.

    Fix by initializing workqueue/workers in rndis_wext_bind() before
    rndis_command is used.

    Signed-off-by: Jussi Kivilinna
    Signed-off-by: John W. Linville

    Jussi Kivilinna
     
  • sparse complains, correctly, about these:

    drivers/net/wireless/rndis_wlan.c:418:21: warning: symbol 'rndis_config_ops' was not declared. Should it be static?
    drivers/net/wireless/rndis_wlan.c:423:6: warning: symbol 'rndis_wiphy_privid' was not declared. Should it be static?

    Fix that.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • With the RCU locking here we sleep while in an atomic context,
    since we can sleep just use mutex locking for the interface
    list instead of RCU. Sorry, seems I didn't get that in my UML
    test.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Allow user to config the device all the time but only allow commiting
    these changes to card if the card is up and running.

    Signed-off-by: Mohamed Abbas
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Mohamed Abbas
     
  • Patch removes the "manual radio disable" parameter
    as there is no usage scenario of disabling radio using this module parameter.
    User can use iwconfig's txpower to enable and disable radio.

    This module parameter also does not work as expected. During module load
    the status of radio is set, the radio is not actually disabled. Even so,
    the moment mac80211 requests the interface to be up the radio will be
    enabled again.

    Signed-off-by: Abhijeet Kolekar
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Abhijeet Kolekar
     
  • Function rs_stay_in_table was flushing the rate scale table way to early. time_after
    macro in expecting long value and was failing because we passing u32 value.

    Signed-off-by: Mohamed Abbas
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Mohamed Abbas
     
  • This patch clean up the code for NL80211_IFTYPE_MONITOR mode,
    priv->iw_mode is set in add_interface, but add_interface is never called
    for monitor mode.
    The only way mac80211 informs us about monitor mode is through
    configuring filter; since iw_mode will never set to
    NL80211_IFTYPE_MONITOR, modify and remove all the code refer to
    NL80211_IFTYPE_MONITOR and replace with iwl_is_monitor_mode() function
    call.

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Wey-Yi Guy
     
  • This patch calculates interrupt statistics for debugfs.

    Signed-off-by: Abhijeet Kolekar
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Abhijeet Kolekar
     
  • Patch adds debugfs to 3945. Also fix debugfs registration in iwlagn
    to return error code if it fails.

    Signed-off-by: Abhijeet Kolekar
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Abhijeet Kolekar
     
  • If passive scanning is requested we should not ask the
    microcode to do active scanning after detecting traffic
    on a channel -- that should only be used when an active
    scan is requested but some channels are marked passive.

    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This modifies iwlwifi to
    * no longer build its own probe request, but use mac80211's
    * therefore, support arbitrary scan IEs (up to the max len)
    * support multiple scan SSIDs
    * support passive scanning

    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This limit applies to current (APIv1 and APIv2) 3945 firmware only, not
    supported firmware of any of the other cards.

    Signed-off-by: Johannes Berg
    Signed-off-by: Reinette Chatre
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • With this patch ar9170 is capable of receiving aggregated 802.11n frames
    and sniffing on most networks without having a "debug message overhead".

    (Includes phy initialization requested by
    Johannes Berg -- JWL)

    Signed-off-by: Christian Lamparter
    Signed-off-by: John W. Linville

    Christian Lamparter
     
  • The TIM IE must not be shorter than 4 bytes, so verify that
    when parsing it and use the proper type. To ease that adjust
    struct ieee80211_tim_ie to have a virtual bitmap of size
    at least 1.

    Also check that the TIM IE is actually present before trying
    to parse it!

    Because other people may need the function, make it a static
    inline in ieee80211.h.

    (The original "mac80211: validate TIM IE length" was a minimal fix for
    2.6.30. This purports to be the full, correct fix. -- JWL)

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • The fact that these are exported is a technical detail
    of the conversion period -- we don't want anybody to
    start relying on these. Ultimately we want things to
    use cfg80211 only, and once everything that is in wext
    is converted to cfg80211 drivers will not need to touch
    wext _at all_.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When we leave an IBSS, we should clear the SSID and not just the
    BSSID, but since WEXT allows configuring while the interface is
    down we must not clear it when leaving due to taking the iface
    down, so some complications are needed.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Add new nl80211 attributes that can be used with NL80211_CMD_SET_WIPHY
    and NL80211_CMD_GET_WIPHY to manage fragmentation/RTS threshold and
    retry limits.

    Since these values are stored in struct wiphy, remove the local copy
    from mac80211 where feasible (frag & rts threshold). The retry limits
    are currently needed in struct ieee80211_conf, but these could be
    eventually removed since the driver should have access to the values
    in struct wiphy.

    Signed-off-by: Jouni Malinen
    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • This patch adds support for configuring HT40 channels
    and receiving HT40 to ar9170. Receiving aggregation
    doesn't seem to work right now, so it's not enabled.
    Same goes for TX aggregation, but that probably needs
    even more work.

    With this, I can receive roughly 33 Mbits/sec.

    The HT capabilities are a little odd, I tried following
    otus here -- in particular having SGI_40 but not SGI_20
    is a little weird but afaict that's what otus does.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Supporting wireless extension nickname is pointless
    and no other modern driver supports this, so remove
    it.

    Signed-off-by: Johannes Berg
    Acked-by: Jussi Kivilinna
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Trying to separate header files into net/wireless.h and
    net/cfg80211.h has been a source of confusion. Remove
    net/wireless.h (because there also is the linux/wireless.h)
    and subsume everything into net/cfg80211.h -- except the
    definitions for regulatory structures which get moved to
    a new header net/regulatory.h.

    The "new" net/cfg80211.h is now divided into sections.

    There are no real changes in this patch but code shuffling
    and some very minor documentation fixes.

    I have also, to make things reflect reality, put in a
    copyright line for Luis to net/regulatory.h since that
    is probably exclusively written by him but was formerly
    in a file that only had my copyright line.

    Signed-off-by: Johannes Berg
    Cc: Luis R. Rodriguez
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This converts mac80211 to the new cfg80211 IBSS API, the
    wext handling functions are called where appropriate.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This adds IBSS API along with (preliminary) wext handlers.
    The wext handlers can only do IBSS so you need to call them
    from your own wext handlers if the mode is IBSS.

    The nl80211 API requires
    * an SSID
    * a channel (frequency) for the case that a new IBSS
    has to be created

    It optionally supports
    * a flag to fix the channel
    * a fixed BSSID

    The cfg80211 code also takes care to leave the IBSS before
    the netdev is set down. If wireless extensions are used, it
    also caches values when the interface is down and instructs
    the driver to join when the interface is set up.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Since we have ->deauth and ->disassoc we can support the
    wext SIWMLME call directly without driver wext handlers.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When listing all wireless netdevs in the system this
    is useful to print which wiphy they belong to. Just
    add the attribute, any program that doesn't care will
    just ignore it.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • This patch sets IEEE80211_TX_CTL_CLEAR_PS_FILT for outgoing
    frames for a half-wake station.

    this is necessary if one wants to get ps-poll working properly with a p54 ap.

    Signed-off-by: Christian Lamparter
    Signed-off-by: John W. Linville

    Christian Lamparter
     
  • PS-Polled frames must be sent with OUT_NOCANCEL flag set,
    or the firmware will reject all of them, at the station is still blacklisted.

    Signed-off-by: Christian Lamparter
    Signed-off-by: John W. Linville

    Christian Lamparter
     
  • The following patch implements some control over the LED on RTL8187B and
    RTL8187L devices. Triggers are registered for TX and RX. Whenever the
    trigger event occurs, the LED is turned off for 1/20 second, then turned
    back on.

    Note: For those RTL8187X devices that are built into the computer and have
    a LED that is expected to be controlled with a radio switch, this patch will
    not operate that LED. That will take a separate patch to be prepared later.

    Signed-off-by: Larry Finger
    Signed-off-by: Herton Ronaldo Krzesinski
    Tested-by: Hin-Tak Leung
    Signed-off-by: John W. Linville

    Larry Finger
     
  • We can allow scan requests in AP mode as long as the interface has not
    yet been configured to send out Beacon frames (or if beaconing has
    been disabled prior to the scan request). This makes it easier to scan
    for neighboring BSSes during AP initialization and makes it possible
    to run a scan without setting the interface down, if needed. Without
    this change, the only available option would be to set the interface
    down, move into station mode, and set the interface up, prior to
    requesting the scan.

    Signed-off-by: Jouni Malinen
    Signed-off-by: John W. Linville

    Jouni Malinen
     
  • Document what mac80211 will do in the future to help save power.
    We're not quite there yet, but a plan helps. Also, while at it,
    fix the docs wrt. multicast traffic.

    Signed-off-by: Johannes Berg
    Reviewed-by: Kalle Valo
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Enable PS by default (depending on Kconfig) -- rely on drivers
    to control the level using pm_qos. Due to the previous patch
    we turn off PS when necessary due to latency requirements.

    This has a Kconfig symbol so people can, if they really want,
    configure the default in their kernels. We may want to keep it
    at "default y" only in wireless-testing for a while.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • Regardless of whether the hardware implements beacon filtering,
    there's no need to process all beacons in software all the time
    throughout the stack (mac80211 does a lot, then cfg80211, then
    in the future possibly userspace).

    This patch implements the "best possible" beacon filtering in
    mac80211. "Best possible" means that it can look for changes in
    all requested information elements, and distinguish vendor IEs
    by their OUI.

    In the future, we will add nl80211 API for userspace to request
    information elements and vendor IE OUIs to watch -- drivers can
    then implement the best they can do while software implements
    it fully.

    It is unclear whether or not this actually saves CPU time, but
    the data is all in the cache already so it should be fairly
    cheap. The additional _testing_, however, has great benefit;
    Without this, and on hardware that doesn't implement beacon
    filtering, wrong assumptions about, for example, scan result
    updates could quickly creep into code.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When an application asks for a latency lower than the beacon interval
    there's nothing we can do -- we need to stay awake and not have the
    AP buffer frames for us. Add code to automatically calculate this
    constraint in mac80211 so drivers need not concern themselves with it.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • When you have multiple virtual interfaces the current
    implementation requires setting them up properly from
    userspace, which is undesirable when we want to default
    to power save mode. Keep track of powersave requested
    from userspace per managed mode interface, and only
    enable powersave globally when exactly one managed mode
    interface is active and has powersave turned on.

    Second, only start the dynPS timer when PS is turned
    on, and properly turn it off when PS is turned off.

    Third, fix the scan_sdata abuse in the dynps code.

    Finally, also reorder the code and refactor the code
    that enables PS or the dynps timer instead of having
    it copied in two places.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     
  • A detection function was added for identifying CF8381.

    Signed-off-by: Marek Vasut
    Acked-by: Dan Williams
    Signed-off-by: John W. Linville

    Marek Vasut
     
  • This patch deactivates powersave in station mode.

    It does not work correctly yet, so the code does more harm than good.

    (I split the original patch and sent part of it for 2.6.30, which didn't
    have the IEEE80211_HW_BEACON_FILTER flag. -- JWL)

    Reported-by: Johannes Berg
    Signed-off-by: Christian Lamparter
    Signed-off-by: John W. Linville

    Christian Lamparter