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

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
高通平台WLAN驱动开发文档是用于指导开发人员在高通平台上开发WLAN驱动程序的文档。WLAN驱动程序是一种软件,用于控制和管理无线局域网(WLAN)设备的操作和功能。 该开发文档提供了关于WLAN驱动程序开发的详细信息,包括驱动程序的架构、功能、接口和具体的开发要求。它描述了WLAN设备与操作系统之间的通信方式,例如硬件抽象层(HAL)和操作系统驱动程序接口(OEM-OSI)等。此外,文档还提供了关于WLAN驱动程序编程接口(API)和相关函数的说明,以及如何实现WLAN功能集、网络管理和安全性等方面的指导。 开发人员可以根据这份文档中提供的信息,了解如何在高通平台上开发WLAN驱动程序,并且根据自己的需求进行定制和优。文档中会包含一些常见问题和解决方案,以帮助开发人员克服开发过程中可能遇到的挑战。 由于WLAN驱动程序的开发涉及到硬件、操作系统和网络协议等多个领域的知识,因此该开发文档对于有经验的开发人员来说尤其有价值。通过合理利用这份文档,开发人员可以更高效地开发和调试WLAN驱动程序,从而提高WLAN设备的性能和稳定性。 总之,高通平台WLAN驱动开发文档是一份指导开发人员在高通平台上开发WLAN驱动程序的详细文档,通过阅读并按照其中的指导进行开发,开发人员可以更好地理解和掌握WLAN驱动程序的开发流程和技术要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值