Lines Matching refs:cfg
1059 typedef s32(*EVENT_HANDLER) (struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
1654 #define LOG_TS(cfg, ts) cfg->tsinfo.ts = OSL_LOCALTIME_NS(); argument
1655 #define CLR_TS(cfg, ts) cfg->tsinfo.ts = 0; argument
1656 #define GET_TS(cfg, ts) cfg->tsinfo.ts; argument
1789 s32(*state_notifier) (struct bcm_cfg80211 *cfg,
2008 bool wl_cfg80211_static_if(struct bcm_cfg80211 *cfg, struct net_device *ndev);
2009 int wl_cfg80211_static_ifidx(struct bcm_cfg80211 *cfg, struct net_device *ndev);
2010 struct net_device *wl_cfg80211_static_if_active(struct bcm_cfg80211 *cfg);
2011 int wl_cfg80211_static_if_name(struct bcm_cfg80211 *cfg, const char *name);
2054 wl_probe_wdev_all(struct bcm_cfg80211 *cfg) in wl_probe_wdev_all() argument
2059 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_probe_wdev_all()
2062 &cfg->net_list, list) { in wl_probe_wdev_all()
2067 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_probe_wdev_all()
2072 wl_get_netinfo_by_fw_idx(struct bcm_cfg80211 *cfg, s32 bssidx, u8 ifidx) in wl_get_netinfo_by_fw_idx() argument
2077 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_netinfo_by_fw_idx()
2079 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_netinfo_by_fw_idx()
2087 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_netinfo_by_fw_idx()
2092 wl_dealloc_netinfo_by_wdev(struct bcm_cfg80211 *cfg, struct wireless_dev *wdev) in wl_dealloc_netinfo_by_wdev() argument
2100 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_dealloc_netinfo_by_wdev()
2102 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_dealloc_netinfo_by_wdev()
2108 MFREE(cfg->osh, bss->wpa_ie, bss->wpa_ie[1] in wl_dealloc_netinfo_by_wdev()
2114 MFREE(cfg->osh, bss->rsn_ie, in wl_dealloc_netinfo_by_wdev()
2120 MFREE(cfg->osh, bss->wps_ie, bss->wps_ie[1] + 2); in wl_dealloc_netinfo_by_wdev()
2124 cfg->iface_cnt--; in wl_dealloc_netinfo_by_wdev()
2125 MFREE(cfg->osh, _net_info, sizeof(struct net_info)); in wl_dealloc_netinfo_by_wdev()
2128 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_dealloc_netinfo_by_wdev()
2130 WL_INFORM_MEM(("dealloc_netinfo exit iface_cnt=%d \n", cfg->iface_cnt)); in wl_dealloc_netinfo_by_wdev()
2135 wl_alloc_netinfo(struct bcm_cfg80211 *cfg, struct net_device *ndev, in wl_alloc_netinfo() argument
2148 if ((_net_info = wl_get_netinfo_by_fw_idx(cfg, bssidx, ifidx))) { in wl_alloc_netinfo()
2155 wl_probe_wdev_all(cfg); in wl_alloc_netinfo()
2161 if (cfg->iface_cnt == IFACE_MAX_CNT) in wl_alloc_netinfo()
2163 _net_info = (struct net_info *)MALLOCZ(cfg->osh, sizeof(struct net_info)); in wl_alloc_netinfo()
2176 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_alloc_netinfo()
2177 cfg->iface_cnt++; in wl_alloc_netinfo()
2178 list_add(&_net_info->list, &cfg->net_list); in wl_alloc_netinfo()
2179 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_alloc_netinfo()
2182 WL_DBG(("alloc_netinfo exit iface_cnt=%d \n", cfg->iface_cnt)); in wl_alloc_netinfo()
2188 wl_delete_all_netinfo(struct bcm_cfg80211 *cfg) in wl_delete_all_netinfo() argument
2193 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_delete_all_netinfo()
2195 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_delete_all_netinfo()
2200 MFREE(cfg->osh, bss->wpa_ie, bss->wpa_ie[1] in wl_delete_all_netinfo()
2206 MFREE(cfg->osh, bss->rsn_ie, bss->rsn_ie[1] in wl_delete_all_netinfo()
2212 MFREE(cfg->osh, bss->wps_ie, bss->wps_ie[1] + 2); in wl_delete_all_netinfo()
2217 MFREE(cfg->osh, bss->fils_ind_ie, bss->fils_ind_ie[1] in wl_delete_all_netinfo()
2223 MFREE(cfg->osh, _net_info->wdev, sizeof(struct wireless_dev)); in wl_delete_all_netinfo()
2225 MFREE(cfg->osh, _net_info, sizeof(struct net_info)); in wl_delete_all_netinfo()
2227 cfg->iface_cnt = 0; in wl_delete_all_netinfo()
2228 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_delete_all_netinfo()
2231 wl_get_status_all(struct bcm_cfg80211 *cfg, s32 status) in wl_get_status_all() argument
2238 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_status_all()
2240 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_status_all()
2246 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_status_all()
2250 wl_set_status_all(struct bcm_cfg80211 *cfg, s32 status, u32 op) in wl_set_status_all() argument
2255 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_set_status_all()
2257 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_set_status_all()
2267 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_set_status_all()
2269 if (cfg->state_notifier && in wl_set_status_all()
2270 test_bit(status, &(cfg->interrested_state))) in wl_set_status_all()
2271 cfg->state_notifier(cfg, _net_info, status, false); in wl_set_status_all()
2279 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_set_status_all()
2282 wl_set_status_by_netdev(struct bcm_cfg80211 *cfg, s32 status, in wl_set_status_by_netdev() argument
2299 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_set_status_by_netdev()
2301 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_set_status_by_netdev()
2310 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_set_status_by_netdev()
2312 if (cfg->state_notifier && in wl_set_status_by_netdev()
2313 test_bit(status, &(cfg->interrested_state))) in wl_set_status_by_netdev()
2314 cfg->state_notifier(cfg, _net_info, status, true); in wl_set_status_by_netdev()
2321 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_set_status_by_netdev()
2323 if (cfg->state_notifier && in wl_set_status_by_netdev()
2324 test_bit(status, &(cfg->interrested_state))) in wl_set_status_by_netdev()
2325 cfg->state_notifier(cfg, _net_info, status, false); in wl_set_status_by_netdev()
2334 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_set_status_by_netdev()
2339 wl_get_cfgbss_by_wdev(struct bcm_cfg80211 *cfg, in wl_get_cfgbss_by_wdev() argument
2346 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_cfgbss_by_wdev()
2348 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_cfgbss_by_wdev()
2356 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_cfgbss_by_wdev()
2361 wl_get_status_by_netdev(struct bcm_cfg80211 *cfg, s32 status, in wl_get_status_by_netdev() argument
2368 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_status_by_netdev()
2370 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_status_by_netdev()
2377 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_status_by_netdev()
2382 wl_get_mode_by_netdev(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_get_mode_by_netdev() argument
2388 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_mode_by_netdev()
2390 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_mode_by_netdev()
2397 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_mode_by_netdev()
2402 wl_get_bssidx_by_wdev(struct bcm_cfg80211 *cfg, struct wireless_dev *wdev) in wl_get_bssidx_by_wdev() argument
2408 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_bssidx_by_wdev()
2410 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_bssidx_by_wdev()
2417 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_bssidx_by_wdev()
2422 wl_get_wdev_by_fw_idx(struct bcm_cfg80211 *cfg, s32 bssidx, s32 ifidx) in wl_get_wdev_by_fw_idx() argument
2430 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_wdev_by_fw_idx()
2432 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_wdev_by_fw_idx()
2439 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_wdev_by_fw_idx()
2444 wl_get_profile_by_netdev(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_get_profile_by_netdev() argument
2450 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_profile_by_netdev()
2452 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_profile_by_netdev()
2459 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_profile_by_netdev()
2463 wl_get_netinfo_by_netdev(struct bcm_cfg80211 *cfg, struct net_device *ndev) in wl_get_netinfo_by_netdev() argument
2468 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_netinfo_by_netdev()
2470 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_netinfo_by_netdev()
2477 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_netinfo_by_netdev()
2482 wl_get_netinfo_by_wdev(struct bcm_cfg80211 *cfg, struct wireless_dev *wdev) in wl_get_netinfo_by_wdev() argument
2487 WL_CFG_NET_LIST_SYNC_LOCK(&cfg->net_list_sync, flags); in wl_get_netinfo_by_wdev()
2489 BCM_LIST_FOR_EACH_ENTRY_SAFE(_net_info, next, &cfg->net_list, list) { in wl_get_netinfo_by_wdev()
2496 WL_CFG_NET_LIST_SYNC_UNLOCK(&cfg->net_list_sync, flags); in wl_get_netinfo_by_wdev()
2543 #define bcmcfg_to_wiphy(cfg) (cfg->wdev->wiphy) argument
2544 #define bcmcfg_to_prmry_ndev(cfg) (cfg->wdev->netdev) argument
2545 #define bcmcfg_to_prmry_wdev(cfg) (cfg->wdev) argument
2546 #define bcmcfg_to_p2p_wdev(cfg) (cfg->p2p_wdev) argument
2558 #define IS_PRIMARY_NDEV(cfg, ndev) (ndev == bcmcfg_to_prmry_ndev(cfg)) argument
2566 #define ndev_to_wlc_ndev(ndev, cfg) ((ndev == cfg->p2p_net) ? \ argument
2567 bcmcfg_to_prmry_ndev(cfg) : ndev)
2569 #define ndev_to_wlc_ndev(ndev, cfg) (ndev) argument
2572 #define wdev_to_wlc_ndev(wdev, cfg) \ argument
2574 wdev_to_ndev(wdev) : bcmcfg_to_prmry_ndev(cfg))
2576 #define cfgdev_to_wlc_ndev(cfgdev, cfg) wdev_to_wlc_ndev(cfgdev, cfg) argument
2577 #define bcmcfg_to_prmry_cfgdev(cfgdev, cfg) bcmcfg_to_prmry_wdev(cfg) argument
2579 #define cfgdev_to_wlc_ndev(cfgdev, cfg) ndev_to_wlc_ndev(cfgdev, cfg) argument
2580 #define bcmcfg_to_prmry_cfgdev(cfgdev, cfg) bcmcfg_to_prmry_ndev(cfg) argument
2582 #define cfgdev_to_wlc_ndev(cfgdev, cfg) (cfgdev) argument
2583 #define bcmcfg_to_prmry_cfgdev(cfgdev, cfg) (cfgdev) argument
2591 #define discover_cfgdev(cfgdev, cfg) (cfgdev->iftype == NL80211_IFTYPE_P2P_DEVICE) argument
2597 #define discover_cfgdev(cfgdev, cfg) (cfgdev == cfg->p2p_net) argument
2601 #define scan_req_match(cfg) (((cfg) && (cfg->scan_request) && \ argument
2602 (cfg->scan_request->wdev == cfg->p2p_wdev)) ? true : false)
2604 #define scan_req_match(cfg) (((cfg) && (cfg->scan_request) && \ argument
2605 (cfg->scan_request->dev == cfg->p2p_net)) ? true : false)
2607 #define scan_req_match(cfg) (((cfg) && p2p_is_on(cfg) && p2p_scan(cfg)) ? \ argument
2637 #define wl_get_drv_status_all(cfg, stat) \ argument
2638 (wl_get_status_all(cfg, WL_STATUS_ ## stat))
2639 #define wl_get_drv_status(cfg, stat, ndev) \ argument
2640 (wl_get_status_by_netdev(cfg, WL_STATUS_ ## stat, ndev))
2641 #define wl_set_drv_status(cfg, stat, ndev) \ argument
2642 (wl_set_status_by_netdev(cfg, WL_STATUS_ ## stat, ndev, 1))
2643 #define wl_clr_drv_status(cfg, stat, ndev) \ argument
2644 (wl_set_status_by_netdev(cfg, WL_STATUS_ ## stat, ndev, 2))
2645 #define wl_clr_drv_status_all(cfg, stat) \ argument
2646 (wl_set_status_all(cfg, WL_STATUS_ ## stat, 2))
2647 #define wl_chg_drv_status(cfg, stat, ndev) \ argument
2648 (wl_set_status_by_netdev(cfg, WL_STATUS_ ## stat, ndev, 4))
2653 #define for_each_ndev(cfg, iter, next) \ argument
2654 list_for_each_entry_safe(iter, next, &cfg->net_list, list)
2692 extern void wl_cfg80211_detach(struct bcm_cfg80211 *cfg);
2696 extern s32 wl_cfg80211_handle_critical_events(struct bcm_cfg80211 *cfg,
2702 void wl_cfg80211_set_bcmcfg(struct bcm_cfg80211 *cfg);
2705 extern s32 wl_cfg80211_clear_mgmt_vndr_ies(struct bcm_cfg80211 *cfg);
2706 extern s32 wl_cfg80211_clear_per_bss_ies(struct bcm_cfg80211 *cfg, struct wireless_dev *wdev);
2707 extern void wl_cfg80211_clear_p2p_disc_ies(struct bcm_cfg80211 *cfg);
2709 extern int32 wl_cfg80211_update_iflist_info(struct bcm_cfg80211 *cfg, struct net_device *ndev,
2721 extern struct net_device* wl_cfg80211_allocate_if(struct bcm_cfg80211 *cfg, int ifidx,
2723 extern int wl_cfg80211_register_if(struct bcm_cfg80211 *cfg,
2725 extern int wl_cfg80211_remove_if(struct bcm_cfg80211 *cfg,
2757 extern s32 wl_cfg80211_sdo_init(struct bcm_cfg80211 *cfg);
2758 extern s32 wl_cfg80211_sdo_deinit(struct bcm_cfg80211 *cfg);
2760 extern s32 wl_cfg80211_pause_sdo(struct net_device *dev, struct bcm_cfg80211 *cfg);
2761 extern s32 wl_cfg80211_resume_sdo(struct net_device *dev, struct bcm_cfg80211 *cfg);
2785 extern s32 wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify);
2793 extern void wl_stop_wait_next_action_frame(struct bcm_cfg80211 *cfg, struct net_device *ndev,
2805 struct bcm_cfg80211 *cfg, wl_eventmsg_buf_t *ev);
2806 extern void get_primary_mac(struct bcm_cfg80211 *cfg, struct ether_addr *mac);
2817 extern bool wl_cfg80211_is_hal_started(struct bcm_cfg80211 *cfg);
2836 extern int wl_cfg80211_set_mgmt_vndr_ies(struct bcm_cfg80211 *cfg,
2849 struct net_device *wl_cfg80211_get_remain_on_channel_ndev(struct bcm_cfg80211 *cfg);
2884 extern s32 wl_cfg80211_bss_up(struct bcm_cfg80211 *cfg,
2896 extern s32 wl_cfg80211_tdls_config(struct bcm_cfg80211 *cfg,
2898 extern s32 wl_tdls_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
2922 #define WL_DRV_STATUS_SENDING_AF_FRM_EXT(cfg) \ argument
2923 (wl_get_drv_status_all(cfg, SENDING_ACT_FRM) || \
2924 wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM_LISTEN))
2926 #define WL_DRV_STATUS_SENDING_AF_FRM_EXT(cfg) wl_get_drv_status_all(cfg, SENDING_ACT_FRM) argument
2930 extern s32 wl_cfg80211_p2plo_deinit(struct bcm_cfg80211 *cfg);
2950 u64 wl_cfg80211_get_new_roc_id(struct bcm_cfg80211 *cfg);
2960 struct wireless_dev * wl_cfg80211_add_if(struct bcm_cfg80211 *cfg, struct net_device *primary_ndev,
2962 extern s32 wl_cfg80211_del_if(struct bcm_cfg80211 *cfg, struct net_device *primary_ndev,
2964 s32 _wl_cfg80211_del_if(struct bcm_cfg80211 *cfg, struct net_device *primary_ndev,
2966 s32 wl_cfg80211_delete_iface(struct bcm_cfg80211 *cfg, wl_iftype_t sec_data_if_type);
2969 extern struct net_device *wl_cfg80211_register_static_if(struct bcm_cfg80211 *cfg,
2971 extern void wl_cfg80211_unregister_static_if(struct bcm_cfg80211 * cfg);
2974 extern struct net_device * wl_cfg80211_post_static_ifcreate(struct bcm_cfg80211 *cfg,
2976 extern s32 wl_cfg80211_post_static_ifdel(struct bcm_cfg80211 *cfg, struct net_device *ndev);
2978 extern struct wireless_dev *wl_cfg80211_get_wdev_from_ifname(struct bcm_cfg80211 *cfg,
2980 struct net_device* wl_get_netdev_by_name(struct bcm_cfg80211 *cfg, char *ifname);
2983 extern int wl_cfg80211_deinit_p2p_discovery(struct bcm_cfg80211 * cfg);
2984 extern int wl_cfg80211_set_frameburst(struct bcm_cfg80211 *cfg, bool enable);
2985 extern int wl_cfg80211_determine_p2p_rsdb_scc_mode(struct bcm_cfg80211 *cfg);
2986 extern uint8 wl_cfg80211_get_bus_state(struct bcm_cfg80211 *cfg);
2991 extern void *wl_read_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32 item);
2992 extern s32 wl_cfg80211_sup_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
2999 extern void wl_print_verinfo(struct bcm_cfg80211 *cfg);
3001 extern int wl_cfg80211_get_concurrency_mode(struct bcm_cfg80211 *cfg);
3010 extern int wl_cfg80211_start_mkeep_alive(struct bcm_cfg80211 *cfg, uint8 mkeep_alive_id,
3013 extern int wl_cfg80211_stop_mkeep_alive(struct bcm_cfg80211 *cfg, uint8 mkeep_alive_id);
3020 extern s32 wl_cfg80211_resume(struct bcm_cfg80211 *cfg);
3021 extern s32 wl_cfg80211_suspend(struct bcm_cfg80211 *cfg);
3028 extern void update_roam_cache(struct bcm_cfg80211 *cfg, int ioctl_ver);
3032 extern int wl_cfgnan_get_stats(struct bcm_cfg80211 *cfg);
3066 extern int wl_cfg80211_config_rsnxe_ie(struct bcm_cfg80211 *cfg, struct net_device *dev,
3071 extern void wl_cfg80211_concurrent_roam(struct bcm_cfg80211 *cfg, int enable);
3077 extern void wl_cfg80211_set_cac(struct bcm_cfg80211 *cfg, int enable);
3079 extern s32 wl_cfg80211_add_del_bss(struct bcm_cfg80211 *cfg,
3082 extern s32 wl_bss_handle_sae_auth(struct bcm_cfg80211 *cfg, struct net_device *ndev,
3087 extern s32 wl_update_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev,
3090 extern s32 wl_handle_auth_event(struct bcm_cfg80211 *cfg, struct net_device *ndev,
3094 extern bool wl_customer6_legacy_chip_check(struct bcm_cfg80211 *cfg,
3098 extern s32 wl_cfgvendor_notify_twt_event(struct bcm_cfg80211 *cfg,
3105 void wl_wlfc_enable(struct bcm_cfg80211 *cfg, bool enable);
3106 s32 wl_handle_join(struct bcm_cfg80211 *cfg, struct net_device *dev,
3108 s32 wl_handle_reassoc(struct bcm_cfg80211 *cfg, struct net_device *dev,