ATH12K 驱动框架

ATH12K 驱动框架

ath12k驱动框架及模块交互逻辑详解

1. 总体架构
2. 关键数据结构

2.1 核心数据结构
2.2 虚拟接口数据结构

3. 硬件抽象层(HAL)
4. 无线管理接口(WMI)
5. 主机目标通信(HTC)
6. 数据路径(DP)

6.1 发送路径(TX)
6.2 接收路径(RX)

7. 多链路操作(MLO)
8. 初始化和工作流程

8.1 驱动初始化流程
8.2 网络接口配置流程
8.3 数据传输流程

9. 总结

ath12k驱动框架及模块交互逻辑详解

ath12k是Qualcomm Atheros公司针对其12k系列芯片(如QCN9274、QCN6432、WCN7850、IPQ5332等)开发的Linux WiFi驱动程序。这是一个复杂的驱动框架,支持802.11ax (Wi-Fi 6)和802.11be (Wi-Fi 7)标准,同时具备多链路操作(MLO)功能。

1. 总体架构

ath12k驱动采用分层架构设计,主要包括以下核心组件:

核心层(core):负责全局资源管理和驱动初始化
硬件抽象层(HAL):提供硬件访问接口,屏蔽硬件差异
WMI(Wireless Management Interface):与固件通信的接口
HTC(Host Target Communication):处理主机和目标设备间的通讯
数据路径(DP):处理数据包的收发路径
CE(Copy Engine):用于主机和目标设备间的数据传输
MAC层:提供802.11 MAC层功能
总线接口层:支持PCI和AHB等不同总线接口

2. 关键数据结构

2.1 核心数据结构

struct ath12k_base (ab):表示一个物理设备,管理全局资源
struct ath12k (ar):表示一个无线接口(radio),每个物理设备可以包含多个radio
struct ath12k_pdev (pdev):表示一个物理无线设备
struct ath12k_hw (ah):表示支持MLO的一组radios
struct ath12k_hw_group (ag):表示一组相关的硬件

2.2 虚拟接口数据结构

struct ath12k_vif (ahvif):虚拟接口
struct ath12k_link_vif (arvif):链路特定的虚拟接口
struct ath12k_sta (ahsta):表示已连接的STA
struct ath12k_link_sta (arsta):链路特定的STA信息

3. 硬件抽象层(HAL)

HAL层提供了与芯片硬件交互的抽象接口,主要处理:

SRNG (Shared Ring Buffer):一种环形缓冲区,用于主机和设备间通信

Source Ring:从主机到设备的通信
Destination Ring:从设备到主机的通信

各类寄存器操作:HAL层提供了统一的寄存器访问接口,隐藏了不同芯片间的差异

描述符处理:用于数据包收发的描述符格式化和解析

HAL的主要组件:

struct ath12k_hal:HAL内部状态
struct hal_srng:共享环形缓冲区
struct hal_ops:不同硬件实现的操作方法集合

4. 无线管理接口(WMI)

WMI是主机与固件通信的主要接口,用于配置和控制无线设备。主要组件:

struct ath12k_wmi_base (wmi_ab):全局WMI上下文
struct ath12k_wmi_pdev (wmi):每个pdev的WMI上下文

WMI命令分为多个组:

扫描相关命令:WMI_GRP_SCAN
PDEV相关命令:WMI_GRP_PDEV
VDEV相关命令:WMI_GRP_VDEV
PEER相关命令:WMI_GRP_PEER
节电相关命令:WMI_GRP_WOW
多链路操作命令:WMI_GRP_MLO

5. 主机目标通信(HTC)

HTC提供了主机与目标设备之间的可靠通信机制,主要组件:

struct ath12k_htc:HTC上下文
CE(Copy Engine):用于在主机与目标设备之间传输数据

6. 数据路径(DP)

数据路径处理数据包的发送和接收流程:

6.1 发送路径(TX)

TCL(Transmit Classification):对发送帧进行分类和处理
WBM(Wireless Buffer Manager):管理发送缓冲区

主要环形缓冲区:

SW2TCL:从主机发送到TCL的数据包环形缓冲区
TCL2TQM:从TCL发送到TQM的数据包环形缓冲区
TQM2TXDMA:从TQM发送到TXDMA的数据包环形缓冲区

6.2 接收路径(RX)

RXDMA:接收DMA引擎处理
REO(Reorder Engine):对接收的帧进行重排序处理

主要环形缓冲区:

RXDMA2REO:从RXDMA到REO的数据包环形缓冲区
REO2SW:从REO到主机软件的数据包环形缓冲区

7. 多链路操作(MLO)

MLO是Wi-Fi 7的一个重要特性,允许多个链路同时操作:

MLO设置ath12k_wmi_mlo_setup()配置MLO组
MLO链路管理:每个vif可以有多个链路vif(arvif)
MLO对等节点:每个sta可以有多个链路sta(arsta)

8. 初始化和工作流程

8.1 驱动初始化流程

总线驱动探测函数调用(PCI/AHB)
核心资源分配:ath12k_core_alloc()
QMI接口初始化:ath12k_core_qmi_firmware_ready()
固件加载:通过ath12k_core_fetch_board_data_api_1()和相关函数
硬件初始化:ath12k_core_init()
HAL初始化:ath12k_hal_srng_init()
WMI初始化:ath12k_wmi_attach()
数据路径初始化
MAC层注册:ath12k_mac_register()

8.2 网络接口配置流程

创建虚拟接口:ath12k_mac_vdev_create()
配置虚拟接口:设置WMM参数、密钥等
启动虚拟接口:ath12k_mac_vdev_start()

8.3 数据传输流程

TX流程:

数据包从mac80211传递到驱动
通过TX描述符格式化
放入SW2TCL环形缓冲区
硬件处理并传输

RX流程:

硬件接收并处理数据包
数据包通过REO2SW环形缓冲区传递给驱动
驱动解析RX描述符
将数据包传递给mac80211层

9. 总结

ath12k驱动是一个复杂而全面的Wi-Fi驱动框架,它的模块化设计使得代码结构清晰,便于维护和扩展。核心组件(Core)、硬件抽象层(HAL)、无线管理接口(WMI)、主机目标通信(HTC)和数据路径(DP)各自负责不同的功能,共同协作完成无线网络的各项功能。

多链路操作(MLO)是驱动的一个重要特性,通过支持多链路同时工作,大大提升了无线网络的性能和可靠性。驱动通过一系列的初始化步骤和精心设计的数据流程,确保了无线网络的高效运行。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
微爱书房的头像 - 宋马
评论 抢沙发

请登录后发表评论

    暂无评论内容