summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath6kl/sdio.c
Commit message (Collapse)AuthorAgeFilesLines
...
* | | ath6kl: add ar6004 firmwares to sdio moduleKalle Valo2011-11-161-0/+6
| | | | | | | | | | | | | | | | | | | | | When adding ar6004 SDIO support I forgot to add corresponding MODULE_FIRMWARE() definitions to sdio.c. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: use hardware version names consistentlyKalle Valo2011-11-161-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | Part of ath6kl uses "REV3" style of naming hardware versions and elsewhere "hw 2.1.1" is used instead for the same version. This is confusing, use the latter term everywhere. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: enable USB supportKalle Valo2011-11-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Now two modules are built, ath6kl_sdio.ko and ath6kl_usb.ko. But the USB module isn't fully functional yet as HTC layer is missing support and that's why it's marked as experimental for now. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: add hif_typeKalle Valo2011-11-131-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | In some rare cases core code needs to know what hif type is used. Add a field to struct ath6kl to denote that. Hopefully this is just a temporary solution. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: AR6004 SDIO supportNaveen Gangadharan2011-11-131-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add support for AR6004 SDIO. Tested scan, association (open mode) and ping. kvalo: change commit log a bit, drop board address changes Signed-off-by: Naveen Gangadharan <ngangadh@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: move diag commands to hif driverKalle Valo2011-11-131-0/+100
| | | | | | | | | | | | | | | | | | | | | | | | | | | This is preparation for USB support which will have different diag commands. Based on code by Kevin Fang. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: change bmi sizes being configurable by HIFKalle Valo2011-11-131-0/+1
| | | | | | | | | | | | | | | | | | | | | SDIO and USB have different maximum sizes for BMI commands so make that configurable. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | | ath6kl: move bmi calls to hif driverKalle Valo2011-11-131-0/+162
|/ / | | | | | | | | | | | | | | In preparation for USB support which has it's own method for bmi. Based on code by Kevin Fang. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Remove WARN_ON msg in Suspend pathRaja Mani2011-11-111-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | In the current code, WOW resume is executed first from RX path and ar->state is moved to ATH6KL_STATE_ON. When platform calls ath6kl_sdio_resume() in CFG resume context, that time ar->state could have moved to ON state. Printing WARN_ON(1) is void in this context. Hence removing this. Once WOW resume is removed from RX path, This WARN_ON msg can be reverted. Signed-off-by: Raja Mani <rmani@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Invoke WOW suspend/resume calls during PM operationRaja Mani2011-11-111-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | Link ath6kl's wow suspend/resume functions with the actual suspend/resume path. WOW mode is selected when the host sdio controller supports both MMC_PM_KEEP_POWER and MMC_PM_WAKE_SDIO_IRQ capabilities. kvalo: also adds a missing break in ath6kl_cfg80211_resume(), luckily it didn't have any effect on functionality. Signed-off-by: Raja Mani <rmani@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Include new parameter in suspend path for wowlanRaja Mani2011-11-111-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | cfg80211 layer provides user defined wow parameters like Filter options, Patterns, Pattern's mask, etc via "struct cfg80211_wowlan *wow" to suspend function. Right now, this wowlan parameter is not handled in __ath6kl_cfg80211_suspend func. This parameter has to be passed to HIF layer, So that it can be passed back to ath6kl's cfg interface layer when WOW mode is selected. In case of deep sleep and cut power mode, it's not handled. Signed-off-by: Raja Mani <rmani@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: add suspend_cutpower module parameterKalle Valo2011-11-111-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | This is to force ath6kl to power off hardware during suspend even if sdio support keep power. This is needed, for example, when sdio controller is buggy or maximum powersaving is desired. Usage: insmod ath6kl.ko suspend_cutpower=1 Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: cut power during suspendKalle Valo2011-11-111-8/+56
| | | | | | | | | | | | | | | | | | | | | | If sdio controller doesn't support keep power, cut power from hardware during suspend and restart firmware during resume. If we are connected during suspend, send a disconnected event to user space. Earlier suspend failed with an error if sdio didn't support keep power. Now suspend will happen succesfully even with that case. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: refactor sdio configuration to a separate functionKalle Valo2011-11-111-33/+44
| | | | | | | | | | | | | | | | These commands are also needed after cutpower suspend so create a function for them. Also fix memory leaks in ath6kl_sdio_probe() error path. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: implement ath6kl_cfg80211_suspend()Kalle Valo2011-11-111-7/+2
| | | | | | | | | | | | | | | | | | | | | | | | This is in preparation for cutpower suspend feature. HIF layer makes the decision based on information provided by cfg80211 and what hardware actually supports. Then it calls ath6kl_cfg80211_suspend() to enable the chosen mode. Functionality should be the same, this is just preparation for more suspend modes (cutpower and wow). Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: create ath6kl_hif_stop()Kalle Valo2011-11-111-0/+45
| | | | | | | | | | | | This is to reset hif layer for powering down hw. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: change name of sdio driver to ath6klKalle Valo2011-11-111-1/+1
| | | | | | | | | | | | | | | | Currently the name of the driver in struct sdio_driver is "ath6kl_sdio", this is for example what uevent advertises. This is wrong as the module is named as ath6kl.ko. Change it to "ath6kl" so that the names match. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: move power control from sdio to coreKalle Valo2011-11-111-12/+8
| | | | | | | | | | | | In preparation for cutting down power from the chip on the fly. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: add more boot debug messagesKalle Valo2011-11-111-9/+13
| | | | | | | | | | | | | | Move some of the debug logs to boot level because they are more interesting when debugging boot issues. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Refactor ath6kl_destroy()Vasanthakumar Thiagarajan2011-11-111-1/+1
| | | | | | | | | | | | | | So that the deinitialization of ath6kl and vif are separated. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Maintain firmware interface index in struct ath6kl_vifVasanthakumar Thiagarajan2011-11-111-1/+1
| | | | | | | | | | | | | | | | Pass this index to target in wmi commands to specify the interface for which the command needs to be handled. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Refactor wiphy dev and net dev init functionsVasanthakumar Thiagarajan2011-11-111-4/+4
| | | | | | | | | | | | | | | | This refactoring is done in a manner that it can be used for multiple virtual interface. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: unbreak suspendSam Leffler2011-11-111-1/+2
| | | | | | | | | | | | | | | | | | | | Add missing {}'s that caused ath6kl_sdio_suspend to always return -EINVAL causing suspend to be aborted. kvalo: I broke this in commit f7325b85e ("ath6kl: add sdio debug messages") Signed-off-by: Sam Leffler <sleffler@chromium.org> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: move remaining content from htc_hif.h to hif.hKalle Valo2011-11-111-1/+1
| | | | | | | | | | | | Now htc_hif.h can be removed. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: move htc_hif to hif.cKalle Valo2011-11-111-2/+2
| | | | | | | | Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: make sure WLAN power save is enabled during suspendChilam Ng2011-11-111-0/+13
| | | | | | | | | | | | | | | | | | | | Power save is enabled during ath6kl init. But when user space disables power save, the system will go into suspend with power save disabled. The ath6kl driver will now explicitly enable power save prior to entering suspend and restore its previous setting upon resume Signed-off-by: Chilam Ng <chilamng@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Claim sdio function only at appropriate placesVasanthakumar Thiagarajan2011-11-111-9/+10
| | | | | | | | | | | | | | | | | | | | There are places where tx_complete callbacks are called with claiming the sdio function. It is not necessary to hold the sdio func for longer. This may even affect the host side power save, if it is supported by the controller. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* | ath6kl: Replace spin_lock_irqsave with spin_lock_bhVasanthakumar Thiagarajan2011-11-111-30/+21
|/ | | | | | | | | | | It is not necessary to use spinlock primitive to protect data which is accessed in hard irq context as nothing is running in hard irq with this driver. The spinlock primitive meant to protect data in softirq context is more appropriate. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: add sdio debug messagesKalle Valo2011-09-281-9/+27
| | | | | | | Add extensive debug messages to sdio.c. Makes it easier to debug various problems. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: deinitialise wiphy on errorVivek Natarajan2011-09-191-2/+5
| | | | | | | | | | | | | | | | | | | | | | This fixes the following panic observed on card removal. BUG: unable to handle kernel paging request at f86e22ac EIP is at wiphy_update_regulatory+0x252/0x590 [cfg80211] Call Trace: [<f92fb9e5>] set_regdom+0x165/0x600 [cfg80211] [<c02057ba>] ? __kmalloc+0x10a/0x190 [<c0366557>] ? nla_parse+0xb7/0xd0 [<f9300b92>] ? T.1400+0x12/0x20 [cfg80211] [<f9300c84>] nl80211_set_reg+0xe4/0x270 [cfg80211] [<f92fe560>] ? nl80211_pre_doit+0x0/0x160 [cfg80211] [<c050bdeb>] genl_rcv_msg+0x23b/0x280 [<c050bbb0>] ? genl_rcv_msg+0x0/0x280 [<c050ab76>] netlink_rcv_skb+0x86/0xb0 [<c050bb80>] ? genl_rcv+0x0/0x30 [<c050bb9c>] genl_rcv+0x1c/0x30 Signed-off-by: Vivek Natarajan <nataraja@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Fix system freeze under heavy data loadVasanthakumar Thiagarajan2011-08-311-15/+0
| | | | | | | | | | | | | | | | | | | | | | | | | Patch "ath6kl: Fix buffer alignment for scatter-gather write" does memmove for a length (scat_req->scat_list[i].len) which is not the actual length of data that is suppossed to be moved. The right lengh is packet->act_len + HTC_HDR_LENGTH. Using wrong length for data move during buffer alignment causes system freeze after the following WARN_ON and sometimes target assert. WARNING: at drivers/net/wireless/ath/ath6kl/main.c:771 ath6k_credit_distribute+0x196/0x1a0 [<ffffffffa051cf5f>] ath6kl_htc_rxmsg_pending_handler+0x83f/0xe00 [ath6kl] [<ffffffff8104a743>] ? __wake_up+0x53/0x70 [<ffffffffa0518b18>] ath6kldev_intr_bh_handler+0x188/0x650 [ath6kl] [<ffffffffa052d316>] ath6kl_sdio_irq_handler+0x36/0x80 [ath6kl] [<ffffffff81492b3c>] sdio_irq_thread+0xfc/0x360 [<ffffffff81051c52>] ? default_wake_function+0x12/0x20 [<ffffffff81492a40>] ? sdio_claim_irq+0x220/0x220 [<ffffffff81080c36>] kthread+0x96/0xa0 [<ffffffff815b9fb4>] kernel_thread_helper+0x4/0x10 [<ffffffff81080ba0>] ? kthread_worker_fn+0x190/0x190 [<ffffffff815b9fb0>] ? gs_change+0x13/0x13 Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: implement suspend supportKalle Valo2011-08-311-0/+26
| | | | | | | | For now this is implemented so that if host supports power is kept in the chip. If that's not supported, an error is returned and sdio stack will remove the device during suspend. Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Fix buffer alignment for scatter-gather I/OVasanthakumar Thiagarajan2011-08-311-10/+15
| | | | | | | | | For non-scatter buffers, there is already a bounce buffer which takes care of alignment. This patch is influenced by a rough patch of Kalle. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Move scatter information from ath6kl_device to htc_targetVasanthakumar Thiagarajan2011-08-091-6/+6
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Merge scatter rw request functions into oneVasanthakumar Thiagarajan2011-08-091-1/+14
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Refactor ath6kl_sdio_read_write_sync()Vasanthakumar Thiagarajan2011-08-091-21/+30
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Moe virt_scat from hif_dev_scat_sup_info to hif_scatter_reqVasanthakumar Thiagarajan2011-08-091-2/+2
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Merge scatter gather setup functions for two methodVasanthakumar Thiagarajan2011-08-091-17/+58
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Move down scatter enable and cleanup functionsVasanthakumar Thiagarajan2011-08-091-58/+58
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Cleanup ath6kl_sdio_cleanup_scatter()Vasanthakumar Thiagarajan2011-08-091-9/+3
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Cleanup ath6kl_sdio_enable_scatter()Vasanthakumar Thiagarajan2011-08-091-13/+3
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Refactor refactor ath6kl_sdio_setup_scat_resource()Vasanthakumar Thiagarajan2011-08-091-42/+57
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Remove endpoint reference from hif_scatter_reqVasanthakumar Thiagarajan2011-08-091-1/+1
| | | | | | | Endpoint id ffrom htc_packet can be used instead. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Remove struct hif_scatter_req_privVasanthakumar Thiagarajan2011-08-091-17/+16
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: Move ath6kl_sdio_async_rw_scatter() down to other hif_ops functionsVasanthakumar Thiagarajan2011-08-091-32/+31
| | | | | Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* ath6kl: cleanup callbacks for different scatter gather methodVasanthakumar Thiagarajan2011-08-091-4/+3
| | | | | | | | | Define a hook in ath6kl_hif_ops for hif scatter gather mechanism. When virtual scatter gather is used, call the respective function directly. Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
* Add ath6kl cleaned up driverKalle Valo2011-08-091-0/+853
Last May we started working on cleaning up ath6kl driver which is currently in staging. The work has happened in a separate ath6kl-cleanup tree: http://git.kernel.org/?p=linux/kernel/git/kvalo/ath6kl-cleanup.git;a=summary After over 1100 (!) patches we have now reached a state where I would like to start discussing about pushing the driver to the wireless trees and replacing the staging driver. The driver is now a lot smaller and looks like a proper Linux driver. The size of the driver (measured with simple wc -l) dropped from 49 kLOC to 18 kLOC and the number of the .c and .h files dropped from 107 to 22. Most importantly the number of subdirectories reduced from 26 to zero :) There are two remaining checkpatch warnings in the driver which we decided to omit for now: drivers/net/wireless/ath/ath6kl/debug.c:31: WARNING: printk() should include KERN_ facility level drivers/net/wireless/ath/ath6kl/sdio.c:527: WARNING: msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.txt The driver has endian annotations for all the hardware specific structures and there are no sparse errors. Unfortunately I don't have any big endian hardware to test that right now. We have been testing the driver both on x86 and arm platforms. The code is also compiled with sparc and parisc cross compilers. Notable missing features compared to the current staging driver are: o HCI over SDIO support o nl80211 testmode o firmware logging o suspend support Testmode, firmware logging and suspend support will be added soon. HCI over SDIO support will be more difficult as the HCI driver needs to share code with the wifi driver. This is something we need to research more. Also I want to point out the changes I did for signed endian support. As I wasn't able to find any support for signed endian annotations I decided to follow what NTFS has done and added my own. Grep for sle16 and sle32, especially from wmi.h. Various people have been working on the cleanup, the hall of fame based on number of patches is: 543 Vasanthakumar Thiagarajan 403 Raja Mani 252 Kalle Valo 16 Vivek Natarajan 12 Suraj Sumangala 3 Joe Perches 2 Jouni Malinen Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Raja Mani <rmani@qca.qualcomm.com> Signed-off-by: Vivek Natarajan <nataraja@qca.qualcomm.com> Signed-off-by: Suraj Sumangala <surajs@qca.qualcomm.com> Signed-off-by: Joe Perches <joe@perches.com> Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>