(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”指针访问。

  1. 添加一个“struct ieee80211com”结构体的函数指针。
  2. 在OL设备attach时,注册到OL函数中 (初始化函数指针) 。
  3. 需要访问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脚本也应该做相应的变化,根据当前的模块传递参数。
下面是一些传递到相应模块的模块参数。

模块参数 模块名字 enableuartprint qca_ol.ko enable_tx_tcp_cksum qca_ol.ko vow_config qca_ol.ko max_descs qca_ol.ko qwrap_enable qca_ol.ko max_peers qca_ol.ko max_vdevs qca_ol.ko sa_validate_sw qca_ol.ko dfs_disable qca_ol.ko frac qca_ol.ko intval qca_ol.ko ar900b_20_targ_clk qca_ol.ko qca9888_20_targ_clk qca_ol.ko otp_mod_param qca_ol.ko cfg_iphdr_pad qca_ol.ko emu_type qca_ol.ko enable_smart_antenna qca_ol.ko max_active_peers qca_ol.ko low_mem_system qca_ol.ko nss_wifi_olcfg qca_ol.ko nss_wifi_ol_skip_nw_process qca_ol.ko ol_scan_chanlist qca_ol.ko fw_code_sign qca_ol.ko testmode qca_ol.ko lteu_support qca_ol.ko bmi qca_ol.ko wari qca_ol.ko war1_allow_sleep qca_ol.ko allocram_track_max qca_ol.ko max_clients qca_ol.ko max_vaps qca_ol.ko fw_dump_options qca_ol.ko enable_mesh_support qca_ol.ko wmi_ring_size qca_ol.ko ahbskip umac.ko enable_mesh_peer_cap_update umac.ko wifiposenable umac.ko atf_mode umac.ko atf_msdu_desc umac.ko atf_peers umac.ko atf_max_vdevs umac.ko enable_pktlog_support umac.ko

模块启动顺序

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驱动固件大小

阅读全文
2 0
原创粉丝点击