Skip to content


Subversion checkout URL

You can clone with
Download ZIP
branch: tx_sched
Commits on Sep 27, 2012
  1. @ariknem

    wlcore: improved Tx scheduling algorithm

    ariknem authored
    Prioritize EDCA by choosing the AC before anything else. Use the
    fast/slow link bitmap in FW to improve the scheduling algorithm for
    the multi-link scenario.
    Set packet thresholds to determine if a given link is high or low
    priority according to its speed. A slow link will be given high priority
    if the amount of packets queued for it in the FW is lower than the
    slow-threshold. Similarly, a fast link will be given high priority if
    the number of its packets queued in FW is smaller than the high-threshold.
    The improved algorithm:
    1. Choose optimal AC according to FW utilization
    2. Traversing the VIFs in a round-robin fashion, try to choose a high
       priority link. Links are traversed in a round-robin fashion inside a
    3. If no high priority links are found, choose the first non-empty
       (low priority) link found in the round robin.
    Signed-off-by: Arik Nemtsov <>
  2. @ariknem

    wlcore: track FW-allocated packets per link

    ariknem authored
    Move FW-allocation tracking code to the fw_status function and track
    allocations made by all links. These will be incorporated in the
    improved Tx scheduling algorithm.
    Manually zero the system link counters on op_stop, as this link is not
    allocated the normal way.
    Signed-off-by: Arik Nemtsov <>
  3. @ariknem

    wlcore: count packets held per AC in each vif

    ariknem authored
    This accounting will help find a vif that has data in a specific AC.
    Otherwise we have to traverse all the links, which can be lengthy for
    the AP case.
    Signed-off-by: Arik Nemtsov <>
  4. @ariknem

    wlcore: track wlvif inside per-link structure

    ariknem authored
    This allows us to pass only the link as a parameter to various functions
    and deduce the wlvif. Note that this member will be NULL for global
    Signed-off-by: Arik Nemtsov <>
  5. @ariknem

    wlcore: initialize per-link FW freed blocks correctly

    ariknem authored
    When a link is allocated, sometimes the "freed packets" counter in FW
    is non zero, but we always assumed it is. This caused us to incorrectly
    account FW allocated blocks in some cases.
    When operating in AP mode, this bug caused some stations to never
    come back from PSM.
    Signed-off-by: Arik Nemtsov <>
  6. @assafazulay @ariknem

    wlcore: restore default channel configuration

    assafazulay authored ariknem committed
    wlcore allocates two static structs wl1271_band_2ghz & wl1271_band_5ghz
    which are used/modified by Reg-Domain e.g. some channel might be marked
    as passive at some point. Make sure we don't keep stale settings around
    if the HW is unregistered/registered during operation.
    [Arik - use Tx-power constant and tweak commit message]
    Signed-off-by: Victor Goldenshtein <>
    Signed-off-by: Assaf Azulay <>
    Signed-off-by: Arik Nemtsov <>
Commits on Sep 25, 2012
  1. @ariknem

    wlcore: consolidate free_link and always call it

    ariknem authored
    Make sure free_link is always called when removing an interface. This
    ensures all skbs belonging to this interface are returned to mac80211.
    Otherwise these dangling skbs might crash the system on the next
    call to wl1271_tx_reset_link_queues(). This happens on recovery/stop or
    an unsuccessful Tx flush.
    Signed-off-by: Ido Yariv <>
    Signed-off-by: Arik Nemtsov <>
  2. @ariknem

    wlcore: take the mutex before resetting Tx queues

    ariknem authored
    Otherwise we risk contention for private members of our global structure
    while op_stop_locked is running.
    Reported-by: Ido Yariv <>
    Signed-off-by: Arik Nemtsov <>
  3. @victorgld @ariknem

    wlcore: remove unnecessary WARN_ON in wl12xx_tx_reset

    victorgld authored ariknem committed
    Sometimes the driver can perform a recovery while Tx is
    active, this will trigger unnecessary warning which might
    delay the recovery for more than 100 mS.
    Signed-off-by: Victor Goldenshtein <>
Commits on Sep 24, 2012
  1. @idor

    wl18xx: FDSP Clock (FDSP Code RAM Corruption fix)

    idor authored
    In PG2.0 there is an issue where PHY's FDSP Code RAM sometimes gets
    corrupted when exiting from ELP mode. This issue is related to FDSP
    Code RAM clock implementation.
    PG2.1 introduces a HW fix for this issue that requires the driver to
    change the FDSP Code Ram clock settings (mux it to ATGP clock instead
    of its own clock).
    This workaround uses PHY_FPGA_SPARE_1 register and is relevant to WL8
    PG2.1 devices.
    The fix is also backward compatible with older PG2.0 devices where the
    register PHY_FPGA_SPARE_1 is not used and not connected.
    The fix is done in the wl18xx_pre_upload function (must be performed
    before uploading the FW code) and includes the following steps:
    1. Disable FDSP clock
    2. Set ATPG clock toward FDSP Code RAM rather than its own clock.
    3. Re-enable FDSP clock
    Signed-off-by: Yair Shapira <>
    Signed-off-by: Ido Reis <>
  2. @idor

    wlcore: fwlog dynamic mem_block control

    idor authored
    number of fwlog mem_blocks can be configured using module param.
    this is a fw debug feature: in case a large fw log data is busrted during
    a short period of time, the memory get filled and data is lost.
    this allows us to dynamicly set the fw log mem_block usage, although
    configuring more mem_block for logger comes at the expense of TP.
    Signed-off-by: Yair Shapira <>
    Signed-off-by: Ido Reis <>
Commits on Sep 20, 2012
  1. @ariknem

    mac80211: ignore global channel type when starting AP

    ariknem authored
    A bogus check was left in the code that failed the creation of an AP
    with a channel different from that configured to an already operating
    Signed-off-by: Arik Nemtsov <>
Commits on Sep 13, 2012
  1. @ariknem

    nl80211: update definitions from newest wpa_s

    ariknem authored
    added channel switch related commands
    Signed-off-by: Arik Nemtsov <>
Commits on Sep 9, 2012
  1. @elp @idor

    18xx: declare support for greenfield ht_cap

    elp authored idor committed
    The 18xx fw supports greenfield so add the
    IEEE80211_HT_CAP_GRN_FLD flag to the supported
    ht capabilities flags.
    Signed-off-by: Eliad Peller <>
    Signed-off-by: Ido Reis <>
  2. @elp

    mac80211: use call_rcu() on sta deletion

    elp authored
    mac80211 calls synchronize_rcu() on sta deletion,
    which increase the roaming time significantly.
    Convert it into a call_rcu() mechanism, in order
    to avoid blocking. Since some of the cleanup
    functions might sleep, schedule from the call_rcu
    callback a new work that will do the actual cleanup.
    In order to make sure the cleanup occurs before
    the interface went down, flush local->workqueue
    on ieee80211_do_stop().
    Signed-off-by: Yoni Divinsky <>
    Signed-off-by: Eliad Peller <>
  3. @elp

    mac80211: use synchronize_net() on key destroying

    elp authored
    __ieee80211_key_destroy() calls synchronize_rcu() in
    order to sync the tx path before destroying the key.
    However, synching the tx path can be done with
    synchronize_net() as well, which is usually faster
    (the timing might be important for roaming scenarios).
    Signed-off-by: Eliad Peller <>
  4. @elp

    mac80211: clear bssid on auth/assoc failure

    elp authored
    ifmgd->bssid wasn't cleared properly in some
    auth/assoc failure cases, causing mac80211 and
    the low-level driver to go out of sync.
    Clear ifmgd->bssid on failure, and notify the driver.
    Cc: # 3.4+
    Signed-off-by: Eliad Peller <>
  5. @elp
  6. @elp

    wlcore: check wl->state before setting default key

    elp authored
    wl1271_op_set_default_key_idx() lacks a check
    of wl->state, causing the driver to try writing
    to a powered-off device in some cases (e.g.
    during recovery)
    Signed-off-by: Eliad Peller <>
Commits on Sep 6, 2012
  1. @ariknem @idor

    wlcore: update AP rates after band change

    ariknem authored idor committed
    The channel and band are updated after the basic rates have already
    been set. This causes us to choose wrong HW rate indices that are passed
    to FW. Fix this by updating basic rates when the channel is updated.
    Signed-off-by: Arik Nemtsov <>
Commits on Sep 5, 2012
  1. @ariknem

    Revert "mac80211: use legacy mode for all ACs"

    ariknem authored
    This reverts commit a5e6e2a.
    There are problems with BT voice if we don't use UAPSD mode for VO.
  2. @ariknem

    wlcore: clear roc_vif on iface removal

    ariknem authored
    When removing an interface currently performing a ROC operation, clear
    the current ROC state. This is useful especially during recovery and
    keeps mac80211 in sync to our state.
    Signed-off-by: Arik Nemtsov <>
Commits on Sep 4, 2012
  1. @yonid @ariknem

    mac80211: Delay sta deletion to make roaming faster (INTERNAL)

    yonid authored ariknem committed
    In mac80211 STA all peers are deleted before auth
    to a new AP. Due to the rcu synchornization this
    process can take a long period.
    Move the sta object freeing of the old AP and
    the rcu synchronization to a later time after
    the roaming is completed.
    Signed-off-by: Yoni Divinsky <>
    Signed-off-by: Eliad Peller <>
  2. @elp @ariknem

    wlcore: protect wlcore_op_set_key with mutex

    elp authored ariknem committed
    wlcore_op_set_key() calls wl18xx_set_key(),
    which in turn executes some of his function
    calls without acquiring wl->mutex and making
    sure the fw is awake.
    Adding mutex_lock()/ps_elp_wakeup() calls is
    not enough, as wl18xx_set_key() calls
    wl1271_tx_flush() which can't be called while
    the mutex is taken.
    Add the required calls to wlcore_op_set_key,
    but limit the queues_stop and flushing
    to the only encryption types in which
    a spare block might be needed (GEM and TKIP).
    [Arik - move state != ON check]
    Signed-off-by: Eliad Peller <>
    Signed-off-by: Arik Nemtsov <>
Commits on Sep 3, 2012
  1. @elp

    wlcore: remove WLCORE_QUIRK_NO_ELP

    elp authored
    all the current firmwares support elp, so
    we can safely remove WLCORE_QUIRK_NO_ELP.
    Signed-off-by: Eliad Peller <>
  2. @elp
  3. @elp

    wlcore: decrease elp timeout

    elp authored
    The current elp timeout (the same as the dynamic
    ps timeout - 1500ms) is too high. Usually,
    wl1271_ps_elp_sleep() get called right after tx/rx,
    which is fine, but some command might get sent
    even when there is no traffic (e.g. ht changes
    triggered by beacon frames), and leaving the
    device awake for 1500ms in this case is redundant.
    Use a timeout of 10ms.
    The fw won't enter elp anyway before the dynamic-ps
    timeout was expired as well (and it entered ps
    Signed-off-by: Eliad Peller <>
  4. @elp

    Revert "wlcore: add extended elp timeout support"

    elp authored
    This reverts commit 1ffffe4.
Commits on Sep 2, 2012
  1. @elp @ariknem

    wlcore: add extended elp timeout support

    elp authored ariknem committed
    The current elp timeout (the same as the dynamic
    ps timeout - 1500ms) is too high. Usually,
    wl1271_ps_elp_sleep() get called right after tx/rx,
    which is fine, but some command might get sent
    even when there is no traffic (e.g. ht changes
    triggered by beacon frames), and leaving the
    device awake for 1500ms is redundant.
    Revert the default elp timeout to 5ms, but add
    function to extend this period during rx/tx.
    Take care of previously configured extended elp
    timeout when calculating the timeout in
    Signed-off-by: Eliad Peller <>
Commits on Aug 30, 2012
  1. @yairs534 @idor

    wl18xx: update phy config and defaults

    yairs534 authored idor committed
    Modify phy config params structure to latest phy version
    Default values and min FW version were updated accordingly.
    Default external_pa_dc2dc value set to 0 (internal dc2dc).
    New firmware baseline is
    Signed-off-by: Yair Shapira <>
  2. @elp

    wlcore: allow ACX_BA_SESSION_RX_SETUP to fail

    elp authored
    Under some circumstances, that fw might be asked to
    remove a rx ba sessions it doesn't know about. In
    this case, instead of triggering a recovery, accept
    the error code (CMD_STATUS_NO_RX_BA_SESSION) and
    ignore it.
    Signed-off-by: Eliad Peller <>
  3. @elp

    wlcore: allow fw commands to fail

    elp authored
    Currently, each fw command/acx that return a status code
    different than CMD_STATUS_SUCCESS will trigger a recovery
    in the driver.
    However, it is a valid for some fw commands to fail (e.g.
    due to temporary lack of resources), so add new functions
    that allow passing bitmap of valid error return values.
    (make the current wl1271_cmd_send/wl1271_cmd_configure
    wrappers around the new functions, in order to avoid
    changing the whole driver)
    Signed-off-by: Eliad Peller <>
Commits on Aug 29, 2012
  1. @idor

    Revert "18xx: declare support for greenfield ht_cap"

    idor authored
    FW not support this yet, will be committed again once its does.
    This reverts commit 1473b8c.
  2. @elp

    wlcore: pass wmm configuration to the fw

    elp authored
    New fields were added to start_role(ap) and
    set_peer_state commands, so the fw will be
    able to know whether the sta/ap supports
    wmm (the fw uses it in order to choose the
    AC for some of its internally-generated frames)
    For sta, take this value right from bss_conf->qos.
    For ap, check for wmm support by looking for the
    WMM IE in the configured beacon.
    Signed-off-by: Eliad Peller <>
  3. @gitido @ariknem

    wlcore: Allow memory access when the FW crashes

    gitido authored ariknem committed
    When the no_recovery flag is used, the recovery work will not restart
    the FW and the state will not be set to 'on'. To enable post-mortem
    analysis, allow memory access in the 'restarting' state.
    Also, since the FW might not be operational, don't fail the read/write
    operations if elp_wakeup fails.
    Reported-by: Arkady Miasnikov <>
    Signed-off-by: Ido Yariv <>
Something went wrong with that request. Please try again.