29 Nov, 2011

1 commit

  • There's little point in this config symbol, if
    tracing is disabled the overhead is negligible
    and if you think it's too bad you can always
    turn off tracing completely.

    Also remove the part where we don't have sparse
    check the tracing code -- it seems that it can
    now deal with it (or the code changed).

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

    Johannes Berg
     

01 Oct, 2011

3 commits

  • iwlwifi has a separate EOSP notification from
    the device, and to make use of that properly
    it needs to be passed to mac80211. To be able
    to mix with tx_status_irqsafe and rx_irqsafe
    it also needs to be an "_irqsafe" version in
    the sense that it goes through the tasklet,
    the actual flag clearing would be IRQ-safe
    but doing it directly would cause reordering
    issues.

    This is needed in the case of a P2P GO going
    into an absence period without transmitting
    any frames that should be driver-released as
    in this case there's no other way to inform
    mac80211 that the service period ended. Note
    that for drivers that don't use the _irqsafe
    functions another version of this function
    will be required.

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

    Johannes Berg
     
  • iwlwifi needs to know the number of frames that are
    going to be sent to a station while it is asleep so
    it can properly handle the uCode blocking of that
    station.

    Before uAPSD, we got by by telling the device that
    a single frame was going to be released whenever we
    encountered IEEE80211_TX_CTL_POLL_RESPONSE. With
    uAPSD, however, that is no longer possible since
    there could be more than a single frame.

    To support this model, add a new callback to notify
    drivers when frames are going to be released.

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

    Johannes Berg
     
  • If there are frames for a station buffered in
    the driver, mac80211 announces those in the TIM
    IE but there's no way to release them. Add new
    API to release such frames and use it when the
    station polls for a frame.

    Since the API will soon also be used for uAPSD
    it is easily extensible.

    Note that before this change drivers announcing
    driver-buffered frames in the TIM bit actually
    will respond to a PS-Poll with a potentially
    lower priority frame (if there are any frames
    buffered in mac80211), after this patch a driver
    that hasn't been changed will no longer respond
    at all. This only affects ath9k, which will need
    to be fixed to implement the new API.

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

    Johannes Berg
     

28 Sep, 2011

2 commits


21 Jul, 2011

1 commit

  • In P2P client mode, the GO (AP) to connect to might
    have periods of time where it is not available due
    to powersave. To allow the driver to sync with it
    and send frames to the GO only when it is available
    add a new callback tx_sync (and the corresponding
    finish_tx_sync). These callbacks can sleep unlike
    the actual TX.

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

    Johannes Berg
     

12 Jul, 2011

1 commit

  • mac80211 maintains a running average of the RSSI when a STA
    is associated to an AP. Report threshold events to any driver
    that has registered callbacks for getting RSSI measurements.

    Implement callbacks in mac80211 so that driver can set thresholds.
    Add callbacks in mac80211 which is invoked when an RSSI threshold
    event occurs.

    mac80211: add tracing to rssi_reports api and remove extraneous fn argument
    mac80211: scale up rssi thresholds from driver by 16 before storing

    Signed-off-by: Meenakshi Venkataraman
    Signed-off-by: Wey-Yi Guy
    Signed-off-by: John W. Linville

    Meenakshi Venkataraman
     

07 Jul, 2011

1 commit


18 Jun, 2011

1 commit

  • When suspending, __ieee80211_suspend() calls ieee80211_scan_cancel(),
    which will only cancel sw scan. In order to cancel hw scan, the
    low-level driver has to cancel it in the suspend() callback. however,
    this is too late, as a new scan_work will be enqueued (while the driver
    is going into suspend).

    Add a new cancel_hw_scan() callback, asking the driver to cancel an
    active hw scan, and call it in ieee80211_scan_cancel().

    Signed-off-by: Eliad Peller
    Reviewed-by: Stanislaw Gruszka
    Signed-off-by: John W. Linville

    Eliad Peller
     

12 May, 2011

2 commits

  • Implement support for HW scheduled scan. The mac80211 code doesn't perform
    scheduled scans itself, but calls the driver to start and stop scheduled
    scans.

    This patch also creates a trace event class to be used by drv_hw_scan
    and the new drv_sched_scan_start and drv_sched_stop functions, in
    order to avoid duplicate code.

    Signed-off-by: Luciano Coelho
    Signed-off-by: John W. Linville

    Luciano Coelho
     
  • The functions drv_add_interface() and drv_remove_interface() print out
    the same values in the traces. Combine the traces of these two
    functions into one event class to remove some duplicate code.

    Also add a new class for functions drv_set_frag_threshold() and
    drv_set_rts_threshold().

    Cc: Johannes Berg
    Signed-off-by: Luciano Coelho
    Signed-off-by: John W. Linville

    Luciano Coelho
     

06 May, 2011

1 commit

  • This adds basic support for the new WoWLAN
    configuration in mac80211. The behaviour is
    completely offloaded to the driver though,
    with two new callbacks (suspend/resume).

    Options for the driver include a complete
    reconfiguration after wakeup, and exposing
    all the triggers it wants to support.

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

    Johannes Berg
     

29 Apr, 2011

1 commit

  • This patch adds a new API for setting a TX rate mask in
    drivers that have rate control in either the firmware or hardware.
    This can be used for various purposes, for example, masking out the
    11b rates in P2P operation.

    Signed-off-by: Sujith Manoharan
    Signed-off-by: John W. Linville

    Sujith Manoharan
     

13 Apr, 2011

1 commit

  • In a highly noisy environment, the tx rate of the driver drops and
    the application slows down since it has not yet received ACKs for
    the frames already queued in the hardware. Since this ACK may take
    more than 100ms, stopping the dev queues for entering PS at this
    stage breaks applications, WMM test cases in my testing.
    If there are frames already pending in the tx queue, postponing the
    PS logic helps to avoid redundant queue stops. When power save is
    enabled by default and in a noisy environment, this API certainly
    helps in improving the average throughput.

    Signed-off-by: Vivek Natarajan
    Signed-off-by: John W. Linville

    Vivek Natarajan
     

12 Mar, 2011

1 commit


26 Feb, 2011

1 commit

  • For devices supported by iwlwifi sometimes
    off-channel transmissions need to be handled
    by the device completely. To support this
    mac80211 needs to pass the frame directly
    to the driver and not through the TX path
    as the driver needs the frame and channel
    information at the same time.

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

    Johannes Berg
     

27 Jan, 2011

1 commit

  • For events that include only the local struct as
    their parameter, we can use DECLARE_EVENT_CLASS
    and save quite some binary size across segments
    as well lines of code.

    text data bss dec hex filename
    375745 19296 916 395957 60ab5 mac80211.ko.before
    367473 17888 916 386277 5e4e5 mac80211.ko.after
    -8272 -1408 0 -9680 -25d0 delta

    Some more tracepoints with identical arguments
    could be combined like this but for now this is
    the one that benefits most.

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

    Johannes Berg
     

20 Jan, 2011

1 commit

  • The aggregation code currently doesn't implement the
    buffer size negotiation. It will always request a max
    buffer size (which is fine, if a little pointless, as
    the mac80211 code doesn't know and might just use 0
    instead), but if the peer requests a smaller size it
    isn't possible to honour this request.

    In order to fix this, look at the buffer size in the
    addBA response frame, keep track of it and pass it to
    the driver in the ampdu_action callback when called
    with the IEEE80211_AMPDU_TX_OPERATIONAL action. That
    way the driver can limit the number of subframes in
    aggregates appropriately.

    Note that this doesn't fix any drivers apart from the
    addition of the new argument -- they all need to be
    updated separately to use this variable!

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

    Johannes Berg
     

06 Jan, 2011

1 commit


17 Nov, 2010

2 commits

  • Allow antenna configuration by calling driver's function for it.

    We disallow antenna configuration if the wiphy is already running, mainly to
    make life easier for 802.11n drivers which need to recalculate HT capabilites.

    Signed-off-by: Bruno Randolf
    Signed-off-by: John W. Linville

    Bruno Randolf
     
  • The lower driver is notified when the fragmentation threshold changes
    and upon a reconfig of the interface.

    If the driver supports hardware TX fragmentation, don't fragment
    packets in the stack.

    Signed-off-by: Arik Nemtsov
    Signed-off-by: John W. Linville

    Arik Nemtsov
     

17 Sep, 2010

1 commit

  • When a driver advertises p2p device support,
    mac80211 will handle it, but internally it will
    rewrite the interface type to STA/AP rather than
    P2P-STA/GO since otherwise a lot of paths need
    to be touched that are otherwise identical. A
    p2p boolean tells drivers whether or not a given
    interface will be used for p2p or not.

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

    Johannes Berg
     

28 Aug, 2010

1 commit

  • Add support to mac80211 for changing the interface
    type even when the interface is UP, if the driver
    supports it.

    To achieve this
    * add a new driver callback for switching,
    * split some of the interface up/down code out
    into new functions (do_open/do_stop), and
    * maintain an own __SDATA_RUNNING bit that will
    not be set during interface type, so that any
    other code doesn't use the interface.

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

    Johannes Berg
     

17 Aug, 2010

1 commit

  • Currently, mac80211 translates the cfg80211
    cipher suite selectors into ALG_* values.
    That isn't all too useful, and some drivers
    benefit from the distinction between WEP40
    and WEP104 as well. Therefore, convert it
    all to use the cipher suite selectors.

    Signed-off-by: Johannes Berg
    Acked-by: Gertjan van Wingerde
    Signed-off-by: John W. Linville

    Johannes Berg
     

30 Jun, 2010

1 commit


15 Jun, 2010

2 commits

  • There is a circular locking dependency when configuring the
    hardware ARP filters on association, occurring when flushing the mac80211
    workqueue. This is what happens:

    [ 92.026800] =======================================================
    [ 92.030507] [ INFO: possible circular locking dependency detected ]
    [ 92.030507] 2.6.34-04781-g2b2c009 #85
    [ 92.030507] -------------------------------------------------------
    [ 92.030507] modprobe/5225 is trying to acquire lock:
    [ 92.030507] ((wiphy_name(local->hw.wiphy))){+.+.+.}, at: [] flush_workq
    ueue+0x0/0xb0
    [ 92.030507]
    [ 92.030507] but task is already holding lock:
    [ 92.030507] (rtnl_mutex){+.+.+.}, at: [] rtnl_lock+0x12/0x20
    [ 92.030507]
    [ 92.030507] which lock already depends on the new lock.
    [ 92.030507]
    [ 92.030507]
    [ 92.030507] the existing dependency chain (in reverse order) is:
    [ 92.030507]
    [ 92.030507] -> #2 (rtnl_mutex){+.+.+.}:
    [ 92.030507] [] lock_acquire+0xdb/0x110
    [ 92.030507] [] mutex_lock_nested+0x44/0x300
    [ 92.030507] [] rtnl_lock+0x12/0x20
    [ 92.030507] [] ieee80211_assoc_done+0x6c/0xe0 [mac80211]
    [ 92.030507] [] ieee80211_work_work+0x31d/0x1280 [mac80211]

    [ 92.030507] -> #1 ((&local->work_work)){+.+.+.}:
    [ 92.030507] [] lock_acquire+0xdb/0x110
    [ 92.030507] [] worker_thread+0x22a/0x370
    [ 92.030507] [] kthread+0x96/0xb0
    [ 92.030507] [] kernel_thread_helper+0x4/0x10
    [ 92.030507]
    [ 92.030507] -> #0 ((wiphy_name(local->hw.wiphy))){+.+.+.}:
    [ 92.030507] [] __lock_acquire+0x1c0c/0x1d50
    [ 92.030507] [] lock_acquire+0xdb/0x110
    [ 92.030507] [] flush_workqueue+0x4e/0xb0
    [ 92.030507] [] ieee80211_stop_device+0x2b/0xb0 [mac80211]
    [ 92.030507] [] ieee80211_stop+0x3e5/0x680 [mac80211]

    The locking in this case is quite complex. Fix the problem by rewriting the
    way the hardware ARP filter list is handled - i.e. make a copy of the address
    list to the bss_conf struct, and provide that list to the hardware driver
    when needed.

    The current patch will enable filtering also in promiscuous mode. This may need
    to be changed in the future.

    Reported-by: Reinette Chatre
    Signed-off-by: Juuso Oikarinen
    Signed-off-by: John W. Linville

    Juuso Oikarinen
     
  • Currently, driver tracing is sometimes invoked
    after and sometimes before the actual driver
    callback. This is fine as long as the driver
    has no tracing itself, but as soon as it does
    it gets confusing.

    To make traces containing such information
    easier to read, introduce a return tracer in
    mac80211 that essentially brackets any driver
    tracing, and invoke the real trace before the
    driver's callback, only showing the return
    value, if any, afterwards.

    Since tracing records the process, there's no
    problem with overlapping calls if that should
    happen.

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

    Johannes Berg
     

04 Jun, 2010

2 commits

  • There's no sense in letting anything but internal
    mac80211 functions set the initiator to anything
    but WLAN_BACK_INITIATOR, since WLAN_BACK_RECIPIENT
    is only valid when we have received a frame from
    the peer, which we react to directly in mac80211.

    The debugfs code I recently added got this wrong
    as well.

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

    Johannes Berg
     
  • Some hardware allow extended filtering of ARP frames not intended for
    the host. To perform such filtering, the hardware needs to know the current
    IP address(es) of the host, bound to its interface.

    Add support for ARP filtering to mac80211 by adding a new op to the driver
    interface, allowing to configure the current IP addresses. This op is called
    upon association with the currently configured address(es), and when
    associated whenever the IP address(es) change.

    This patch adds configuration of IPv4 addresses only, as IPv6 addresses don't
    need ARP filtering.

    Signed-off-by: Juuso Oikarinen
    Reviewed-by: Johannes Berg
    Signed-off-by: John W. Linville

    Juuso Oikarinen
     

13 May, 2010

1 commit

  • This adds support for offloading the channel switch
    operation to devices that support such, typically
    by having specific firmware API for it. The reasons
    for this could be that the firmware provides better
    timing or that regulatory enforcement done by the
    device requires special handling of CSAs.

    In order to allow drivers to specify the timing to
    the device, the new channel_switch callback will
    pass through the received frame's mactime, where
    available.

    Signed-off-by: Wey-Yi Guy
    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

28 Apr, 2010

1 commit

  • When scanning, it is somewhat important to scan
    on the correct virtual interface. All drivers
    that currently implement hw_scan only support a
    single virtual interface, but that may change
    and then we'd want to be ready.

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

    Johannes Berg
     

09 Apr, 2010

1 commit

  • Enhance tracing by adding tracing for a variety of
    callbacks that the drivers call, and also for
    internal calls (currently limited to queue status).
    This can aid debugging what is going on in mac80211
    in interaction with drivers, since we can now see
    what drivers call and not just what mac80211 calls
    in the driver.

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

    Johannes Berg
     

09 Feb, 2010

3 commits

  • get_tx_stats() driver operation is not currently used anywhere in mac80211
    and there are no plans to use it in the not-so-near future. So it can go
    without anyone missing it.

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

    Kalle Valo
     
  • Many drivers would like to sleep during station
    addition and removal, and currently have a high
    complexity there from not being able to.

    This introduces two new callbacks sta_add() and
    sta_remove() that drivers can implement instead
    of using sta_notify() and that can sleep, and
    the new sta_add() callback is also allowed to
    fail.

    The reason we didn't do this previously is that
    the IBSS code wants to insert stations from the
    RX path, which is a tasklet, so cannot sleep.
    This patch will keep the station allocation in
    that path, but moves adding the station to the
    driver out of line. Since the addition can now
    fail, we can have IBSS peer structs the driver
    rejected -- in that case we still talk to the
    station but never tell the driver about it in
    the control.sta pointer. If there will ever be
    a driver that has a low limit on the number of
    stations and that cannot talk to any stations
    that are not known to it, we need to do come up
    with a new strategy of handling larger IBSSs,
    maybe quicker expiry or rejecting peers.

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

    Johannes Berg
     
  • Conflicts:
    net/mac80211/scan.c

    John W. Linville
     

27 Jan, 2010

1 commit

  • I got below kernel oops when I try to bring down the network interface if
    ftrace is enabled. The root cause is drv_ampdu_action() is passed with a
    NULL ssn pointer in the BA session tear down case. We need to check and
    avoid dereferencing it in trace entry assignment.

    BUG: unable to handle kernel NULL pointer dereference
    Modules linked in: at (null)
    IP: [] ftrace_raw_event_drv_ampdu_action+0x10a/0x160 [mac80211]
    *pde = 00000000
    Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
    [...]
    Call Trace:
    [] ? ftrace_raw_event_drv_ampdu_action+0x0/0x160 [mac80211]
    [] ? __ieee80211_stop_rx_ba_session+0xfc/0x220 [mac80211]
    [] ? ieee80211_sta_tear_down_BA_sessions+0x3b/0x50 [mac80211]
    [] ? ieee80211_set_disassoc+0xe6/0x230 [mac80211]
    [] ? ieee80211_set_disassoc+0x9c/0x230 [mac80211]
    [] ? ieee80211_mgd_deauth+0x158/0x170 [mac80211]
    [] ? ieee80211_deauth+0x1b/0x20 [mac80211]
    [] ? __cfg80211_mlme_deauth+0xe9/0x120 [cfg80211]
    [] ? __cfg80211_disconnect+0x170/0x1d0 [cfg80211]

    Cc: Johannes Berg
    Cc: stable@kernel.org
    Signed-off-by: Zhu Yi
    Signed-off-by: John W. Linville

    Zhu Yi
     

23 Jan, 2010

1 commit


13 Jan, 2010

1 commit


29 Dec, 2009

1 commit

  • We've long lacked a good confirmation that frames
    have really gone out, e.g. before going off-channel
    for a scan. Add a flush() operation that drivers
    can implement to provide that confirmation, and use
    it in a few places:
    * before scanning sends the nullfunc frames
    * after scanning sends the nullfunc frames, if any
    * when going idle, to send any pending frames

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

    Johannes Berg