高通wifi驱动的记录

文章详细解析了高通WiFi驱动中wiphy的概念,它是当PCI设备发现时注册的配置对象。pSOC对象则是在物理设备层创建,存储设备信息和配置。文章还探讨了如何通过ucfg_pmo_get_suspend_mode获取和设置suspend_mode,以及电源管理的相关函数,如wlan_hdd_driver_ops中的电源管理操作。配置文件可能位于WCNSS_qcom_cfg.ini。
摘要由CSDN通过智能技术生成

目录

高通wifi驱动手册:

1、wiphy的理解:

2、 pSOC的理解:

suspend_mode的设置

wifi配置的地方:

在系统里的配置文件,暂时还没找到


高通wifi驱动手册:

https://download.csdn.net/download/yudelian/87959574?spm=1001.2014.3001.5501

一、wiphy的理解:

当pci设备发现的时候,cfg80211 dev (wiphy)就会在radio 设备创建的时候注册,每个radio对应一个wiphy (在高通驱动的6.4.2.1)

二、 pSOC的理解:

struct hdd_context {
    struct wlan_objmgr_psoc *psoc;
    struct wlan_objmgr_pdev *pdev;
}

 在高通驱动手册的(2.6  Object manager)

 pSoc Object
pSoc object is created per physical device, It is allocated for each device probe/connect. It stores all device level information/object/capabilities, it also stores the device level user configurations. This is the core object, it maintains the information about underlying radio architecture  (offload/DA), and number of supported radios.

这个的定义在:

vendor/qcom/opensource/wlan/qca-wifi-host-cmn/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h

struct wlan_objmgr_psoc {
	struct wlan_objmgr_psoc_regulatory soc_reg;
	struct wlan_objmgr_psoc_nif  soc_nif;
	struct wlan_objmgr_psoc_objmgr soc_objmgr;
	struct wlan_soc_southbound_cb soc_cb;
	struct wlan_soc_timer soc_timer;
	struct wlan_concurrency_info soc_concurrency; /*TODO */
	void *soc_comp_priv_obj[WLAN_UMAC_MAX_COMPONENTS];
	QDF_STATUS obj_status[WLAN_UMAC_MAX_COMPONENTS];
	WLAN_OBJ_STATE obj_state;
	struct target_psoc_info *tgt_if_handle;
	void *dp_handle;
	qdf_spinlock_t psoc_lock;
};
vendor/qcom/opensource/wlan/qcacld-3.0/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c
enum pmo_suspend_mode
ucfg_pmo_get_suspend_mode(struct wlan_objmgr_psoc *psoc)
{
	struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc);
	return pmo_psoc_ctx->psoc_cfg.suspend_mode;
}

vendor/qcom/opensource/wlan/qcacld-3.0/components/pmo/core/inc/wlan_pmo_objmgr.h
static inline struct pmo_psoc_priv_obj *
pmo_psoc_get_priv(struct wlan_objmgr_psoc *psoc)
{
	struct pmo_psoc_priv_obj *psoc_priv;
	psoc_priv = pmo_psoc_get_priv_nolock(psoc);
	return psoc_priv;
}

#define pmo_psoc_get_priv_nolock(psoc) \
	wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_PMO)
enum wlan_umac_comp_id {
	WLAN_UMAC_COMP_MLME               = 0,
	WLAN_UMAC_COMP_SCAN               = 3,
	WLAN_UMAC_COMP_PMO                = 4,
}

vendor/qcom/opensource/wlan/qca-wifi-host-cmn/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h
vendor/qcom/opensource/wlan/qca-wifi-host-cmn/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_obj.c
void *wlan_objmgr_psoc_get_comp_private_obj(struct wlan_objmgr_psoc *psoc,
					enum wlan_umac_comp_id id)
{
	void *comp_private_obj; ....
	comp_private_obj = psoc->soc_comp_priv_obj[id];
	return comp_private_obj;
}
qdf_export_symbol(wlan_objmgr_psoc_get_comp_private_obj);

追上面的代码,主要为了一个ucfg_pmo_get_suspend_mode这个函数,将struct wlan_objmgr_psoc * 传入进去后,实际上是为了 拿到wlan_objmgr_psoc的 soc_comp_priv_obj成员,这个成员是 pmo_psoc_priv_obj *类型,然后拿到

下面的psoc_cfg的suspend_mode

/**
 * struct pmo_psoc_priv_obj - psoc related data require for pmo
 */
struct pmo_psoc_priv_obj {
	struct pmo_psoc_cfg psoc_cfg;
};

/**
 * @deauth_enable: true when wake up on deauth is enabled else false
 * @disassoc_enable:  true when wake up on disassoc is enabled else false
 * @wow_enable: enable wow with majic pattern match or pattern byte match
 * @power_save_mode: power save mode for psoc
 * @suspend_mode: suspend mode for psoc
 */
struct pmo_psoc_cfg {
	bool deauth_enable;
	bool disassoc_enable;
	enum pmo_suspend_mode suspend_mode;
}

suspend_mode的设置

有可能设置的地方,记录下:

vendor/qcom/opensource/wlan/qcacld-3.0/components/pmo/core/src/wlan_pmo_main.c
static void wlan_pmo_init_cfg(struct wlan_objmgr_psoc *psoc,
			      struct pmo_psoc_cfg *psoc_cfg) {
	psoc_cfg->suspend_mode = cfg_get(psoc, CFG_PMO_SUSPEND_MODE);
}

wifi配置的地方:

在高通驱动文档里的3.8

代码里的配置文件:

 Android系统高通平台WIFI配置_Just_Paranoid的博客-CSDN博客

 ./device/qcom/msm8909/WCNSS_qcom_cfg.ini

在系统里的配置文件,暂时还没找到

WCNSS_qcom_cfg.ini 文件在手机路径:
/vendor/etc/wifi/WCNSS_qcom_cfg.ini

WCNSS_qcom_cfg.ini WIFI配置文件解析_二十岁了还没有去过星巴克的博客-CSDN博客

手机中 WiFi MAC address 保存在以下手机路径中:

sys/class/net/wlan0/address

vendor/qcom/opensource/wlan/qcacld-3.0/core/hdd/inc/wlan_hdd_misc.h

有个这个,但感觉没啥用的样子,毕竟配置文件在/vendor/etc/wifi/WCNSS_qcom_cfg.ini

#define WLAN_INI_FILE              "wlan/qca_cld/" PREFIX "WCNSS_qcom_cfg.ini"

三、电源管理(power manager)

Linux电源管理 Suspend_linux standby_ll是个笨蛋的博客-CSDN博客

1、wlan driver ops的电源管理

vendor/qcom/opensource/wlan/qcacld-3.0/core/hdd/src/wlan_hdd_driver_ops.c
struct pld_driver_ops wlan_drv_ops = {
	.probe      = wlan_hdd_pld_probe,
	.remove     = wlan_hdd_pld_remove,
	.idle_shutdown = wlan_hdd_pld_idle_shutdown,
	.idle_restart = wlan_hdd_pld_idle_restart,
	.shutdown   = wlan_hdd_pld_shutdown,
	.crash_shutdown = wlan_hdd_pld_crash_shutdown,
	.suspend    = wlan_hdd_pld_suspend,
	.resume     = wlan_hdd_pld_resume,
	.suspend_noirq = wlan_hdd_pld_suspend_noirq,
	.resume_noirq  = wlan_hdd_pld_resume_noirq,
	.reset_resume = wlan_hdd_pld_reset_resume,
#ifdef FEATURE_RUNTIME_PM
	.runtime_suspend = wlan_hdd_pld_runtime_suspend,
	.runtime_resume = wlan_hdd_pld_runtime_resume,
#endif
};

int wlan_hdd_register_driver(void)
{
	return pld_register_driver(&wlan_drv_ops);
}


hdd_driver_load
    wlan_hdd_register_driver

// Register driver to kernel
// vendor/qcom/opensource/wlan/qcacld-3.0/core/pld/src/pld_common.c
int pld_register_driver(struct pld_driver_ops *ops)
{
	int ret = 0;
	struct pld_context *pld_context;
    
    ret = pld_pcie_register_driver();
}

2、register_pm_notifier

在linux内核中的定义:

kernel/msm-5.4/kernel/power/main.c

kernel/msm-5.4/include/linux/suspend.h

wlan_hdd_pld_probe (在wlan_drv_ops 操作函数的.probe)

        hdd_soc_probe(__hdd_soc_probe)

                hdd_context_create

                        register_pm_notifier(&hdd_ctx->pm_notifier);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值