ath10k architecture
ath10k is a mac80211 driver, the architecture is depicted in the diagram below.
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
ath10k components
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.
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.