(5)高通AP10.4开发者指南——WLAN(1.5 WLAN驱动模块化的一些其他修改)

1.5 WLAN驱动模块化的一些其他修改

从QCA_Networking_2016.SPF.4.0版本开始,OL和DA驱动相互独立,并新建了一个UMAC模块,作为通用层,并独立于OL和DA的模块。
因为DA驱动已经独立于“UMAC+OL”驱动结构,所以将UMAC和OL模块划分成两个不同的模块是必须的。

  • 将所有的OL文件都放到一个新模块(qca_ol)中。这个模块将独立于UMAC模块。
  • 建立一个独立的UMAC模块,独立于OL和DA模块。

区分Offload相关的文件
当前的UMAC模块包含通用层,以及Offload的函数和文件。

当前的Offload文件
所有的Offload文件在WLAN驱动的源码中,都放在了“offload”目录中,这些文件在一起组成一个新的“qca_ol”模块。

Kernel PCI/AHB接口文件
在独立的DA设备注册过程中使用的PCI和AHB初始化文件,都作为UMAC模块的一部分,被移到了新的qca_ol模块中。

独立的UMAC模块
设置一个独立的UMAC模块的目的,是可以将Offload和Direct-Attach之间的共通部分做到一个模块中,这样Offload和Direct-Attach模块就可以独立的使用这部分共通代码。同时,这样做也能减少驱动的image大小。
由于所有的offload文件移到了qca_ol模块中,所以由UMAC直接调用的offload函数,将被归结到下面内容中:

  • OL参数函数,从UMAC中调用
  • OL函数通过“ic”指针访问OL层
  • 在UMAC中的,并且是OL相关的函数
  • 独立于OL的函数,但当前处在OL层。
  • OL和DA模块使用到的UMAC函数
  • NSS (WiFi OL)模块化

从UMAC调用的OL参数函数

用很多OL函数由UMAC直接调用,用于配置OL驱动的参数。
作为独立的UMAC,不能直接调用OL层的函数,而是回调的办法,来访问OL或DA层。
ic_vap_get_param不能用时,可以添加这个函数功能。
对于“set”函数,将使用“ic_vap_set_param”。
其他一些类似的函数:

ol_txrx_clear_rawmode_pkt_sim_stats
ol_txrx_host_stats_get
ol_tx_rst_tso_stats
ol_txrx_print_rawmode_pkt_sim_stats
ol_ath_set_vap_cts2self_prot_dtim_bcn
ol_tx_rst_sg_stats
ol_tx_print_sg_stats
ol_rst_rx_cksum_stats
ol_tx_print_tso_stats
ol_txrx_host_msdu_ttl_stats
ol_txrx_debug
ol_txrx_fw_stats_get
ol_ath_ucfg_reset_peer_mumimo_tx_count
ol_txrx_aggr_cfg
ol_rate_is_valid_basic
ol_ath_net80211_get_vap_stats
ol_txrx_host_me_stats
ol_txrx_fw_stats_cfg
ol_txrx_host_stats_clr
ol_print_rx_cksum_stats

OL函数通过传递“ic”指针来访问OL层

所有UMAC访问OL或DA层使用的函数,都应当以回调的方式完成,比如使用“ic”函数指针。
任何绕过这种策略访问OL或DA层的函数,都会被判断出来。所以要么通过“ic”指针来访问,或者干脆将整个模块都移到OL层。
通过以下步骤完成通过“ic”指针访问。

  1. 添加一个“struct ieee80211com”结构体的函数指针。
  2. 在OL设备attach时,注册到OL函数中 (初始化函数指针) 。
  3. 需要访问OL曾是,调用这个函数指针。

比如:

ol_ll_pdev_tx_lock
ol_ll_pdev_tx_unlock
ol_txrx_osif_vdev_register
ol_tx_tso_sg_process_skb
ol_ath_ucfg_get_peer_mumimo_tx_count
ol_net80211_set_mu_whtlist

在UMAC中的,并且是OL相关的函数
许多到OL层数据通路相关的函数,都在osif_umac文件中,这是UMAC模块的一部分。这些文件都是OL设备相关的,所以会被移到offload模块。
比如:

osif_ol_ll_vap_hardstart
osif_ol_hadstart_vap_vow_debug
osif_deliver_data_ol

独立于OL的函数,但当前处在OL层
有一些函数是处在OL层的,但却和OL层没什么关系,这些可以作为通用部分和UMAC模块的一部分。这些函数可以移到UMAC模块。
比如:

transcap_nwifi_to_8023
dscp_tid_map

OL和DA模块使用到的UMAC函数
因为UMAC在OL或DA模块之前启动,所以OL或DA模块需要的函数,需要开放出来。
在开发的阶段1,创建了一个新的umac_exports.c文件,用于开发一些必要的函数。

NSS (WiFi OL)模块化
osif_nss文件将会是“umac”模块的一部分,但是osif_nss_wifiol相关的文件,将被移到“qca_ol”模块中,因为这些是OL芯片组相关的。
这样就增加了一个限制,“umac”不能直接调用osif_nss_wifiol函数,因为“umac”模块将在“qca_ol”前启动。
为了避免这样的限制,osif_nss_ol_pdev_attach函数调用时,将会携带一个函数数组指针,这个函数指针数组将会初始化成相应的osif_nss_wifiol函数。
下面这个nss_wifi_offload_funcs结构体,用于就是含有相应函数指针的数组。这个结构体在osif_nss_ol_pdev_attach函数中,会被传递到ic->nss_funcs。

struct nss_wifi_offload_funcs nss_wifi_funcs = {
    osif_nss_ol_store_other_pdev_stavap,
    osif_nss_vdev_me_reset_snooplist,
    osif_nss_vdev_me_update_member_list,
    osif_nss_ol_vap_xmit,
    osif_nss_vdev_me_update_hifitlb,
    osif_nss_vdev_me_dump_denylist,
    osif_nss_vdev_me_add_deny_member,
    osif_nss_ol_vdev_set_cfg,
    osif_nss_vdev_process_mpsta_tx,
    osif_nss_ol_wifi_monitor_set_filter,
    osif_nss_vdev_get_nss_id,
    osif_nss_vdev_process_extap_tx,
    osif_nss_vdev_me_dump_snooplist,
    osif_nss_ol_vap_delete,
    osif_nss_vdev_me_add_member_list,
    osif_nss_vdev_vow_dbg_cfg,
    osif_nss_ol_enable_dbdc_process,
    osif_nss_vdev_get_nss_wifiol_ctx,
    osif_nss_vdev_me_delete_grp_list,
    osif_nss_vdev_me_create_grp_list,
    osif_nss_vdev_me_delete_deny_list,
    osif_nss_vdev_me_remove_member_list
};

“qcawifi.sh”脚本的变化
qcawifi.sh脚本用于安装WLAN驱动模块,传递模块参数,它也同样需要修改去使用这种模块化。

UMAC和OL模块之间的模块参数划分

所有的模块参数但前都被传递到了UMAC模块。因为qca_ol和qca_da模块分开的关系,qcawifi.sh脚本也应该做相应的变化,根据当前的模块传递参数。
下面是一些传递到相应模块的模块参数。

模块参数模块名字
enableuartprintqca_ol.ko
enable_tx_tcp_cksumqca_ol.ko
vow_configqca_ol.ko
max_descsqca_ol.ko
qwrap_enableqca_ol.ko
max_peersqca_ol.ko
max_vdevsqca_ol.ko
sa_validate_swqca_ol.ko
dfs_disableqca_ol.ko
fracqca_ol.ko
intvalqca_ol.ko
ar900b_20_targ_clkqca_ol.ko
qca9888_20_targ_clkqca_ol.ko
otp_mod_paramqca_ol.ko
cfg_iphdr_padqca_ol.ko
emu_typeqca_ol.ko
enable_smart_antennaqca_ol.ko
max_active_peersqca_ol.ko
low_mem_systemqca_ol.ko
nss_wifi_olcfgqca_ol.ko
nss_wifi_ol_skip_nw_processqca_ol.ko
ol_scan_chanlistqca_ol.ko
fw_code_signqca_ol.ko
testmodeqca_ol.ko
lteu_supportqca_ol.ko
bmiqca_ol.ko
wariqca_ol.ko
war1_allow_sleepqca_ol.ko
allocram_track_maxqca_ol.ko
max_clientsqca_ol.ko
max_vapsqca_ol.ko
fw_dump_optionsqca_ol.ko
enable_mesh_supportqca_ol.ko
wmi_ring_sizeqca_ol.ko
ahbskipumac.ko
enable_mesh_peer_cap_updateumac.ko
wifiposenableumac.ko
atf_modeumac.ko
atf_msdu_descumac.ko
atf_peersumac.ko
atf_max_vdevsumac.ko
enable_pktlog_supportumac.ko

模块启动顺序

WLAN驱动模块需要按照下面的顺序启动,这取决于互相的依赖。

asf
adf
ath_dfs
ath_spectral
umac
ath_hal
ath_rate_ahteros
hst_tx99
ath_dev
qca_da
qca_ol (这个模块可以在umac之后启动)

qca_ol模块将启动OL设备,qca_da模块将启动DA设备。他们之间互相独立,设备的启动顺序,将取决于谁先被检测到。这也会决定radio的名字。

WLAN驱动固件大小
OL和DA芯片组,都使用的平台。
这里写图片描述

只使用OL芯片组的平台。
这里写图片描述

只使用DA芯片组的平台。
这里写图片描述

图 1-12 WLAN驱动固件大小

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值