User Tools

Site Tools


en:users:drivers:ath10k:architecture

Differences

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

Link to this comparison view

en:users:drivers:ath10k:architecture [2015/01/26 09:49]
en:users:drivers:ath10k:architecture [2015/01/26 09:49] (current)
Line 1: Line 1:
 +
 +Go back --> [[en/​users/​Drivers/​ath10k|ath10k]] ​
 +
 +
 +===== ath10k architecture =====
 +
 +ath10k is a mac80211 driver, the architecture is depicted in the diagram below. ​
 +
 +{{ath10k-architecture.png}} ​
 +
 +The driver is located in directory drivers/​net/​wireless/​ath/​ath10k/​. The source code is available for browsing from this location: ​
 +
 +[[https://​github.com/​kvalo/​ath/​tree/​master/​drivers/​net/​wireless/​ath/​ath10k|https://​github.com/​kvalo/​ath/​tree/​master/​drivers/​net/​wireless/​ath/​ath10k]] ​
 +
 +
 +===== ath10k components =====
 +
 +{{ath10k-components.png}} ​
 +
 +
 +==== MAC ====
 +  * Files: mac.h mac.c This is the glue layer between mac80211 and ath10k lower levels. The interface to mac80211 is implemented through ath10k_ops. Data and management frames are sent to HTT, configuration commands to WMI. 
 +
 +
 +==== Host-Target Transport (HTT) ====
 +    * Files: htt.c  htt.h  htt_rx.c ​ htt_tx.c The data path for ath10k. Sends frame descriptors to the firmware using HTC. 
 +
 +
 +==== Wireless Module Interface (WMI) ====
 +      * Files: wmi.h wmi.c The control path for ath10k. Sends all sorts configuration commands to the firmware and receives configuration events from the firmware. ​
 +
 +
 +==== Host-Target Communication (HTC) ====
 +        * Files: htc.h htc.c Multiplexes the bus for different services. The services are defined in enum ath10k_htc_svc_gid. ​
 +
 +
 +==== Host interconnect Framework (HIF) ====
 +          * Files: hif.h Abstracts the access to different bus types. Currently only supports PCI, but it's easy to add different bus types. ​
 +
 +
 +==== Debug ====
 +            * Files: debug.h debug.c Component for various debug related to code. Currently only log messages and debugfs. ​
 +
 +
 +==== Tracing ====
 +              * Files: trace.h trace.c Provides tracing data (HTT/WMI packets) etc to userspace using Linux tracepoints. trace-cmd is the recommend tool to access the tracepoints. ​
 +
 +
 +==== PCI ====
 +                * Files: pci.h pci.c ce.h ce.c 
 +                * Module: ath10k_pci.ko All PCI related code. Interface to HIF happens through ath10k_pci_hif_ops. ​
 +
 +
 +==== Copy Engine (CE) ====
 +
 +The firmware/ hardware has 8 rings for communication with host, defined in host_ce_config_wlan: ​
 +
 +
 +<​code>​static const struct ce_attr host_ce_config_wlan[] = {
 +        /* CE0: host->​target HTC control and raw streams */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 16,
 +                .src_sz_max = 256,
 +                .dest_nentries = 0,
 +        },
 +
 +        /* CE1: target->​host HTT + HTC control */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 0,
 +                .src_sz_max = 512,
 +                .dest_nentries = 512,
 +        },
 +
 +        /* CE2: target->​host WMI */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 0,
 +                .src_sz_max = 2048,
 +                .dest_nentries = 32,
 +        },
 +
 +        /* CE3: host->​target WMI */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 32,
 +                .src_sz_max = 2048,
 +                .dest_nentries = 0,
 +        },
 +
 +        /* CE4: host->​target HTT */
 +        {
 +                .flags = CE_ATTR_FLAGS | CE_ATTR_DIS_INTR,​
 +                .src_nentries = CE_HTT_H2T_MSG_SRC_NENTRIES,​
 +                .src_sz_max = 256,
 +                .dest_nentries = 0,
 +        },
 +
 +        /* CE5: unused */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 0,
 +                .src_sz_max = 0,
 +                .dest_nentries = 0,
 +        },
 +
 +        /* CE6: target autonomous hif_memcpy */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 0,
 +                .src_sz_max = 0,
 +                .dest_nentries = 0,
 +        },
 +
 +        /* CE7: ce_diag, the Diagnostic Window */
 +        {
 +                .flags = CE_ATTR_FLAGS,​
 +                .src_nentries = 2,
 +                .src_sz_max = DIAG_TRANSFER_LIMIT,​
 +                .dest_nentries = 2,
 +        },
 +};</​code>​
 +Copy Engine provides abstraction for these ring buffers and calls each ring a pipe. 
 +
 +
 +==== Bootloader Messaging Interface (BMI) ====
 +                  * Files: bmi.h bmi.c Firmware upload and everything else which happens before firmware is booted. ​
 +
 +
 +==== Core ====
 +                    * Files: core.h core.c Driver initialisation and firmware booting. Manages all ath10k components. ​
  
en/users/drivers/ath10k/architecture.txt ยท Last modified: 2015/01/26 09:49 (external edit)