1. 06 10月, 2016 3 次提交
  2. 14 8月, 2014 1 次提交
  3. 13 3月, 2014 3 次提交
    • K
      ath6kl: use braces on both arms of if statement · a5d8f9df
      Kalle Valo 提交于
      Fixes checkpatch warning:
      
      CHECK: braces {} should be used on all arms of this statement
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      a5d8f9df
    • K
      ath6kl: fix blank lines before and after braces · 3629fa14
      Kalle Valo 提交于
      Fixes checkpatch warnings:
      
      CHECK: Blank lines aren't necessary after an open brace '{'
      CHECK: Blank lines aren't necessary before a close brace '}'
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      3629fa14
    • K
      ath6kl: fix struct hif_scatter_req list handling · 31b9cc9a
      Kalle Valo 提交于
      Jason noticed that with Yocto GCC 4.8.1 ath6kl crashes with this iperf command:
      
      iperf -c $TARGET_IP -i 5 -t 50 -w 1M
      
      The crash was:
      
      Unable to handle kernel paging request at virtual address 1a480000
      pgd = 80004000
      [1a480000] *pgd=00000000
      Internal error: Oops: 805 [#1] SMP ARM
      Modules linked in: ath6kl_sdio ath6kl_core [last unloaded: ath6kl_core]
      CPU: 0 PID: 1953 Comm: kworker/u4:0 Not tainted 3.10.9-1.0.0_alpha+dbf364b #1
      Workqueue: ath6kl ath6kl_sdio_write_async_work [ath6kl_sdio]
      task: dcc9a680 ti: dc9ae000 task.ti: dc9ae000
      PC is at v7_dma_clean_range+0x20/0x38
      LR is at dma_cache_maint_page+0x50/0x54
      pc : [<8001a6f8>]    lr : [<800170fc>]    psr: 20000093
      sp : dc9afcf8  ip : 8001a748  fp : 00000004
      r10: 00000000  r9 : 00000001  r8 : 00000000
      r7 : 00000001  r6 : 00000000  r5 : 80cb7000  r4 : 03f9a480
      r3 : 0000001f  r2 : 00000020  r1 : 1a480000  r0 : 1a480000
      Flags: nzCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
      Control: 10c53c7d  Table: 6cc5004a  DAC: 00000015
      Process kworker/u4:0 (pid: 1953, stack limit = 0xdc9ae238)
      Stack: (0xdc9afcf8 to 0xdc9b0000)
      fce0:                                                       80c9b29c 00000000
      fd00: 00000000 80017134 8001a748 dc302ac0 00000000 00000000 dc454a00 80c12ed8
      fd20: dc115410 80017238 00000000 dc454a10 00000001 80017588 00000001 00000000
      fd40: 00000000 dc302ac0 dc9afe38 dc9afe68 00000004 80c12ed8 00000000 dc454a00
      fd60: 00000004 80436f88 00000000 00000000 00000600 0000ffff 0000000c 80c113c4
      fd80: 80c9b29c 00000001 00000004 dc115470 60000013 dc302ac0 dc46e000 dc302800
      fda0: dc9afe10 dc302b78 60000013 dc302ac0 dc46e000 00000035 dc46e5b0 80438c90
      fdc0: dc9afe10 dc302800 dc302800 dc9afe68 dc9afe38 80424cb4 00000005 dc9afe10
      fde0: dc9afe20 80424de8 dc9afe10 dc302800 dc46e910 80424e90 dc473c00 dc454f00
      fe00: 000001b5 7f619d64 dcc7c830 00000000 00000000 dc9afe38 dc9afe68 00000000
      fe20: 00000000 00000000 dc9afe28 dc9afe28 80424d80 00000000 00000035 9cac0034
      fe40: 00000000 00000000 00000000 00000000 000001b5 00000000 00000000 00000000
      fe60: dc9afe68 dc9afe10 3b9aca00 00000000 00000080 00000034 00000000 00000100
      fe80: 00000000 00000000 dc9afe10 00000004 dc454a00 00000000 dc46e010 dc46e96c
      fea0: dc46e000 dc46e964 00200200 00100100 dc46e910 7f619ec0 00000600 80c0e770
      fec0: dc15a900 dcc7c838 00000000 dc46e954 8042d434 dcc44680 dc46e954 dc004400
      fee0: dc454500 00000000 00000000 dc9ae038 dc004400 8003c450 dcc44680 dc004414
      ff00: dc46e954 dc454500 00000001 dcc44680 dc004414 dcc44698 dc9ae000 dc9ae030
      ff20: 00000001 dc9ae000 dc004400 8003d158 8003d020 00000000 00000000 80c53941
      ff40: dc9aff64 dcb71ea0 00000000 dcc44680 8003d020 00000000 00000000 00000000
      ff60: 00000000 80042480 00000000 00000000 000000f8 dcc44680 00000000 00000000
      ff80: dc9aff80 dc9aff80 00000000 00000000 dc9aff90 dc9aff90 dc9affac dcb71ea0
      ffa0: 800423cc 00000000 00000000 8000e018 00000000 00000000 00000000 00000000
      ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
      [<8001a6f8>] (v7_dma_clean_range+0x20/0x38) from [<800170fc>] (dma_cache_maint_page+0x50/0x54)
      [<800170fc>] (dma_cache_maint_page+0x50/0x54) from [<80017134>] (__dma_page_cpu_to_dev+0x34/0x9c)
      [<80017134>] (__dma_page_cpu_to_dev+0x34/0x9c) from [<80017238>] (arm_dma_map_page+0x64/0x68)
      [<80017238>] (arm_dma_map_page+0x64/0x68) from [<80017588>] (arm_dma_map_sg+0x7c/0xf4)
      [<80017588>] (arm_dma_map_sg+0x7c/0xf4) from [<80436f88>] (sdhci_send_command+0x894/0xe00)
      [<80436f88>] (sdhci_send_command+0x894/0xe00) from [<80438c90>] (sdhci_request+0xc0/0x1ec)
      [<80438c90>] (sdhci_request+0xc0/0x1ec) from [<80424cb4>] (mmc_start_request+0xb8/0xd4)
      [<80424cb4>] (mmc_start_request+0xb8/0xd4) from [<80424de8>] (__mmc_start_req+0x60/0x84)
      [<80424de8>] (__mmc_start_req+0x60/0x84) from [<80424e90>] (mmc_wait_for_req+0x10/0x20)
      [<80424e90>] (mmc_wait_for_req+0x10/0x20) from [<7f619d64>] (ath6kl_sdio_scat_rw.isra.10+0x1dc/0x240 [ath6kl_sdio])
      [<7f619d64>] (ath6kl_sdio_scat_rw.isra.10+0x1dc/0x240 [ath6kl_sdio]) from [<7f619ec0>] (ath6kl_sdio_write_async_work+0x5c/0x104 [ath6kl_sdio])
      [<7f619ec0>] (ath6kl_sdio_write_async_work+0x5c/0x104 [ath6kl_sdio]) from [<8003c450>] (process_one_work+0x10c/0x370)
      [<8003c450>] (process_one_work+0x10c/0x370) from [<8003d158>] (worker_thread+0x138/0x3fc)
      [<8003d158>] (worker_thread+0x138/0x3fc) from [<80042480>] (kthread+0xb4/0xb8)
      [<80042480>] (kthread+0xb4/0xb8) from [<8000e018>] (ret_from_fork+0x14/0x3c)
      Code: e1a02312 e2423001 e1c00003 f57ff04f (ee070f3a)
      ---[ end trace 0c038f0b8e0b67a3 ]---
      Kernel panic - not syncing: Fatal exception
      
      Jason's analysis:
      
        "The GCC 4.8.1 compiler will not do the for-loop till scat_entries, instead,
         it only run one round loop. This may be caused by that the GCC 4.8.1 thought
         that the scat_list only have one item and then no need to do full iteration,
         but this is simply wrong by looking at the assebly code. This will cause the sg
         buffer not get set when scat_entries > 1 and thus lead to kernel panic.
      
         Note: This issue not observed with GCC 4.7.2, only found on the GCC 4.8.1)"
      
      Fix this by using the normal [0] style for defining unknown number of list
      entries following the struct. This also fixes corruption with scat_q_depth, which
      was mistankely added to the end of struct and overwritten if there were more
      than item in the scat list.
      Reported-by: NJason Liu <r64343@freescale.com>
      Tested-by: NJason Liu <r64343@freescale.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      31b9cc9a
  4. 01 6月, 2013 1 次提交
  5. 18 3月, 2013 1 次提交
  6. 05 3月, 2013 1 次提交
  7. 24 10月, 2012 4 次提交
  8. 30 4月, 2012 1 次提交
  9. 23 4月, 2012 1 次提交
  10. 16 4月, 2012 1 次提交
  11. 12 4月, 2012 1 次提交
  12. 26 3月, 2012 1 次提交
  13. 13 3月, 2012 1 次提交
  14. 08 3月, 2012 2 次提交
  15. 07 3月, 2012 2 次提交
    • R
      ath6kl: Check wow state before sending control and data pkt · 390a8c8f
      Raja Mani 提交于
      Below two scenarios are taken care in this patch which helped
      to fix the firmware crash during wow suspend/resume.
      
      * TX operation (ctrl tx and data tx) has to be controlled based
        on suspend state. i.e, with respect to WOW mode, control packets
        are allowed to send from the host until the suspend state goes
        ATH6KL_STATE_WOW and the data packets are allowed until WOW
        suspend operation starts.
      
      * Similarly, wow resume is NOT allowed if WOW suspend is in progress.
      Signed-off-by: NRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      390a8c8f
    • R
      ath6kl: Add provision to define suspend policy in disconnected state. · 1e9a905d
      Raja Mani 提交于
      It gives flexibility to the user to define suspend policy
      when the suspend mode is set to WOW and the device is in
      disconnected state at the time of suspend.
      
      New module parameter wow_mode is added to get the choice
      from the user. This parameter is valid only if the module
      parameter suspend_mode is set to WOW.
      
      To force WOW in connected state and cut power
      in disconnected state:
        suspend_mode=0x3 wow_mode=0x1
      
      To force WOW in connected state and deep sleep
      in disconnected state (this is also the default wow_mode):
         suspend_mode=0x3 wow_mode=0x2
      
      If there is no value specified to wow_mode during insmod,
      deep sleep mode will be tried in the disconnected state.
      
      kvalo: clarified commit log
      Signed-off-by: NRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      1e9a905d
  16. 06 3月, 2012 1 次提交
  17. 01 3月, 2012 1 次提交
    • R
      ath6kl: Fix random system lockup · d1f41597
      Raja Mani 提交于
      The commit "ath6kl: Use a mutex_lock to avoid
      race in diabling and handling irq" introduces a
      state where ath6kl_sdio_irq_handler() would be waiting
      to claim the sdio function for receive indefinitely
      when things happen in the following order.
      
      ath6kl_sdio_irq_handler()
      	- aquires mtx_irq
      	- sdio_release_host()
      					ath6kl_sdio_irq_disable()
      						- sdio_claim_host()
      						- sleep on mtx_irq
      	ath6kl_hif_intr_bh_handler()
      		- (indefinitely) wait for the sdio
      		  function to be released to exclusively claim
      		  it again for receive operation.
      
      Fix this by replacing the mtx_irq with an atomic
      variable and a wait_queue.
      
      kvalo: add ath6kl_sdio_is_on_irq() due to open parenthesis alignment
      Signed-off-by: NRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: NVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      d1f41597
  18. 08 2月, 2012 2 次提交
  19. 01 2月, 2012 1 次提交
  20. 31 1月, 2012 1 次提交
    • R
      ath6kl: Re-architect suspend mode handling in ath6kl_sdio_suspend · e390af77
      Raja Mani 提交于
      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: NRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      e390af77
  21. 24 1月, 2012 1 次提交
  22. 18 1月, 2012 2 次提交
    • K
      ath6kl: add back beginnings of USB support · 241b128b
      Kalle Valo 提交于
      John Linville had to revert the part of USB support which was already
      in ath6kl due to build problems in commit cb00ec38 ("ath6kl: revert
      USB support"). Now that I fixed the build problems properly by adding
      ath6kl_core.ko kernel module it's possible to add back the
      (incomplete) USB support. This patch is a revert of John's patch and
      adds back the USB code which as already in ath6kl, only difference
      being minor changes in Makefile and adapting usb.c to new core
      function names.
      
      Note that USB support in ath6kl is not complete yet. This code only
      makes it possible to boot firmware but as HTC layer does not yet
      support USB it's not possible to send any WMI commands nor data
      packets to the firmware. That will be added soon.
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      241b128b
    • K
      ath6kl: create core.c · 45eaa78f
      Kalle Valo 提交于
      Currently core functions are spread between various files, group all
      the functions into file and rename the functions to follow the style
      used elsewhere in the driver. This will make it easier to a separate core
      module.
      
      Also fix a bug where wiphy is freed too early.
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      45eaa78f
  23. 12 1月, 2012 1 次提交
    • S
      ath6kl: Fix SDIO error path · 866dc886
      Sujith Manoharan 提交于
      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: NSujith Manoharan <c_manoha@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      866dc886
  24. 09 1月, 2012 1 次提交
  25. 05 1月, 2012 1 次提交
  26. 23 12月, 2011 1 次提交
    • K
      ath6kl: handle firmware names more dynamically · c0038972
      Kalle Valo 提交于
      Currently ath6kl has just hardcoded paths to each firmware file. Change
      this more dynamic by separating the the directory and file name from each
      other. That way it's easier to dynamically create full paths to firmware and
      code looks better. And now it's possible to remove a function needed by
      devicetree code.
      
      While at it add a structure inside struct ath6kl_hw to contain all
      firmware names. I deliberately omitted board file support as
      those will be handled later.
      
      This is needed for firmware API 3.
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      c0038972
  27. 13 12月, 2011 1 次提交
    • K
      ath6kl: implement scheduled scan · 10509f90
      Kalle Valo 提交于
      ath6kl firmware supports scheduled scan functionality with the wow ssid
      filter. But the firmware does not send any events after scan results
      so I had to add a timer which notifies about new scan results.
      
      Sched scan needs firmware version 3.2.0.6 or later. If firmware doesn't
      support sched scan the driver will not enable the feature.
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      10509f90
  28. 22 11月, 2011 1 次提交
    • R
      ath6kl: Use mutex to protect dma buffer in sync read write · fdb28589
      Raja Mani 提交于
      Firmware crashes while starting Soft AP in 32 bit x86 platform.
      The reason is that the single dma buffer (ar_sdio->dma_buffer)
      is used in ath6kl_sdio_read_write_sync() for unaligned buffer
      handling and this function is called in the multiple context
      at the same time. So, finally hits dma buffer corruption and
      firmware crash.
      
      Mutex is used to protect dma buffer to avoid data corruption.
      Spin lock can not used to fix this issue since mmc stack
      read/write calls may for sleep.
      
      Observed this issue with recently commited patch
      "ath6kl: Claim sdio function only at appropriate places"
      861dd058
      
      kvalo: change name of mutex to more descriptive and add a comment
      about what it protects
      Signed-off-by: NRaja Mani <rmani@qca.qualcomm.com>
      Signed-off-by: NKalle Valo <kvalo@qca.qualcomm.com>
      fdb28589
  29. 16 11月, 2011 1 次提交