Lines Matching refs:wil
23 bool wil_has_other_active_ifaces(struct wil6210_priv *wil, in wil_has_other_active_ifaces() argument
30 for (i = 0; i < wil->max_vifs; i++) { in wil_has_other_active_ifaces()
31 vif = wil->vifs[i]; in wil_has_other_active_ifaces()
44 bool wil_has_active_ifaces(struct wil6210_priv *wil, bool up, bool ok) in wil_has_active_ifaces() argument
47 return wil_has_other_active_ifaces(wil, NULL, up, ok); in wil_has_active_ifaces()
52 struct wil6210_priv *wil = ndev_to_wil(ndev); in wil_open() local
55 wil_dbg_misc(wil, "open\n"); in wil_open()
58 test_bit(WMI_FW_CAPABILITY_WMI_ONLY, wil->fw_capabilities)) { in wil_open()
59 wil_err(wil, "while in debug_fw or wmi_only mode\n"); in wil_open()
63 if (!wil_has_other_active_ifaces(wil, ndev, true, false)) { in wil_open()
64 wil_dbg_misc(wil, "open, first iface\n"); in wil_open()
65 rc = wil_pm_runtime_get(wil); in wil_open()
69 rc = wil_up(wil); in wil_open()
71 wil_pm_runtime_put(wil); in wil_open()
79 struct wil6210_priv *wil = ndev_to_wil(ndev); in wil_stop() local
82 wil_dbg_misc(wil, "stop\n"); in wil_stop()
84 if (!wil_has_other_active_ifaces(wil, ndev, true, false)) { in wil_stop()
85 wil_dbg_misc(wil, "stop, last iface\n"); in wil_stop()
86 rc = wil_down(wil); in wil_stop()
88 wil_pm_runtime_put(wil); in wil_stop()
104 struct wil6210_priv *wil = container_of(napi, struct wil6210_priv, in wil6210_netdev_poll_rx() local
109 wil_rx_handle(wil, "a); in wil6210_netdev_poll_rx()
114 wil6210_unmask_irq_rx(wil); in wil6210_netdev_poll_rx()
115 wil_dbg_txrx(wil, "NAPI RX complete\n"); in wil6210_netdev_poll_rx()
118 wil_dbg_txrx(wil, "NAPI RX poll(%d) done %d\n", budget, done); in wil6210_netdev_poll_rx()
125 struct wil6210_priv *wil = container_of(napi, struct wil6210_priv, in wil6210_netdev_poll_rx_edma() local
130 wil_rx_handle_edma(wil, "a); in wil6210_netdev_poll_rx_edma()
135 wil6210_unmask_irq_rx_edma(wil); in wil6210_netdev_poll_rx_edma()
136 wil_dbg_txrx(wil, "NAPI RX complete\n"); in wil6210_netdev_poll_rx_edma()
139 wil_dbg_txrx(wil, "NAPI RX poll(%d) done %d\n", budget, done); in wil6210_netdev_poll_rx_edma()
146 struct wil6210_priv *wil = container_of(napi, struct wil6210_priv, in wil6210_netdev_poll_tx() local
153 struct wil_ring *ring = &wil->ring_tx[i]; in wil6210_netdev_poll_tx()
154 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[i]; in wil6210_netdev_poll_tx()
158 txdata->mid >= wil->max_vifs) in wil6210_netdev_poll_tx()
161 vif = wil->vifs[txdata->mid]; in wil6210_netdev_poll_tx()
163 wil_dbg_txrx(wil, "Invalid MID %d\n", txdata->mid); in wil6210_netdev_poll_tx()
172 wil6210_unmask_irq_tx(wil); in wil6210_netdev_poll_tx()
173 wil_dbg_txrx(wil, "NAPI TX complete\n"); in wil6210_netdev_poll_tx()
176 wil_dbg_txrx(wil, "NAPI TX poll(%d) done %d\n", budget, tx_done); in wil6210_netdev_poll_tx()
183 struct wil6210_priv *wil = container_of(napi, struct wil6210_priv, in wil6210_netdev_poll_tx_edma() local
187 struct wil_status_ring *sring = &wil->srings[wil->tx_sring_idx]; in wil6210_netdev_poll_tx_edma()
192 tx_done = wil_tx_sring_handler(wil, sring); in wil6210_netdev_poll_tx_edma()
196 wil6210_unmask_irq_tx_edma(wil); in wil6210_netdev_poll_tx_edma()
197 wil_dbg_txrx(wil, "NAPI TX complete\n"); in wil6210_netdev_poll_tx_edma()
200 wil_dbg_txrx(wil, "NAPI TX poll(%d) done %d\n", budget, tx_done); in wil6210_netdev_poll_tx_edma()
241 struct wil6210_priv *wil = vif_to_wil(vif); in wil_connect_timer_fn() local
244 wil_err(wil, "Connect timeout detected, disconnect station\n"); in wil_connect_timer_fn()
250 q = queue_work(wil->wmi_wq, &vif->disconnect_worker); in wil_connect_timer_fn()
251 wil_dbg_wmi(wil, "queue_work of disconnect_worker -> %d\n", q); in wil_connect_timer_fn()
257 struct wil6210_priv *wil = vif_to_wil(vif); in wil_scan_timer_fn() local
259 clear_bit(wil_status_fwready, wil->status); in wil_scan_timer_fn()
260 wil_err(wil, "Scan timeout detected, start fw error recovery\n"); in wil_scan_timer_fn()
261 wil_fw_error_recovery(wil); in wil_scan_timer_fn()
267 struct wil6210_priv *wil = vif_to_wil(vif); in wil_p2p_discovery_timer_fn() local
269 wil_dbg_misc(wil, "p2p_discovery_timer_fn\n"); in wil_p2p_discovery_timer_fn()
293 static u8 wil_vif_find_free_mid(struct wil6210_priv *wil) in wil_vif_find_free_mid() argument
297 for (i = 0; i < wil->max_vifs; i++) { in wil_vif_find_free_mid()
298 if (!wil->vifs[i]) in wil_vif_find_free_mid()
306 wil_vif_alloc(struct wil6210_priv *wil, const char *name, in wil_vif_alloc() argument
314 mid = wil_vif_find_free_mid(wil); in wil_vif_alloc()
316 wil_err(wil, "no available virtual interface\n"); in wil_vif_alloc()
323 dev_err(wil_to_dev(wil), "alloc_netdev failed\n"); in wil_vif_alloc()
327 wil->main_ndev = ndev; in wil_vif_alloc()
335 vif->wil = wil; in wil_vif_alloc()
340 wdev->wiphy = wil->wiphy; in wil_vif_alloc()
359 struct wil6210_priv *wil; in wil_if_alloc() local
363 wil = wil_cfg80211_init(dev); in wil_if_alloc()
364 if (IS_ERR(wil)) { in wil_if_alloc()
366 return wil; in wil_if_alloc()
369 rc = wil_priv_init(wil); in wil_if_alloc()
375 wil_dbg_misc(wil, "if_alloc\n"); in wil_if_alloc()
377 vif = wil_vif_alloc(wil, "wlan%d", NET_NAME_UNKNOWN, in wil_if_alloc()
385 wil->radio_wdev = vif_to_wdev(vif); in wil_if_alloc()
387 return wil; in wil_if_alloc()
390 wil_priv_deinit(wil); in wil_if_alloc()
393 wil_cfg80211_deinit(wil); in wil_if_alloc()
398 void wil_if_free(struct wil6210_priv *wil) in wil_if_free() argument
400 struct net_device *ndev = wil->main_ndev; in wil_if_free()
402 wil_dbg_misc(wil, "if_free\n"); in wil_if_free()
407 wil_priv_deinit(wil); in wil_if_free()
409 wil->main_ndev = NULL; in wil_if_free()
413 wil_cfg80211_deinit(wil); in wil_if_free()
416 int wil_vif_add(struct wil6210_priv *wil, struct wil6210_vif *vif) in wil_vif_add() argument
420 bool any_active = wil_has_active_ifaces(wil, true, false); in wil_vif_add()
425 if (wil->vifs[vif->mid]) { in wil_vif_add()
431 rc = wmi_port_allocate(wil, vif->mid, ndev->dev_addr, in wil_vif_add()
440 wmi_port_delete(wil, vif->mid); in wil_vif_add()
444 wil->vifs[vif->mid] = vif; in wil_vif_add()
448 int wil_if_add(struct wil6210_priv *wil) in wil_if_add() argument
450 struct wiphy *wiphy = wil->wiphy; in wil_if_add()
451 struct net_device *ndev = wil->main_ndev; in wil_if_add()
455 wil_dbg_misc(wil, "entered"); in wil_if_add()
457 strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version)); in wil_if_add()
461 wil_err(wil, "failed to register wiphy, err %d\n", rc); in wil_if_add()
465 init_dummy_netdev(&wil->napi_ndev); in wil_if_add()
466 if (wil->use_enhanced_dma_hw) { in wil_if_add()
467 netif_napi_add(&wil->napi_ndev, &wil->napi_rx, in wil_if_add()
470 netif_tx_napi_add(&wil->napi_ndev, in wil_if_add()
471 &wil->napi_tx, wil6210_netdev_poll_tx_edma, in wil_if_add()
474 netif_napi_add(&wil->napi_ndev, &wil->napi_rx, in wil_if_add()
477 netif_tx_napi_add(&wil->napi_ndev, in wil_if_add()
478 &wil->napi_tx, wil6210_netdev_poll_tx, in wil_if_add()
482 wil_update_net_queues_bh(wil, vif, NULL, true); in wil_if_add()
485 rc = wil_vif_add(wil, vif); in wil_if_add()
497 void wil_vif_remove(struct wil6210_priv *wil, u8 mid) in wil_vif_remove() argument
501 bool any_active = wil_has_active_ifaces(wil, true, false); in wil_vif_remove()
504 if (mid >= wil->max_vifs) { in wil_vif_remove()
505 wil_err(wil, "invalid MID: %d\n", mid); in wil_vif_remove()
509 vif = wil->vifs[mid]; in wil_vif_remove()
511 wil_err(wil, "MID %d not registered\n", mid); in wil_vif_remove()
515 mutex_lock(&wil->mutex); in wil_vif_remove()
517 mutex_unlock(&wil->mutex); in wil_vif_remove()
526 wmi_port_delete(wil, vif->mid); in wil_vif_remove()
529 mutex_lock(&wil->vif_mutex); in wil_vif_remove()
530 wil->vifs[mid] = NULL; in wil_vif_remove()
533 if (test_bit(wil_status_napi_en, wil->status)) { in wil_vif_remove()
534 napi_synchronize(&wil->napi_rx); in wil_vif_remove()
535 napi_synchronize(&wil->napi_tx); in wil_vif_remove()
537 mutex_unlock(&wil->vif_mutex); in wil_vif_remove()
539 flush_work(&wil->wmi_event_worker); in wil_vif_remove()
550 void wil_if_remove(struct wil6210_priv *wil) in wil_if_remove() argument
552 struct net_device *ndev = wil->main_ndev; in wil_if_remove()
555 wil_dbg_misc(wil, "if_remove\n"); in wil_if_remove()
558 wil_vif_remove(wil, 0); in wil_if_remove()
561 netif_napi_del(&wil->napi_tx); in wil_if_remove()
562 netif_napi_del(&wil->napi_rx); in wil_if_remove()