User Tools

Site Tools


en:users:drivers:wil6210

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
en:users:drivers:wil6210 [2015/01/26 09:49]
127.0.0.1 external edit
en:users:drivers:wil6210 [2015/11/15 07:58]
Vladimir Kondratiev
Line 7: Line 7:
 ===== About wil6210 ===== ===== About wil6210 =====
  
-The wil6210 driver supports ​several ​60GHz wireless card by Qualcomm ​(1-st ones was originally made by Wilocity; later Wilocity got acquired by Qualcomm). Hardware provides [[WiFi|WiFi]] and wireless PCIE connectivity,​ as described in the [[WiGig|WiGig]] WBE spec. Driver supports [[WiFi|WiFi]] only. All cards are PCIE devices ​+The wil6210 driver supports 60GHz wireless card by Qualcomm. 
 +Hardware provides [[WiFi|WiFi]] and wireless PCIE connectivity,​ as described in 
 +the [[WiGig|WiGig]] WBE spec. Driver supports [[WiFi|WiFi]] only. Card is PCIE device, with PCIe 
 +ID ''​1ae9:​0310''​
  
-Some cards have 60G device combined with Atheros 2.4/5.2 GHz [[WiFi|WiFi]] ​card. On the PCI, it is represented as the following hierarchy: ​+There are old version of the Qualcomm 60GHz card, with PCIe ID ''​1ae9:​0301'' ​it is not supported.
  
 +wil6210 device, ''​1ae9:​0310'',​ has one 2Mb BAR; it supports MSI interrupt.
  
-<​code>​1ae9:​0101-+-1ae9:​0201---168c:​0034 +Since 60GHz is emerging technology ​and hardware ​is completely newdriver provides lots of features 
-          +-1ae9:​0201---1ae9:​0301 +for experimenting, and can be used as researcher workbench.
-          +-1ae9:​0201 +
-          \-1ae9:​0201</​code>​ +
-Chip consists of the root bridge 1ae9:0101, with 4 ports 1ae9:0201. One port routed to separate Atheros card 168c:0034, it is handled by the ath9k driver. Another port connected to the wil6210 device 1ae9:0301, that is on the same chip. 2 empty ports may be populated when connecting in WBE (PCIE-over-60g) mode.  +
- +
-Devices 1ae9:xxxx except 1ae9:0101 are configurable from the firmware, ​and may wary depending on the FW build. In particular, slots 1ae9:0201 may be represented slightly different, using device ID 0200, 0201, 0202, 0203.  +
- +
-**Warning!** It may be that [[WiFi|WiFi]] device 1ae9:​0301 ​is not visible. This is the case if FW build is WBE-only. If you see thisplease contact Wilocity [[http://​wilocity.com/​|http://​wilocity.com/​]] to obtain and flash FW with [[WiFi|WiFi]] support. ​ +
- +
-wil6210 device1ae9:0301, has one 2Mb BAR.  +
- +
-Depending on card flavor ​and generation, Atheros 2.4/5.2 GHz [[WiFi|WiFi]] (device 168c:xxxx) may be present or notDevice IDs for 60G device may also differ. Currently, it may be 1ae9:0301 or 1ae9:​0310 ​+
  
  
Line 33: Line 26:
 wil6210 use cfg80211 framework, but not mac80211. ​ wil6210 use cfg80211 framework, but not mac80211. ​
  
 +==== Firmware ====
  
-===== What works ===== +We need to get this publicly available... 
-  * sniffer. Due to hardware limitation it captures either only CP (control PHY) or DP (data PHY) frames  +
-  * managed modeworks well even with network-manager GUIRequire up-to-date wpa_supplicant.  +
-  * AP mode. Up to 8 simultaneous connected stations supported  +
-  * security. supported is GCMP, it is the only allowed cipher accordingly to the spec. Driver designed in a way that hardware start running only when network interface brought up, with either '​ifconfig up' or starting AP. All settings made before are cached in the driver but not passed to the hardware+
  
 +Firmware has to be downloaded to the card; card will not work without firmware. ​
  
-==== iw commands supported ​====+==== What works ==== 
 +  * managed mode, aka station. Fully functional. Require up-to-date wpa_supplicant.  
 +  * sniffer. May be configured to captures either only CP (control PHY) or all frames  
 +  * AP mode. Up to 8 simultaneous connected stations supported  
 +  * security. supported is GCMP, it is the only allowed cipher accordingly to the spec.
  
-iw link: query link status. Report current MCS. +==== TODO ==== 
 +  * P2P and FST flows  
 +  * various offloads
  
 +==== Status ====
 +  * Basic support for 802.11ad merged into kernel 3.6 
 +  * The driver merged into kernel 3.8. 
 +  * Patches for hostapd/​wpa_supplicant submitted, some part is already merged. ​
  
-===== Module parameters ===== 
-    * rtap_include_phy_info ​ 
-    *  * Include PHY info in the radiotap header, default - no (bool) ​ 
-    *   ​use_msi ​ 
-    *    * Use MSI interrupt: 0 - don't, 1 - (default) - single, or 3 (int)  
-    *     ​debug_fw ​ 
-    *      * load driver if FW not ready. For FW debug (bool) ​ 
-    *       ​max_assoc_sta ​ 
-    *        * Max number of stations associated to the AP (uint) ​ 
-    *         ​no_fw_recovery ​ 
-    *          * disable automatic FW error recovery (bool) ​ 
-    *           ​no_fw_load ​ 
-    *            * do not download FW, use one in on-card flash. (bool) ​ 
-    *             ​itr_trsh ​ 
-    *              * Interrupt moderation threshold, usecs. (uint) ​ 
-    *               ​mtu_max ​ 
-    *                * Max MTU value. ​ 
-    *                 ​rx_ring_order ​ 
-    *                  * Rx ring order; size = 1 << order  
-    *                   ​tx_ring_order ​ 
-    *                    * Tx ring order; size = 1 << order  
  
-wil6210 support set of interrupt handling modes:  +==== iw commands ​supported ​====
- +
-- INTx - legacy pin interrupt. Do not use if possible. - 1MSI - one MSI interrupt. This is the default mode. - 3MSI - 3 MSI interrupts for {Tx, Rx, Misc}.  +
- +
-For interrupt handling mode, probed is highest one specified with @use_msi, with fallback:  +
- +
-3MSI -> 1MSI -> INTx  +
- +
-On the x86 platform, multiple MSI interrupts are not supported ​with recent kernel (3.17).  +
- +
-When **debug_fw** set to true, driver probe will not fail if firmware do not report "​ready"​ event. This is to aid firmware boot issues debugging. ​+
  
 +iw link: query link status. Report current MCS. 
  
-===== Sniffer ​=====+==== Sniffer ====
  
 To configure wil6210 in sniffer mode (assume $WLAN set to network interface name): ​ To configure wil6210 in sniffer mode (assume $WLAN set to network interface name): ​
Line 102: Line 73:
 <​code>#​ ifconfig $WLAN up</​code>​ <​code>#​ ifconfig $WLAN up</​code>​
  
-===== TODO ===== +==== AP mode ====
-    *                     * P2P and FST flows  +
-    *                     * various offloads  +
-===== Status ===== +
-    *                       * Basic support for 802.11ad merged into kernel 3.6  +
-    *                       * The driver merged into kernel 3.8.  +
-    *                       * Patches for hostapd/​wpa_supplicant submitted, some part is already merged.  +
-===== Firmware ===== +
- +
-We need to get this publicly available...  +
- +
-In the current version, firmware stored in the flash memory on the NIC and not downloaded by the driver. Firmware flashing required for the upgrade only.  +
- +
- +
-===== How to =====+
  
 To start AP mode, use recent wpa_supplicant (assume relevant patches already merged). Sample config for non-secure mode:  To start AP mode, use recent wpa_supplicant (assume relevant patches already merged). Sample config for non-secure mode: 
Line 145: Line 102:
 }</​code>​ }</​code>​
  
-===== WMI commands ​=====+===== For developer ===== 
 + 
 + 
 + 
 +==== Module parameters ==== 
 + 
 +^ Parameter ​              ^ Type    ^ Default ​ ^ Comment ​                                                                                                                                           ^ 
 +| use_msi ​                | bool    | true     | Use MSI or INTx (pin) interrupt ​                                                                                                                   | 
 +| mtu_max ​                | uint    | 1986     | Maximum supported MTU, [68..7912] ​                                                                                                                 | 
 +| rx_ring_order ​          | uint    | 10       | Rx sing size is ''​1 << order'',​ [5..15] ​                                                                                                           | 
 +| tx_ring_order ​          | uint    | 10       | Tx sing size is ''​1 << order'',​ [5..15] ​                                                                                                           | 
 +| bcast_ring_order ​       | uint    | 7        | Broadcast Tx sing size is ''​1 << order'',​ [5..15] ​                                                                                                 | 
 +| max_assoc_sta ​          | uint    | 8        | Max number of stations associated to the AP, [1..8] ​                                                                                               | 
 +| agg_wsize ​              | int     | 0        | Window size for Tx Block Ack after connect; 0 - use default; < 0 - don't auto-establish. Writeable, new value used when new block ack established ​ | 
 +| rx_ring_overflow_thrsh ​ | ushort ​ | 0        | RX ring overflow threshold in descriptors. ​                                                                                                        | 
 +| no_fw_recovery ​         | bool    | false    | disable automatic FW error recovery ​                                                                                                               | 
 +| debug_fw ​               | bool    | false    | do not perform card reset. For FW debug                                                                                                            | 
 +| rx_align_2 ​             | bool    | false    | align Rx buffers on 4*n+2                                                                                                                          | 
 +| rtap_include_phy_info ​  | bool    | false    | Include PHY info in the radiotap header ​                                                                                                           | 
 + 
 + 
 +wil6210 support of interrupt handling modes:  
 + 
 +  * MSI - MSI interrupt. This is the default mode. 
 +  * INTx - legacy pin interrupt. Do not use if possible. 
 + 
 +When **debug_fw** set to true, driver probe will not fail if firmware do not report "​ready"​ event. This is to aid firmware boot issues debugging.  
 + 
 + 
 + 
 +==== WMI commands ====
  
 Control communication with the card is done through so called WMI commands and events. Target access to the mailbox within memory in BAR0 used. There are 2 similar mailbox structures: one for host->​card commands, and one for card->​host events. ​ Control communication with the card is done through so called WMI commands and events. Target access to the mailbox within memory in BAR0 used. There are 2 similar mailbox structures: one for host->​card commands, and one for card->​host events. ​
  
  
-===== Tx/Rx =====+==== Tx/Rx ====
  
 DMA using '​vring'​ structures. Vring in consistent memory; hold descriptors that points to the data buffers. Card to write status back to the descriptor. ​ DMA using '​vring'​ structures. Vring in consistent memory; hold descriptors that points to the data buffers. Card to write status back to the descriptor. ​
Line 157: Line 144:
  
  
-===== Firmware error recovery ​=====+==== Firmware error recovery ====
  
 Should firmware crash, or in case of scan timeout, driver try to recover from error by resetting card. This works for **station** only. In the **AP** mode, driver will not perform recovery. It will, however, report error to the user space. There are 2 modes of firmware recovery, depending on the driver parameter **no_fw_recovery**: ​ Should firmware crash, or in case of scan timeout, driver try to recover from error by resetting card. This works for **station** only. In the **AP** mode, driver will not perform recovery. It will, however, report error to the user space. There are 2 modes of firmware recovery, depending on the driver parameter **no_fw_recovery**: ​
Line 170: Line 157:
 If **state** is //​pending//,​ it is time to collect all crash information as desired, and continue with recovery by writing **run** into **recovery**: ​ If **state** is //​pending//,​ it is time to collect all crash information as desired, and continue with recovery by writing **run** into **recovery**: ​
     *                         ​* ​    * <​code>​echo -n "​run"​ > /​sys/​kernel/​debug/​ieee80211/​phy/​wil6210/​recovery</​code>​     *                         ​* ​    * <​code>​echo -n "​run"​ > /​sys/​kernel/​debug/​ieee80211/​phy/​wil6210/​recovery</​code>​
-===== Debug facilities ===== 
  
 +==== Debug facilities ====
  
-==== Dynamic debug ====+ 
 +=== Dynamic debug ===
  
 Almost all messages printed to the dmesg, are "​dynamic debug" ones. See Documentation/​dynamic-debug-howto.txt for details. Module "​wil6210"​ uses format prefixes to identify message groups: ​ Almost all messages printed to the dmesg, are "​dynamic debug" ones. See Documentation/​dynamic-debug-howto.txt for details. Module "​wil6210"​ uses format prefixes to identify message groups: ​
Line 183: Line 171:
  
  
-==== Debugfs ​====+=== Debugfs ===
  
 All debugfs files placed under standard location for the cfg80211 devices, $DEBUGFS/​ieee80211/​$PHY/​ where $PHY is phy name like '​phy1'​. ​ All debugfs files placed under standard location for the cfg80211 devices, $DEBUGFS/​ieee80211/​$PHY/​ where $PHY is phy name like '​phy1'​. ​
Line 286: Line 274:
  
 You should subscribe to this page so you can get e-mail updates on changes and news for ath9k automatically. You'll get an e-mail as soon as this page gets updated. ​ You should subscribe to this page so you can get e-mail updates on changes and news for ath9k automatically. You'll get an e-mail as soon as this page gets updated. ​
- 
en/users/drivers/wil6210.txt · Last modified: 2015/11/15 14:34 by Vladimir Kondratiev