初始化序列
qsdk 11.x 架构

OS interface layer (OSIF)
Universal MAC (UMAC)
UMAC协议层允许802.11状态机管理AP和clients
Offload wrapper layer (OL)
初始化流程
ol_ath_pci_probe
ol_ath_ahb_probe
ol_hif_open
hif_open
hif_bus_open
{
switch (bus_type) {
case QDF_BUS_TYPE_PCI:
status = hif_initialize_pci_ops(hif_sc);
break;
case QDF_BUS_TYPE_IPCI:
status = hif_initialize_ipci_ops(hif_sc);
break;
case QDF_BUS_TYPE_SNOC:
status = hif_initialize_snoc_ops(&hif_sc->bus_ops);
break;
case QDF_BUS_TYPE_AHB:
status = hif_initialize_ahb_ops(&hif_sc->bus_ops);
break;
case QDF_BUS_TYPE_SDIO:
status = hif_initialize_sdio_ops(hif_sc);
break;
case QDF_BUS_TYPE_USB:
status = hif_initialize_usb_ops(&hif_sc->bus_ops);
break;
default:
status = QDF_STATUS_E_NOSUPPORT;
break;
}
return hif_sc->bus_ops.hif_bus_open(hif_sc, bus_type);
}
hif_enable
hif_enable_bus
hif_hal_attach
hif_bus_configure
__ol_ath_attach
ol_ath_soc_attach
wmi_handle = wmi_unified_attach(soc, &wmi_params)
QDF_STATUS hif_initialize_pci_ops(struct hif_softc *hif_sc)
{
bus_ops->hif_bus_open = &hif_pci_open;
bus_ops->hif_bus_close = &hif_pci_close;
bus_ops->hif_bus_prevent_linkdown = &hif_pci_prevent_linkdown;
bus_ops->hif_reset_soc = &hif_pci_reset_soc;
bus_ops->hif_bus_suspend = &hif_pci_bus_suspend;
bus_ops->hif_bus_resume = &hif_pci_bus_resume;
bus_ops->hif_bus_suspend_noirq = &hif_pci_bus_suspend_noirq;
bus_ops->hif_bus_resume_noirq = &hif_pci_bus_resume_noirq;
bus_ops->hif_bus_configure = &hif_pci_bus_configure;
}
int hif_pci_bus_configure(struct hif_softc *hif_sc)
{
hif_wlan_enable
hif_config_ce
{
hif_config_ce_by_id(scn, pipe_num)
ce_init
ce_tasklet_init
tasklet_init(&hif_ce_state->tasklets[i].intr_tq,ce_tasklet,(unsigned long)&hif_ce_state->tasklets[i]);
ce_register_irq
init_tasklet_worker_by_ceid
}
hif_configure_irq
}
硬件映射


Soc interface name
Soc 设备的网络接口名字在驱动程序加载期间按照顺序分配。
例如:
soc0 soc1 soc2Radio interface name
在驱动程序加载期间radio 设备网络接口名称在Soc 之间顺序分配。
例如:
wifi0 wifi1 wifi2 wifi3 wifi4VAP interface name
VAP接口名称没有更改,与以前一样,由脚本在创建接口的时候在创建分配
WMI interface
每个pdev的WMI命令应该使用separate Copy engine and endpoint id。下表中给出了分配表
WMI命令应使用不同的CE发送到固件。下表显示了CE到MAC的分配:

wifi_3_0.ko
if_ath_pci.c
static int __init init_ath_pci_3_0(void)
{
#ifdef ATH_AHB
int pciret = 0, ahbret = 0;
int init_ath_ahb_3_0(void);
#endif
qdf_debug("WIFI3.0 Registration");
/* If ahb not enabled then initialize offload ops for 3.0 */
ol_if_register_wifi3_0();
wmi_tlv_init();
ce_service_srng_init();
#if QCA_NSS_WIFILI_OFFLOAD_SUPPORT
osif_nss_register_module(OL_WIFI_3_0, &nss_wifili_soc_ops);
#endif
#ifdef ATH_AHB
ahbret = init_ath_ahb_3_0();
if(ahbret < 0 ) {
qdf_info("ath_ahb: Error while registering ath wlan ahb driver");
}
#endif
qdf_info(KERN_INFO "%s : %s", dev_info, version);
}
module_init(init_ath_pci_3_0);
qca_ol.ko
qca_ol_module.c
static int __init qca_ol_mod_init(void)
{
QDF_STATUS status;
/* Create target interface global context */
status = create_target_if_ctx();
/* Register legacy WMI service ready event callback */
if (status == QDF_STATUS_SUCCESS) {
register_legacy_wmi_service_ready_callback();
} else {
qdf_print("%s Failed ",__func__);
}
/* Assign OL callback to tx ops registeration handler */
wlan_global_lmac_if_set_txops_registration_cb(WLAN_DEV_OL, target_if_register_tx_ops);
wlan_lmac_if_set_umac_txops_registration_cb(olif_register_umac_tx_ops);
pld_init();
#ifdef QCA_NSS_WIFI_OFFLOAD_SUPPORT
/* Initialize wifi mac database object */
osif_nss_wifi_mac_db_obj_init();
#endif
return 0;
}
module_init(qca_ol_mod_init);