summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ti/wl12xx/main.c
Commit message (Collapse)AuthorAgeFilesLines
...
* wl12xx/wlcore: increase FW filename versionLuciano Coelho2012-07-101-6/+6
| | | | | | | | | | | | We have some API changes and new features in the new firmwares that are not compatible with older drivers. Increase the version of the FW filenames for wl12xx to 5. Additionally, remove the duplicate definitions from wlcore_i.h and remove the MODULE_FIRMWARE macro calls from the SDIO and SPI modules, since they're irrelevant there. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: add probe request templates for sched and one-shot scansYoni Divinsky2012-07-101-0/+3
| | | | | | | | | | | | | | | The driver configures the firmware template for probe requests during the scan process. If the same template is used for one-shot and sched scans they will override each other when running scans simultaneously. This fix works only on firmwares later than X.3.9.2.112 for single role and X.3.9.2.23 for multi-role. [Some cleaning-up and renaming of the quirk to something smaller -- Luca.] Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx/wl18xx: check min FW versionArik Nemtsov2012-07-101-0/+9
| | | | | | | | | | Refuse to boot if the FW version is too old. The minimum version is set per chip, with the option of setting it per PG in the future. When boot fails because of an old FW, display a helpful message. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: Force checking of io functions' return valuesIdo Yariv2012-06-221-2/+4
| | | | | | | | | All io functions' return values should be propagated and handled. Add a __must_check annotation to verify that the return values are checked and to avoid future mistakes. Signed-off-by: Ido Yariv <ido@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: Propagate errors from wl1271_raw_write32Ido Yariv2012-06-221-44/+116
| | | | | | | | | | Propagate errors from wl1271_raw_write32 and request for recovery when appropriate. Also rename prefixes of wlcore functions which their prototypes had to be changed. Signed-off-by: Ido Yariv <ido@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: Propagate errors from wl1271_raw_read32Ido Yariv2012-06-221-37/+115
| | | | | | | | | | Propagate errors from wl1271_raw_read32. Since the read functions had no way of returning errors in-band, change their prototypes. Also rename prefixes of wlcore functions which their prototypes had to be changed. Signed-off-by: Ido Yariv <ido@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: Propagate errors from wl1271_writeIdo Yariv2012-06-221-5/+18
| | | | | | | | | | Propagate errors from wl1271_write and request for recovery when appropriate. Also rename prefixes of wlcore functions which their prototypes had to be changed. Signed-off-by: Ido Yariv <ido@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: Propagate errors from wl1271_readIdo Yariv2012-06-221-3/+3
| | | | | | | | | | Propagate errors from wl1271_read and request for recovery when appropriate. Also rename prefixes of wlcore functions which their prototypes had to be changed. Signed-off-by: Ido Yariv <ido@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl18xx: sane defaults for HT capabilitiesArik Nemtsov2012-06-211-4/+2
| | | | | | | | | | | | | | | Introduce a default set of HT capabilities that are set according to the number of antennas on the board. Move the HT setting code down to allow the number of antennas to be set (and optionally overridden) before it. Remove the "mimo" HT option, since the default mode now enables MIMO is possible. Use this opportunity to add a helper function for setting HT capabilities and reduce the volume of the code a bit. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: allow setting sleep_auth before interface initArik Nemtsov2012-06-211-0/+1
| | | | | | | | | | | | | | | | Hold a value for sta_sleep_auth that is amenable to change by debugfs. When detecting a legal value in this variable on interface init, use it as an override value for sleep_auth. This makes debugging more intuitive using the debugfs value. Increment the conf version since we added an element to the conf structure. Note: An AP going up will always set sleep_auth to PSM_CAM. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl18xx/wl12xx: use u8 instead of bool for host_fast_wakeup_supportLuciano Coelho2012-06-081-1/+1
| | | | | | | | | The conf structure is going to be exported to a file, so we should use only well defined types. bool is not well defined and may vary from platform to platform, so change the host_fast_wakeup_support type to u8 instead. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl12xx: Add support for an external 26 MHz crystal sourceGrant Erickson2012-06-071-0/+1
| | | | | | | | | Add support for an external 26 MHz crystal source. [Changed wl->ref_clock to priv->ref_clock -- Luca.] Signed-off-by: Grant Erickson <marathon96@gmail.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl18xx: pad only last frame in aggregration buffer for PG2Ido Reis2012-06-071-0/+1
| | | | | | | | | | | | | | | | In PG2 only the last frame in the aggregate buffer should be aligned to the sdio block size. This frame's header msb should be set to 0, while in all the previous frames in the aggregation buffer, this bit should be set to 1. [Add a HW op for setting the frame ctrl bit only for 18xx. Other minor cleanups - Arik] [Make the pre_pkt_send operation optional -- Luca] Signed-off-by: Ido Reis <idor@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl18xx: PG2.0 HW Watch dog interrupt supportIdo Reis2012-06-071-2/+2
| | | | | | | | | | | | | | In PG2, the HW watchdog interrupt occupies bit0 of the event vector, and the SW watchdog is relocated to bit9. We perform the relocation globally, as there's only one watchdog bit on previous platforms (bit0). [Only mask in the new bit9 for platforms supporting it. This avoids spurious events on other platforms - Arik] Signed-off-by: Orit Brayer <orit@ti.com> Signed-off-by: Ido Reis <idor@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl12xx/wl18xx: add erp protection IE to the beacon filterEliad Peller2012-06-061-1/+5
| | | | | | | | | We have to reconfigure the fw when erp protection should be enabled/disabled. Pass beacons containing changes in the ERP protection IE, so we could analyze them. Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx/wl18xx: implement op_set_key per HW archArik Nemtsov2012-06-061-0/+9
| | | | | | | | | | | | | The 12xx set_key just calls the common wlcore_set_key function, in order to program the keys into the FW. The 18xx variant changes the spare block count when a GEM or TKIP key is set. Also modify the get_spare_blocks HW op for 18xx to return the correct numbers of spare blocks, according to what is currently set in FW. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx/wl18xx: handle spare blocks spacial cases per archArik Nemtsov2012-06-061-2/+9
| | | | | | | | | | | | | | | Add a HW op for getting spare blocks. 12xx cards require 2 spare blocks for GEM encrypted SKBs, regardless of VIFs or keys programmed into the FW. 18xx cards require 2 spare blocks when there are any connected TKIP or GEM VIFs. For now always return 2 spare blocks, as this works with all networks. The special case TKIP/GEM functionality is added at a later patch. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx/wl18xx: introduce quirk to remove TKIP header spaceArik Nemtsov2012-06-061-3/+6
| | | | | | | | | 18xx chips do not require extra space in the TKIP header. Introduce a new HW quirk to allow us to make this feature arch-specific. 12xx chip will now have this quirk. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl12xx: fix fm_coex parameters configurationVictor Goldenshtein2012-06-051-2/+2
| | | | | | | | | Wrong fm_coex parameters were set during wl12xx init phase, fix it. Signed-off-by: Ziv Riesel <zivriesel@ti.com> Signed-off-by: Victor Goldenshtein <victorg@ti.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wl12xx: set the irq polarity before loading the fwYoni Divinsky2012-06-051-6/+6
| | | | | | | | | | The polarity should be set before the firmware is loaded since the firmware touches the same register. Access of the firmware and driver to the same register will cause a collision since there is no exclusion scheme. Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: set wl->ht_cap per-bandEliad Peller2012-06-051-1/+4
| | | | | | | | | | | | Save the ht_cap IE per-band, so we can configure different params to BG and A bands (we currently don't support MIMO on A band) [Small fix for rx_highest - Arik] Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: modify bss loss parametersIgal Chernobelsky2012-06-051-2/+2
| | | | | | | | | | | Modify default parameters to reduce firmware BSS lose probability in congested environment. [Applied to 18xx configuration as well - Arik] Signed-off-by: Igal Chernobelsky <igalc@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore: fix dynamic_ps_timeout time regressionArik Nemtsov2012-06-051-1/+1
| | | | | | | | | In patch d7b63b9fc7ee73e75a4c7fdb899 we have raised the dynamic PS timeout to 200ms to improve user experience. Re-apply the change, since it was reverted in the wlcore split. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx/wl18xx: don't use TX align quirk for wl127xLuciano Coelho2012-06-051-6/+4
| | | | | | | | | | | | | | | Commit 4afc37 (wlcore: reorder identify_chip and get_hw_info) broke support for wl127x chips. When we moved the identify_chip operation to an earlier stage (ie. to the probe function), we broke wl127x support because during HW init we would set the WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN. To avoid this, set this quirk in the identify_chip operations and only force it to be unset if the bus module doesn't support it. We were doing the opposite and setting the flag if the bus module supports it. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx/wl18xx: move lower driver debugfs to a subdirLuciano Coelho2012-06-051-6/+1
| | | | | | | | | | | Instead of adding more files from the lower drivers into the same directory in debugfs as wlcore, we now add a subdirectory for the lower driver. This makes things a bit easier, because we can quickly see where the debugfs entry is implemented and what is specific to the lower driver. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com>
* wl12xx: implement fw status debugfs entriesLuciano Coelho2012-06-051-0/+8
| | | | | | | | | Implement the operations that are necessary to fetch the wl12xx-specific FW statistics. Re-add some of the code removed from wlcore. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com>
* wlcore/wl12xx/18xx: split fw_status struct into twoArik Nemtsov2012-06-051-1/+3
| | | | | | | | | | | | | | The number of RX packet descriptors may vary from chip to chip and in different firmware versions. Unfortunately, the array that contains the actual descriptors is in the middle of the fw_status structure. To manage this, we split the struct into two so we can calculate the offset of what comes after the array and access the last elements more easily. [Changed the STATUS_LEN macro to be placement agnostic - Arik] Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com>
* wlcore/wl12xx: add plt_init op and move the code to wl12xxLuciano Coelho2012-06-051-0/+57
| | | | | | | | | PLT mode needs to be initialized differently for each chip. This patch adds an operation to init PLT and moves the existing PLT initialization into the wl12xx driver. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com>
* wlcore/wl12xx: move rx_mem_pool_addr element to wl12xxLuciano Coelho2012-06-051-1/+1
| | | | | | | | | Only wl127x chips use the rx_mem_pool_addr values, which need to be given to the firmware as part of the RX path. Move this from core to the wl12xx driver. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com>
* wlcore/wl12xx: move ref_clock and tcxo_clock elements to wl12xxLuciano Coelho2012-06-051-15/+73
| | | | | | | | | Only wl12xx needs to get the ref_clock anc tcxo_clock values from the platform data. Move these elements from the wl1271 structure to wl12xx's private data. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com>
* wlcore/wl18xx: enable MIMO/wide-chan rates in AP-mode rate configArik Nemtsov2012-06-051-0/+1
| | | | | | | | | | | | Add a HW op to add extra enabled rates for AP-mode data-rates. Since the rates might depend on channel properties, reconfigure AP-mode rates when these change. Implement the HW op for the 18xx family, where MIMO or wide-chan rates can be added. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl18xx: add hw op for Rx HW checksumArik Nemtsov2012-06-051-0/+1
| | | | | | | | | Some chip families can checksum certain classes of Rx packets in FW. Implement the Rx-checksum feature as a HW-op. For the 18xx chip-family, set Rx-checsum according to indication from FW. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl18xx: add hw op for setting Tx HW checksumArik Nemtsov2012-06-051-0/+8
| | | | | | | | | | | | Some chip families are capable of checksumming certain classes of Tx packets in HW. Indicate this fact in the netdev features and perform the HW checksum by protocol type for the 18xx family. Fix the location of the skb network header when we move it so we can rely on it when setting the checksum. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: adapt FW status for multiple familiesArik Nemtsov2012-04-121-0/+1
| | | | | | | | | | Add room for a private data struct at the end of the common FW status. Add a convenience "counters" struct inside the FW status. The wl12xx family does not currently use the FW status private data. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: move identify firmware function to a lower driver opLuciano Coelho2012-04-121-0/+17
| | | | | | | | | Different chip families have different firmware versions, so we need to identify the firmware to enable quirks, reject the used version etc. in the lower drivers. This commit turns the fw_ver_quirks function into an identify_fw operation. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: set HT capabilities per chip-familyArik Nemtsov2012-04-121-0/+14
| | | | | | | | Set HT capabilities in the low-level HW driver. These are then used by wlcore when registering with mac80211. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add hw op to get rate-mask for AP-link in STA modeArik Nemtsov2012-04-121-0/+7
| | | | | | | | | In some chip-families, there are operating modes where we must mask-out certain Tx rates, and/or tweak the rate-mask with special HW-specific bits. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: use a single memory config and reset if using wl127xLuciano Coelho2012-04-121-11/+38
| | | | | | | | | | | Instead of having two memory configuration sets, one for wl127x and one for wl128x, we can use only one which should be correctly set by the lower driver. The wl12xx driver now uses the wl128x memory config by default but changes it when if it identifies the wl127x chips. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: move extended radio configuration parameters to wl12xxLuciano Coelho2012-04-121-13/+1
| | | | | | | | The extended radio configuration parameters are only used by the wl127x chipsets, which are handled by the wl12xx driver. Move the rf configuration settings from wlcore to wl12xx. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: move runtime configuration struct to the lower driverLuciano Coelho2012-04-121-0/+345
| | | | | | | | | The configuration parameters vary with different chip families. Some of the parameters used only by some chip families, others should have different value depending on the family. Thus move the configuration values from wlcore to wl12xx. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: expand functionality of cmd_trigger HW opArik Nemtsov2012-04-121-1/+3
| | | | | | | | | | | Change the cmd_trigger op to include the write of the command buffer. Also, instead of letting the lower driver access the cmd_box_addr element directly, we now pass the address in the trigger_cmd operation, so it doesn't have to be exported. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add hw op for vif initArik Nemtsov2012-04-121-0/+1
| | | | | | | | Add an op for family-specific vif initialization. Currently unused, but will be needed when wl18xx support is implemented. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add hw_init operationLuciano Coelho2012-04-121-0/+40
| | | | | | | Move all the wl12xx-specific hw initialization procedures into a new hw_init op. Move some commands and ACX functions to wl12xx. Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: turn no-Tx-align quirk into Tx-alignArik Nemtsov2012-04-121-5/+8
| | | | | | | | | | | | | | | Inverting the quirk flag to indicate Tx-alignment. This aligns it with the similar Rx-side quirk. The call to wl1271_set_block_size() decides whether SDIO block size alignment can be used or not. In case we're using SPI, we can't use the block size alignment, so the function returns false. So we set the quirk when wl1271_set_block_size() returns true and let the wl12xx lower driver unset the bit for wl127x (since it doesn't support this quirk). Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: split Tx completion to immediate/delayedArik Nemtsov2012-04-121-0/+10
| | | | | | | | | | | | One chip family employs immediate Tx completion, where knowledge of completed packets is given as part of the FW status. Another is only notified of Tx completion via the FW status, and has to read the completion status of the packets from a different location. Implement the wl12xx tx completion as a delayed Tx completion. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add hw op for getting rx packet data lengthArik Nemtsov2012-04-121-0/+14
| | | | | | | | | | There is a difference in the way chip families report the length of data in a single Rx packet. Abstract this into a HW op. Refactor the Rx data handling function to allocate the correct size for the data, and avoid trimming the skb. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add prepare_read hw op for Rx dataLuciano Coelho2012-04-121-0/+32
| | | | | | | | | | | | | | | The only difference in the read_data operations is that some chips need to prepare the data to be read before reading. So instead of having a mandatory read_data operation, we now have an option prepare_data operation that only needs to be implemented for chips that require it. In the wl12xx lower driver, we only set the prepare_data operation for wl127x chips. Signed-off-by: Luciano Coelho <coelho@ti.com> Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add hw op for getting rx buffer data alignmentArik Nemtsov2012-04-121-0/+11
| | | | | | | | | | | | An aligned data buffer is such where the Ethernet portion of the packet starts on a 4-byte boundary. Some chip families support padding the Rx data buffer to achieve such alignment, others rely on the host to perform it. Implement the HW op for getting alignment state in wl12xx. Add support for HW-padded alignment in the Rx flow. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add global elements to convert hw-rates to standard ratesArik Nemtsov2012-04-121-0/+93
| | | | | | | | | | Rates reported by HW can be different between chip families. Make the rate-to-idx translation tables private per family and use them in a common translation function. Add a global element to help determine which rates are HW HT-rates. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
* wlcore/wl12xx: add hw op for setting frame length in tx_hw_descArik Nemtsov2012-04-121-0/+36
| | | | | | | | | | | Each chip family indicates the length of a frame to the HW differently. This includes different padding, alignment and other fields in the HW Tx descriptor. Put all wl12xx specific code in a hw op. Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
OpenPOWER on IntegriCloud