(5)高通AP10.4开发者指南——WLAN(1.5 WLAN驱动模块化的一些其他修改)
来源:互联网 发布:php 判断是否小数 编辑:程序博客网 时间:2024/05/17 08:08
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_statsol_txrx_host_stats_getol_tx_rst_tso_statsol_txrx_print_rawmode_pkt_sim_statsol_ath_set_vap_cts2self_prot_dtim_bcnol_tx_rst_sg_statsol_tx_print_sg_statsol_rst_rx_cksum_statsol_tx_print_tso_statsol_txrx_host_msdu_ttl_statsol_txrx_debugol_txrx_fw_stats_getol_ath_ucfg_reset_peer_mumimo_tx_countol_txrx_aggr_cfgol_rate_is_valid_basicol_ath_net80211_get_vap_statsol_txrx_host_me_statsol_txrx_fw_stats_cfgol_txrx_host_stats_clrol_print_rx_cksum_stats
OL函数通过传递“ic”指针来访问OL层
所有UMAC访问OL或DA层使用的函数,都应当以回调的方式完成,比如使用“ic”函数指针。
任何绕过这种策略访问OL或DA层的函数,都会被判断出来。所以要么通过“ic”指针来访问,或者干脆将整个模块都移到OL层。
通过以下步骤完成通过“ic”指针访问。
- 添加一个“struct ieee80211com”结构体的函数指针。
- 在OL设备attach时,注册到OL函数中 (初始化函数指针) 。
- 需要访问OL曾是,调用这个函数指针。
比如:
ol_ll_pdev_tx_lockol_ll_pdev_tx_unlockol_txrx_osif_vdev_registerol_tx_tso_sg_process_skbol_ath_ucfg_get_peer_mumimo_tx_countol_net80211_set_mu_whtlist
在UMAC中的,并且是OL相关的函数
许多到OL层数据通路相关的函数,都在osif_umac文件中,这是UMAC模块的一部分。这些文件都是OL设备相关的,所以会被移到offload模块。
比如:
osif_ol_ll_vap_hardstartosif_ol_hadstart_vap_vow_debugosif_deliver_data_ol
独立于OL的函数,但当前处在OL层
有一些函数是处在OL层的,但却和OL层没什么关系,这些可以作为通用部分和UMAC模块的一部分。这些函数可以移到UMAC模块。
比如:
transcap_nwifi_to_8023dscp_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脚本也应该做相应的变化,根据当前的模块传递参数。
下面是一些传递到相应模块的模块参数。
模块启动顺序
WLAN驱动模块需要按照下面的顺序启动,这取决于互相的依赖。
asfadfath_dfsath_spectralumacath_halath_rate_ahteroshst_tx99ath_devqca_daqca_ol (这个模块可以在umac之后启动)
qca_ol模块将启动OL设备,qca_da模块将启动DA设备。他们之间互相独立,设备的启动顺序,将取决于谁先被检测到。这也会决定radio的名字。
WLAN驱动固件大小
OL和DA芯片组,都使用的平台。
只使用OL芯片组的平台。
只使用DA芯片组的平台。
图 1-12 WLAN驱动固件大小
- (5)高通AP10.4开发者指南——WLAN(1.5 WLAN驱动模块化的一些其他修改)
- (2)高通AP10.4开发者指南——WLAN(1.2 WLAN软件架构)
- (4)高通AP10.4开发者指南——WLAN(1.4 Offload和direct-attach两种模式下驱动的模块化)
- (3)高通AP10.4开发者指南——WLAN(1.3 QCA_Networking_2016.SPF.2.0版本的WLAN驱动模块架构)
- (1)高通AP10.4开发者指南——WLAN(1.1 Wireless LAN简介)
- (7)高通AP10.4开发者指南——WLAN(2.1 主要数据结构)
- (9)高通AP10.4开发者指南——WLAN(2.3 Buffer管理)
- (10)高通AP10.4开发者指南——WLAN(2.4 Queue管理)
- (6)高通AP10.4开发者指南——WLAN(1.6 Wi-Fi校准数据映射)
- (8)高通AP10.4开发者指南——WLAN(2.2 上下文及同步处理)
- WLAN的一些术语
- 802.11 WLAN 中省电(Power Saving)的一些参数解说
- 802.11 WLAN 中省电(Power Saving)的一些参数解说
- 802.11 WLAN 中省电(Power Saving)的一些参数解说
- 802.11 WLAN 中省电(Power Saving)的一些参数解说
- 802.11 WLAN 中省电(Power Saving)的一些参数解说
- 802.11 WLAN 中省电(Power Saving)的一些参数解说
- 【WLAN从入门到精通-基础篇】第5期——华为WLAN产品命名规范(了解即可)
- navicat ora 06413 连接未打开
- java基础---JDBC的实现
- ISCC2017 Web write up
- Android面试题—校招—阿里
- mysql计算时间差
- (5)高通AP10.4开发者指南——WLAN(1.5 WLAN驱动模块化的一些其他修改)
- Kotlin 对象
- js或jQuery获取当前屏幕的各种高度
- 朴素贝叶斯分类算法(Naive Bayes algorithm)
- linux c++ + vs2017 + 虚拟机环境
- JFinal中如何重写String?
- MEF学习笔记
- c++ class、struct区别
- 4年工作:从量变到质变(公开版)