1. 08 Feb, 2012 4 commits
    • Chilam Ng's avatar
      ath6kl: prioritize Tx bundling based on AC priorities · b29072cc
      Chilam Ng authored
      Tx bundling is the more efficient use of SDIO bus and allows more packet
      transfers with fewer bus transactions, and is a way to improve overall
      throughput. However, Tx bundling has only 4 scatter request resources available.
      When there are multiple traffic streams of different priorities, it's possible
      that lower priority traffic may hog all the scatter requests and lock out the
      higher prioirty traffic from bundling.
      Tx bundling is now enabled per AC. When an AC do a scatter request and
      the remaining scatter request resources is lower than a configurable
      threshold, it will disable Tx bundling for all AC's of lower priorities.
      When an AC has Tx bundling disabled and has no Tx bundles sent in a
      consecutive and configurable number of packets, Tx bundling will be re-enabled
      for that AC.
      Signed-off-by: default avatarChilam Ng <chilamng@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      b29072cc
    • Vasanthakumar Thiagarajan's avatar
      ath6kl: Update license header · 1b2df407
      Vasanthakumar Thiagarajan authored
      Update license header with the copyright to Qualcomm Atheros, Inc.
      for the year 2011-2012.
      Signed-off-by: default avatarVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      1b2df407
    • Kalle Valo's avatar
      ath6kl: add blocking debugfs file for retrieving firmware logs · c807b30d
      Kalle Valo authored
      When debugging firmware issues it's not always enough to get
      the latest firmware logs, sometimes we need to get logs from a longer
      period. To make this possible, add a debugfs file named fwlog_block. When
      reading from this file ath6kl will send firmware logs whenever available
      and otherwise it will block and wait for new logs.
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      c807b30d
    • Kalle Valo's avatar
      ath6kl: store firmware logs in skbuffs · 9b9a4f2a
      Kalle Valo authored
      Currently firmware logs are stored in a circular buffer, but this was
      not very flexible and fragile. It's a lot easier to store logs to struct
      skbuffs and store them in a skb queue. Also this makes it possible
      to easily increase the buffer size, even dynamically if we so want (but
      that's not yet supported).
      
      From user space point of view nothing should change.
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      9b9a4f2a
  2. 02 Feb, 2012 3 commits
  3. 31 Jan, 2012 1 commit
  4. 30 Jan, 2012 6 commits
    • Raja Mani's avatar
      ath6kl: Return a proper error code when not in connected state · 3c411a43
      Raja Mani authored
      Error code ENOTCONN is more suitable than EINVAL to report
      when the driver is not in connected state in ath6kl_wow_suspend().
      
      I found this during code review.
      Signed-off-by: default avatarRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      3c411a43
    • Raja Mani's avatar
      ath6kl: Wait for host sleep mode cmd processed event during WOW suspend · 081c7a84
      Raja Mani authored
      For every WMI_SET_HOST_SLEEP_MODE_CMDID command (send from the host),
      the firmware sends WMI_SET_HOST_SLEEP_MODE_CMD_PROCESSED_EVENTID as
      an acknowledgement to the host.
      
      In order to being sync with the firmware, the host has to wait for
      WMI_SET_HOST_SLEEP_MODE_CMD_PROCESSED_EVENT event before going to
      the suspend state. This patch ensures ath6kl_wow_suspend() waits
      until it gets this event after sending set host sleep mode command.
      
      This patch adds,
       * New command WMI_SET_HOST_SLEEP_MODE_CMD_PROCESSED_EVENTID in
         WMI event table.
       * New WMI function ath6kl_wmi_host_sleep_mode_cmd_prcd_evt_rx()
         to process the event.
       * New flag HOST_SLEEP_MODE_CMD_PROCESSED in VIF flags to record
         the arrival of the event.
      Signed-off-by: default avatarRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      081c7a84
    • Raja Mani's avatar
      ath6kl: Configure WOW patterns while going to wow_suspend · d91e8eee
      Raja Mani authored
      First preference is given to the user configured WOW patterns.
      If the user doesn't configure any patterns (for ex, via iw command),
      the default patterns will be configured based on the current mode
      (vif->nw_type) while going to WOW suspend.
      
      Summary of changes:
      
        * ath6kl_wow_ap() is added to configure the below default
          patterns when the system enters into WOW suspend in AP mode.
            + Unicast IP, EAPOL-like and ARP packet pattern
            + ARP packet pattern
            + mDNS/SSDP/LLMNR pattern
            + DHCP broadcast pattern
      
       * ath6kl_wow_sta() is added to configure the below default
         patterns when the system enters into WOW suspend in STA mode.
            + Unicast packet pattern
            + mDNS/SSDP/LLMNR pattern
      
        * Move the user provided WOW patterns configuration code
          from ath6kl_wow_suspend() to a separate function called
          ath6kl_wow_usr().
      
        * Two argument variable's ('filter' and 'mask) data type in
          ath6kl_wmi_add_wow_pattern_cmd() are changed from 'u8 *' to
          'const u8 *'. This is needed to make all pattern and mask
          arrays to be 'static const u8' in the caller function.
      
        * New conditional check is added to make sure user
          configured pattern count is within the limit (WOW_MAX_FILTERS_PER_LIST).
      Signed-off-by: default avatarRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      d91e8eee
    • Raja Mani's avatar
      ath6kl: Re-architect suspend mode handling in ath6kl_sdio_suspend · e390af77
      Raja Mani authored
      Using this patch, the user can bypass existing auto
      suspend mode selection logic and force ath6kl to enter
      into the suspend mode what he/she wants.
      
      If the user doesn't choose any suspend mode while doing
      insmod of the driver, auto suspend mode selection logic
      will kick in and choose suspend mode based on the host
      SDIO controller capability.
      
      Generic module parameter is required to specify suspend
      mode including Deep Sleep and WOW while doing insmod.
      Renaming existing mod param variable suspend_cutpower
      would be sufficient to meet this requirement.
      
      New module parameter suspend_mode can take any one of
      the below suspend state,
         1. cut power
         2. deep sleep
         3. wow
      Signed-off-by: default avatarRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      e390af77
    • Vasanthakumar Thiagarajan's avatar
      ath6kl: Fix kernel panic during rx aggregation · c8651541
      Vasanthakumar Thiagarajan authored
      "ath6kl: Define a structure for connection specific aggregation information"
      introduces this. In aggr_conn_init(), vif->aggr_cntxt is assigned to
      aggr_conn->aggr_info, but vif->aggr_cntxt is not initialized at this
      point, this would end up accessing an invalid pointer in aggregation
      receive path. Fix this by passing the correct aggr_info to aggr_conn_init().
      The panic trace would look like.
      
      [<ffffffff8159e02e>] panic+0xa1/0x1c6
      [<ffffffff8103773d>] ? kmsg_dump+0xfd/0x160
      [<ffffffff815a2f6a>] oops_end+0xea/0xf0
      [<ffffffff8102b95d>] no_context+0x11d/0x2d0
      [<ffffffff8102bc5d>] __bad_area_nosemaphore+0x14d/0x230
      [<ffffffff815a5c4d>] ? do_page_fault+0x30d/0x520
      [<ffffffff8102bd53>] bad_area_nosemaphore+0x13/0x20
      [<ffffffff815a5cfd>] do_page_fault+0x3bd/0x520
      [<ffffffff8108bd60>] ? __lock_acquire+0x320/0x1680
      [<ffffffff812e3a9d>] ? trace_hardirqs_off_thunk+0x3a/0x3c
      [<ffffffff815a2385>] page_fault+0x25/0x30
      [<ffffffffa0487a5f>] ? aggr_slice_amsdu+0xdf/0x170 [ath6kl_core]
      [<ffffffffa0487bac>] aggr_deque_frms+0xbc/0x190 [ath6kl_core]
      [<ffffffffa0488404>] ath6kl_rx+0x3e4/0xae0 [ath6kl_core]
      [<ffffffffa047ae77>] ath6kl_htc_rxmsg_pending_handler+0x8b7/0xf10 [ath6kl_core]
      [<ffffffffa00c82f0>] ? mmc_do_release_host+0x70/0x90 [mmc_core]
      [<ffffffffa00c833a>] ? mmc_release_host+0x2a/0x50 [mmc_core]
      [<ffffffffa04865c0>] ? ath6kl_alloc_amsdu_rxbuf+0x140/0x140 [ath6kl_core]
      [<ffffffffa0477772>] ath6kl_hif_intr_bh_handler+0x362/0x510 [ath6kl_core]
      [<ffffffffa01f1000>] ath6kl_sdio_irq_handler+0x60/0xb0 [ath6kl_sdio]
      [<ffffffffa00d30bc>] sdio_irq_thread+0xec/0x320 [mmc_core]
      [<ffffffffa00d2fd0>] ? sdio_claim_irq+0x220/0x220 [mmc_core]
      [<ffffffffa00d2fd0>] ? sdio_claim_irq+0x220/0x220 [mmc_core]
      [<ffffffff8105b21e>] kthread+0xbe/0xd0
      [<ffffffff815ab574>] kernel_thread_helper+0x4/0x10
      [<ffffffff815a2174>] ? retint_restore_args+0x13/0x13
      [<ffffffff8105b160>] ? __init_kthread_worker+0x70/0x70
      [<ffffffff815ab570>] ? gs_change+0x13/0x13
      Signed-off-by: default avatarVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      c8651541
    • Kalle Valo's avatar
      ath6kl: fix testmode when fw-2.bin or fw-3.bin is used · 5f1127ff
      Kalle Valo authored
      Testmode (TCMD and ART) was not enabled when fw-2.bin or fw-3.bin files
      were available, fix that by fetching testmode file just after the
      board file but before rest of the firmware files are fetched.
      
      I also added testmode field to struct ath6kl and moved the module parameter
      to core.c. Now all module parameters are grouped in one place.
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      5f1127ff
  5. 24 Jan, 2012 6 commits
  6. 18 Jan, 2012 12 commits
  7. 13 Jan, 2012 3 commits
    • Kalle Valo's avatar
      Merge remote branch 'wireless-next/master' into ath6kl-next · a0afd4f7
      Kalle Valo authored
      Conflicts:
      	drivers/net/wireless/ath/ath6kl/usb.c
      a0afd4f7
    • Raja Mani's avatar
      ath6kl: Remove useless initialization in ath6kl_read_fwlogs() · e80ec84d
      Raja Mani authored
      ath6kl_read_fwlogs() assigns the value zero to the variable 'ret'
      at the time of declaration. Later, return value of ath6kl_diag_read32()
      repalces the init value. Hence removing useless zero assignment.
      Signed-off-by: default avatarRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      e80ec84d
    • Thirumalai Pachamuthu's avatar
      ath6kl: Add support for uAPSD · c1762a3f
      Thirumalai Pachamuthu authored
      * A new APSD power save queue is added in the station structure.
      * When a station has APSD capability and goes to power save, the frame
        designated to the station will be buffered in APSD queue.
      * When the host receives a frame which the firmware marked as trigger,
        host delivers the buffered frame from the APSD power save queue.
        Number of frames to deliver is decided by MAX SP length.
      * When a station moves from sleep to awake state, all frames buffered
        in APSD power save queue are sent to the firmware.
      * When a station is disconnected, all frames bufferes in APSD power save
        queue are dropped.
      * When the host queues the first frame to the APSD queue or removes the
        last frame from the APSD queue, it is indicated to the firmware using
        WMI_AP_APSD_BUFFERED_TRAFFIC_CMD.
      
      kvalo: fix buggy handling of sks queues, made it more obvious
      the user priority when wmm is disabled, remove unneed else block and
      combined some variable declarations
      Signed-off-by: default avatarThirumalai Pachamuthu <tpachamu@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      c1762a3f
  8. 12 Jan, 2012 4 commits
    • Sujith Manoharan's avatar
      ath6kl: Fix listen interval handling · 8232736d
      Sujith Manoharan authored
      This patch addresses a few problems with the commit:
      
      "ath6kl: Implement support for listen interval from userspace"
      
      * The debugfs file required for reading/writing the listen interval
        wasn't created. Fix this.
      
      * The interface index was being hardcoded to zero. Fix this.
      
      * Two separate parameters, "listen_interval_time and listen_interval_beacons"
        were being used. This fails to work as expected because the FW assigns
        higher precedence to "listen_interval_beacons" and "listen_interval_time"
        ends up being never used at all.
      
        To handle this, fix the host driver to exclusively use listen interval
        based on units of beacon intervals.
      
      To set the listen interval, a user would now do something like this:
      
      echo "10" > /sys/kernel/debug/ieee80211/*/ath6kl/listen_interval
      
      kvalo: fix two checkpatch warnings
      Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      8232736d
    • Sujith Manoharan's avatar
      ath6kl: Initialize a variable properly · cbec267a
      Sujith Manoharan authored
      This prevents 'comp_pktq' from being used in an
      incorrect manner.
      Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      cbec267a
    • Sujith Manoharan's avatar
      ath6kl: Remove redundant pointer check · 4a8ce2fd
      Sujith Manoharan authored
      'params' is already used earlier and there is no point
      in checking for a NULL condition again.
      Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      4a8ce2fd
    • Sujith Manoharan's avatar
      ath6kl: Fix SDIO error path · 866dc886
      Sujith Manoharan authored
      sdio_release_host() would be called twice if sdio_set_block_size()
      fails for some reason, which would result in the following warning.
      
      WARNING: at /home/sujith/dev/wireless-testing/drivers/mmc/core/core.c:828 mmc_release_host+0x42/0x50 [mmc_core]()
      
      Call Trace:
      [<ffffffff81064fdf>] warn_slowpath_common+0x7f/0xc0
      [<ffffffff8106503a>] warn_slowpath_null+0x1a/0x20
      [<ffffffffa03beb42>] mmc_release_host+0x42/0x50 [mmc_core]
      [<ffffffffa03c917e>] sdio_release_host+0x1e/0x30 [mmc_core]
      [<ffffffffa053fac7>] ath6kl_sdio_config+0xc7/0x110 [ath6kl_sdio]
      [<ffffffffa053fd2c>] ath6kl_sdio_probe+0x21c/0x320 [ath6kl_sdio]
      [<ffffffffa03beb2a>] ? mmc_release_host+0x2a/0x50 [mmc_core]
      [<ffffffffa03c7d2a>] sdio_bus_probe+0xfa/0x130 [mmc_core]
      [<ffffffff813015ae>] driver_probe_device+0x7e/0x1b0
      [<ffffffff8130178b>] __driver_attach+0xab/0xb0
      [<ffffffff813016e0>] ? driver_probe_device+0x1b0/0x1b0
      [<ffffffff813016e0>] ? driver_probe_device+0x1b0/0x1b0
      [<ffffffff81300504>] bus_for_each_dev+0x64/0xa0
      [<ffffffff8130123e>] driver_attach+0x1e/0x20
      [<ffffffff81300e80>] bus_add_driver+0x1b0/0x280
      [<ffffffffa0065000>] ? 0xffffffffa0064fff
      [<ffffffff81301d06>] driver_register+0x76/0x140
      [<ffffffffa0065000>] ? 0xffffffffa0064fff
      [<ffffffffa03c7b71>] sdio_register_driver+0x21/0x30 [mmc_core]
      [<ffffffffa0065012>] ath6kl_sdio_init+0x12/0x35 [ath6kl_sdio]
      [<ffffffff81002042>] do_one_initcall+0x42/0x180
      [<ffffffff810b025f>] sys_init_module+0x8f/0x200
      [<ffffffff81425ac2>] system_call_fastpath+0x16/0x1b
      Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
      866dc886
  9. 09 Jan, 2012 1 commit