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 < GET_MAX_VIFS(wil); 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, &quota); 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, &quota); 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 >= GET_MAX_VIFS(wil)) 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()
242 struct wil6210_priv *wil = vif_to_wil(vif); in wil_connect_timer_fn() local
245 wil_err(wil, "Connect timeout detected, disconnect station\n"); in wil_connect_timer_fn()
251 q = queue_work(wil->wmi_wq, &vif->disconnect_worker); in wil_connect_timer_fn()
252 wil_dbg_wmi(wil, "queue_work of disconnect_worker -> %d\n", q); in wil_connect_timer_fn()
258 struct wil6210_priv *wil = vif_to_wil(vif); in wil_scan_timer_fn() local
260 clear_bit(wil_status_fwready, wil->status); in wil_scan_timer_fn()
261 wil_err(wil, "Scan timeout detected, start fw error recovery\n"); in wil_scan_timer_fn()
262 wil_fw_error_recovery(wil); in wil_scan_timer_fn()
268 struct wil6210_priv *wil = vif_to_wil(vif); in wil_p2p_discovery_timer_fn() local
270 wil_dbg_misc(wil, "p2p_discovery_timer_fn\n"); in wil_p2p_discovery_timer_fn()
296 static u8 wil_vif_find_free_mid(struct wil6210_priv *wil) in wil_vif_find_free_mid() argument
300 for (i = 0; i < GET_MAX_VIFS(wil); i++) { in wil_vif_find_free_mid()
301 if (!wil->vifs[i]) in wil_vif_find_free_mid()
309 wil_vif_alloc(struct wil6210_priv *wil, const char *name, in wil_vif_alloc() argument
317 mid = wil_vif_find_free_mid(wil); in wil_vif_alloc()
319 wil_err(wil, "no available virtual interface\n"); in wil_vif_alloc()
326 dev_err(wil_to_dev(wil), "alloc_netdev failed\n"); in wil_vif_alloc()
330 wil->main_ndev = ndev; in wil_vif_alloc()
338 vif->wil = wil; in wil_vif_alloc()
343 wdev->wiphy = wil->wiphy; in wil_vif_alloc()
361 struct wil6210_priv *wil; in wil_if_alloc() local
365 wil = wil_cfg80211_init(dev); in wil_if_alloc()
366 if (IS_ERR(wil)) { in wil_if_alloc()
368 return wil; in wil_if_alloc()
371 rc = wil_priv_init(wil); in wil_if_alloc()
377 wil_dbg_misc(wil, "if_alloc\n"); in wil_if_alloc()
379 vif = wil_vif_alloc(wil, "wlan%d", NET_NAME_UNKNOWN, in wil_if_alloc()
387 wil->radio_wdev = vif_to_wdev(vif); in wil_if_alloc()
389 return wil; in wil_if_alloc()
392 wil_priv_deinit(wil); in wil_if_alloc()
395 wil_cfg80211_deinit(wil); in wil_if_alloc()
400 void wil_if_free(struct wil6210_priv *wil) in wil_if_free() argument
402 struct net_device *ndev = wil->main_ndev; in wil_if_free()
404 wil_dbg_misc(wil, "if_free\n"); in wil_if_free()
409 wil_priv_deinit(wil); in wil_if_free()
411 wil->main_ndev = NULL; in wil_if_free()
415 wil_cfg80211_deinit(wil); in wil_if_free()
418 int wil_vif_add(struct wil6210_priv *wil, struct wil6210_vif *vif) in wil_vif_add() argument
422 bool any_active = wil_has_active_ifaces(wil, true, false); in wil_vif_add()
427 if (wil->vifs[vif->mid]) { in wil_vif_add()
433 rc = wmi_port_allocate(wil, vif->mid, ndev->dev_addr, in wil_vif_add()
442 wmi_port_delete(wil, vif->mid); in wil_vif_add()
446 wil->vifs[vif->mid] = vif; in wil_vif_add()
450 int wil_if_add(struct wil6210_priv *wil) in wil_if_add() argument
452 struct wiphy *wiphy = wil->wiphy; in wil_if_add()
453 struct net_device *ndev = wil->main_ndev; in wil_if_add()
457 wil_dbg_misc(wil, "entered"); in wil_if_add()
459 strlcpy(wiphy->fw_version, wil->fw_version, sizeof(wiphy->fw_version)); in wil_if_add()
463 wil_err(wil, "failed to register wiphy, err %d\n", rc); in wil_if_add()
467 init_dummy_netdev(&wil->napi_ndev); in wil_if_add()
468 if (wil->use_enhanced_dma_hw) { in wil_if_add()
469 netif_napi_add(&wil->napi_ndev, &wil->napi_rx, in wil_if_add()
472 netif_tx_napi_add(&wil->napi_ndev, in wil_if_add()
473 &wil->napi_tx, wil6210_netdev_poll_tx_edma, in wil_if_add()
476 netif_napi_add(&wil->napi_ndev, &wil->napi_rx, in wil_if_add()
479 netif_tx_napi_add(&wil->napi_ndev, in wil_if_add()
480 &wil->napi_tx, wil6210_netdev_poll_tx, in wil_if_add()
484 wil_update_net_queues_bh(wil, vif, NULL, true); in wil_if_add()
487 rc = wil_vif_add(wil, vif); in wil_if_add()
499 void wil_vif_remove(struct wil6210_priv *wil, u8 mid) in wil_vif_remove() argument
503 bool any_active = wil_has_active_ifaces(wil, true, false); in wil_vif_remove()
506 if (mid >= GET_MAX_VIFS(wil)) { in wil_vif_remove()
507 wil_err(wil, "invalid MID: %d\n", mid); in wil_vif_remove()
511 vif = wil->vifs[mid]; in wil_vif_remove()
513 wil_err(wil, "MID %d not registered\n", mid); in wil_vif_remove()
517 mutex_lock(&wil->mutex); in wil_vif_remove()
519 mutex_unlock(&wil->mutex); in wil_vif_remove()
528 wmi_port_delete(wil, vif->mid); in wil_vif_remove()
531 mutex_lock(&wil->vif_mutex); in wil_vif_remove()
532 wil->vifs[mid] = NULL; in wil_vif_remove()
535 if (test_bit(wil_status_napi_en, wil->status)) { in wil_vif_remove()
536 napi_synchronize(&wil->napi_rx); in wil_vif_remove()
537 napi_synchronize(&wil->napi_tx); in wil_vif_remove()
539 mutex_unlock(&wil->vif_mutex); in wil_vif_remove()
541 flush_work(&wil->wmi_event_worker); in wil_vif_remove()
553 void wil_if_remove(struct wil6210_priv *wil) in wil_if_remove() argument
555 struct net_device *ndev = wil->main_ndev; in wil_if_remove()
558 wil_dbg_misc(wil, "if_remove\n"); in wil_if_remove()
561 wil_vif_remove(wil, 0); in wil_if_remove()
564 netif_napi_del(&wil->napi_tx); in wil_if_remove()
565 netif_napi_del(&wil->napi_rx); in wil_if_remove()