ol_ath_soc_softc_t 创建流分析

ol_ath_soc_softc_t 创建流分析

__ol_ath_attach(void *hif_hdl, struct ol_attach_t *ol_cfg, osdev_t osdev, qdf_device_t qdf_dev)
{
    // 注意这里在为net_device分配空间的时候会额外分配ol_ath_soc_softc_t大小
    // 也就是 net_device 的私有数据是 ol_ath_soc_softc_t  
    struct net_device *dev = alloc_netdev(sizeof(struct ol_ath_soc_softc),ol_cfg->bus_type == BUS_TYPE_SIM ? "wifi-sim%d" : WIFI_DEV_NAME_SOC,
                       soc_netdev_setup); 
    
    // 正如上面所说,获取 net_device 的私有数据 即 ol_ath_soc_softc_t
    ol_ath_soc_softc_t *soc = ath_netdev_priv(dev);
    
    ol_if_offload_ops_attach(soc, target_type);
    {
        // 连接ops 这个ops实际就是wifi3.0.ko加载的时候 放到数组的即对应 wifi3_0_ops
        /*
        static struct ol_if_offload_ops wifi3_0_ops = {
			.cdp_soc_attach = &ol_if_dp_soc_attach,
			.cdp_soc_init = &ol_if_dp_soc_init,
            .dbglog_attach = &diag_event_log_attach,
            .dbglog_detach = &diag_event_log_detach,
            .update_dp_stats = &ol_update_dp_stats,
        };
        */
        soc->ol_if_ops = ol_if_offload_ops_register[OL_WIFI_3_0];
    }
    
 
    
    soc->sc_osdev = osdev; // 这个是传进来的
    soc->soc_attached = 0;
    soc->sc_osdev->netdev = dev;
    
    // 创建psoc
    struct wlan_objmgr_psoc * psoc = wlan_objmgr_psoc_obj_create(ol_cfg->devid, WLAN_DEV_OL);
      soc->psoc_obj = psoc;
    // 得到tgt_psoc_info的句柄
    tgt_psoc_info = wlan_psoc_get_tgt_if_handle(soc->psoc_obj);
    
    //设置句柄内容
    target_psoc_set_target_type(tgt_psoc_info, ol_cfg->target_type);
    target_psoc_set_target_rev(tgt_psoc_info, ol_cfg->target_revision);
    target_psoc_set_hif_hdl(tgt_psoc_info, hif_hdl);
    target_psoc_set_feature_ptr(tgt_psoc_info, soc);
    struct hif_softc *hif_scn = HIF_GET_SOFTC(hif_hdl);
    target_psoc_set_device_mode(tgt_psoc_info, hif_get_conparam(hif_scn));
    
    
    wlan_psoc_set_qdf_dev(psoc, qdf_dev);
    soc->qdf_dev = qdf_dev;
    
    qdf_dev->drv = osdev;
    osdev->qdf_dev = soc->qdf_dev;
    osdev->netdev = dev;
    //下面是一些配置文件的解读和设置
    ret = cfg_get_ini_file_name(target_type, &ini);
    soc->vow_config = cfg_get(psoc, CFG_OL_VOW_CONFIG);
    
}

wlan_objmgr_psoc_obj_create 流程



struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version,
						WLAN_DEV_TYPE dev_type)
{
	//分配空间
	struct wlan_objmgr_psoc *psoc = qdf_mem_malloc(sizeof(*psoc));
	
}