转:http://blog.csdn.net/robertsong2004/article/details/38899415
AR600x软件被划分为主机端和目标端软件。主机端软件或驱动程序的代码被提供作为平台/操作系统包括 Linux的参考实现。 当前的Linux驱动程序被称为“ath6kl”或AR600x系列芯片的Legacy驱动程序。目标侧软件或固件在芯片的网络处理器上运行,并存储在目 标存储器中。它是由Atheros进行维护并作为二进制文件发布。
“ath6kl”驱动程序分为以下几个层次,它们共同定义了主机的软件堆栈。 在一般情况下,最高层的函数可能调用相同层或向下一层的其它函数。函数不直接调用更高一层的函数,但上层可以注册下层的回调。该驱动程序组件的简要总结如下。
无线设备驱动
桥接内核和HTC / WMI层之间的控制和数据路径。在控制路径上,它可以同时处理厂商专有的ioctl和标准的由wireless extensions定义的ioctl。该层也实现了CFG80211的API,因此提供了对基于nl80211应用程序的支持。 在数据路径上它处理了HTC层和IP协议栈之间的数据。 相关的源代码在在于ath6kl/os/linux 目录下。
无线模块接口 (WMI)
如果无线应用程序必须发送控制信息到AR600x芯片组,它调用WMI来创建消息。 该层解析主机/目标信息协议(WMI协议)和它的源代码是在ath6kl/wmi/ 目录下。 ath6kl /include/wmi.h和ath6kl/include/wmix.h头文件列出从主机到目标(命令)以及从目标到主机(请求和事件)的所有信 息。
主机/目标机通信 (HTC)
无线设备驱动程序调用HTC来处理消息传输。 HTC不解析消息传输的内容(仅WMI了解控制消息的内容),但它确实明白与AR600x芯片组的消息传递机制。它处理流控制和知道哪些芯片组地址必须读取和写入来传送讯息。 这一层的代码在ath6kl/htc2/目录下。
主机互连框架 (HIF)
HTC 在它需要访问的芯片组地址空间时,调用到HIF层。平台和互联API的每个组合都有对应的HIF实现(例如,面向Linux标准 SDIO/MMC 栈的HIF)。 这一层抽象了寄存器和内存访问的细节,并提供了一个互连无关,平台无关的API(主要)给HTC使用。 这一层的代码在ath6kl/hif/目录下。
物理互连
HIF层依赖于底层的特定互连和特定于平台的软件来驱动某种类型的硬件控制器。互连层起着发现设备的作用,建立一 个适当的地址空间映射并能过该地址空间执行读取/写入,并处理物理连接上的错误管理。对于大多数串行总线,HIF层与一个总线驱动进行交互,该总线驱动提 供了底层的主机总线适配器的抽象。这些总线驱动可以由合作伙伴,操作系统供应商,或Atheros公司来提供。
另外参考对应的 ath10k 组件架构: