高通AP10.4开发者指南(三)


请尊重原创版权,转载注明出处。

三 代码基本结构(Code Base Structure)

本章节主要描述了代码相关的基本结构,并提供“代码目录”、“数据结构”、“分层”、“源代码分布树”、“编译选项”、“运行时的配置选项”等信息。

代码目录(Directory Structure)

下面是相关目录:

drivers/wlan /os /linux /win_nwf/ /darwin … /hal /ar9300 … /lmac /ath_dev /ratectrl /umac /mlme /txrx /crypto /qca_da

主要数据结构(Common Data Structure)

vap

  • 针对每个接口的抽象(这里的接口指每个AP(作为AP模式时)、每个station(作为station时模式))。
  • 在一个物理接口上,可以虚拟出多个VAP。

node

  • 一个node对应一个连接。
  • 每层都会维护node结构中的一部分。

ic

  • 在网络以及更高层中的Device抽象

sc

  • ath层的Device

ath_hal

  • HAL层数据结构

分层(Layers)

host驱动架构包含OS 适配层、802.11协议层、device层、HAL层。下面是详细说明:

OS 适配层(OS Shim Layer)

OS 适配层提供下面功能:

  • 驱动初始化和加载
  • 中断申请和关联
  • 接口适配和调用 每种操作系统都会有一个OS适配层。比如Native Wifi、NetBSD、Darwin、Linux、eCos、VxWorks等。OS适配层是系统函数和本代码之间的桥梁,同时还包含下面内容:
  • 系统相关的初始化(如中断、buffer分配)
  • 通用函数库(如locking/malloc)
  • 传输和中断(包括接收)的OS层入口

OS 适配层函数(OS Shim Functions)

OS适配层函数参看文件osdep.h (wlan/os/darwin/include)和文件ath_osdep.c(wlan/os/darwin/src),同时还有一些系统接口:

  • OS_SLEEP
  • OS_GET_TIMESTAMP
  • OS_TIMER
  • spin_lock_init
  • spin_lock
  • spin_unlock
  • Struct ath_reg_params ath_params = {};
  • ath_driver_command – ioctl interface
  • ath_dev_start
  • ath_dev_stop

802.11协议层(802.11 Protocol Layer (net, UMAC))

802.11协议层(又叫做网络或UMAC层)包含了完整的链接控制。它是由分层状态机(比如connectionSM->AssocSM)实现的。 UMAC提供了包的封装/解封装功能(dot3<->dot11)。UMAC层负责多个VAP共享一个channel和HW情况下的资源管理。 同时UMAC层还提供下面的功能:

  • 电源管理(Power Management)
  • MLME
  • Scanning
  • Encryption

UMAC到LMAC接口函数(UMAC-to-LMAC interface)

UMAC到LMAC通过一个转换表来完成调用。这个表通过ath_attach()函数传递给UMAC。代码路径:lmac/ath_dev/ath_main.c

struct ath_ops {} ath_ar_ops = {};
Sample calls:
ath_vap_attach
ath_vap_detach
ath_tx_init
ath_rx_init
ath_tx_start_dma
ath_set_channel
ath_get_channel
ath_intr 
ath_handle_intr

设备层(Device Layer (ath, LMAC))

设备层提供下面功能:

  • Transmit
  • Receive
  • Interface between network and HAL (“pass-through” interface
  • functions)
  • Tx aggregation
  • Rx reordering
  • DMA
  • Interrupt handling

LMAC到UMAC接口函数(LMAC-to-UMAC interface)

LMAC到UMAC也通过一个转换表来完成调用。这个表通过ath_attach()函数中的ath_dev_attach()传递给UMAC。代码路径:

struct ieee80211_ops net80211_ops = {};

Sample calls:
ath_net80211_tx_complete
ath_net80211_rx
ath_net80211_input
ath_net80211_set_countrycode

LMAC到HAL接口函数(LMAC-to-HAL interface)

LMAC到HAL的接口调用通过ath_hal_attach()函数中的ath_dev_attach()。代码路径:wlan/hal/ah.c

ath_hal_attach()通过传递device id来attach到相应的设备。

例如:ar9300Attach()是针对AR93xx芯片组的。代码路径在wlan/hal/ar9300/ar9300_attach.c 这个函数会返回一个AR93xx的函数表,包括:

ar9300EnableReceive
ar9300StartTxDma
ar9300SetTxDP
ar9300FillTxDesc
ar9300ProcRxDesc
文档信息
--------------
* 作者:
* 版权声明:自由转载-非商用
* 转载: []

Markdown简明教程