Lines Matching refs:priv
96 struct lbtf_private *priv = container_of(work, struct lbtf_private, in lbtf_cmd_work() local
101 spin_lock_irq(&priv->driver_lock); in lbtf_cmd_work()
103 if (priv->cmd_response_rxed) { in lbtf_cmd_work()
104 priv->cmd_response_rxed = 0; in lbtf_cmd_work()
105 spin_unlock_irq(&priv->driver_lock); in lbtf_cmd_work()
106 lbtf_process_rx_command(priv); in lbtf_cmd_work()
107 spin_lock_irq(&priv->driver_lock); in lbtf_cmd_work()
110 if (priv->cmd_timed_out && priv->cur_cmd) { in lbtf_cmd_work()
111 struct cmd_ctrl_node *cmdnode = priv->cur_cmd; in lbtf_cmd_work()
113 if (++priv->nr_retries > 10) { in lbtf_cmd_work()
114 lbtf_complete_command(priv, cmdnode, in lbtf_cmd_work()
116 priv->nr_retries = 0; in lbtf_cmd_work()
118 priv->cur_cmd = NULL; in lbtf_cmd_work()
122 list_add(&cmdnode->list, &priv->cmdpendingq); in lbtf_cmd_work()
125 priv->cmd_timed_out = 0; in lbtf_cmd_work()
126 spin_unlock_irq(&priv->driver_lock); in lbtf_cmd_work()
128 if (!priv->fw_ready) { in lbtf_cmd_work()
134 if (!priv->cur_cmd) in lbtf_cmd_work()
135 lbtf_execute_next_command(priv); in lbtf_cmd_work()
147 static int lbtf_setup_firmware(struct lbtf_private *priv) in lbtf_setup_firmware() argument
155 eth_broadcast_addr(priv->current_addr); in lbtf_setup_firmware()
156 ret = lbtf_update_hw_spec(priv); in lbtf_setup_firmware()
162 lbtf_set_mac_control(priv); in lbtf_setup_firmware()
163 lbtf_set_radio_control(priv); in lbtf_setup_firmware()
177 struct lbtf_private *priv = (struct lbtf_private *)data; in command_timer_fn() local
181 spin_lock_irqsave(&priv->driver_lock, flags); in command_timer_fn()
183 if (!priv->cur_cmd) { in command_timer_fn()
190 le16_to_cpu(priv->cur_cmd->cmdbuf->command)); in command_timer_fn()
192 priv->cmd_timed_out = 1; in command_timer_fn()
193 queue_work(lbtf_wq, &priv->cmd_work); in command_timer_fn()
195 spin_unlock_irqrestore(&priv->driver_lock, flags); in command_timer_fn()
199 static int lbtf_init_adapter(struct lbtf_private *priv) in lbtf_init_adapter() argument
202 eth_broadcast_addr(priv->current_addr); in lbtf_init_adapter()
203 mutex_init(&priv->lock); in lbtf_init_adapter()
205 priv->vif = NULL; in lbtf_init_adapter()
206 setup_timer(&priv->command_timer, command_timer_fn, in lbtf_init_adapter()
207 (unsigned long)priv); in lbtf_init_adapter()
209 INIT_LIST_HEAD(&priv->cmdfreeq); in lbtf_init_adapter()
210 INIT_LIST_HEAD(&priv->cmdpendingq); in lbtf_init_adapter()
212 spin_lock_init(&priv->driver_lock); in lbtf_init_adapter()
215 if (lbtf_allocate_cmd_buffer(priv)) in lbtf_init_adapter()
222 static void lbtf_free_adapter(struct lbtf_private *priv) in lbtf_free_adapter() argument
225 lbtf_free_cmd_buffer(priv); in lbtf_free_adapter()
226 del_timer(&priv->command_timer); in lbtf_free_adapter()
234 struct lbtf_private *priv = hw->priv; in lbtf_op_tx() local
236 priv->skb_to_tx = skb; in lbtf_op_tx()
237 queue_work(lbtf_wq, &priv->tx_work); in lbtf_op_tx()
242 ieee80211_stop_queues(priv->hw); in lbtf_op_tx()
247 struct lbtf_private *priv = container_of(work, struct lbtf_private, in lbtf_tx_work() local
257 if ((priv->vif->type == NL80211_IFTYPE_AP) && in lbtf_tx_work()
258 (!skb_queue_empty(&priv->bc_ps_buf))) in lbtf_tx_work()
259 skb = skb_dequeue(&priv->bc_ps_buf); in lbtf_tx_work()
260 else if (priv->skb_to_tx) { in lbtf_tx_work()
261 skb = priv->skb_to_tx; in lbtf_tx_work()
262 priv->skb_to_tx = NULL; in lbtf_tx_work()
272 if (priv->surpriseremoved) { in lbtf_tx_work()
281 ieee80211_get_tx_rate(priv->hw, info)->hw_value); in lbtf_tx_work()
289 BUG_ON(priv->tx_skb); in lbtf_tx_work()
290 spin_lock_irq(&priv->driver_lock); in lbtf_tx_work()
291 priv->tx_skb = skb; in lbtf_tx_work()
292 err = priv->hw_host_to_card(priv, MVMS_DAT, skb->data, skb->len); in lbtf_tx_work()
293 spin_unlock_irq(&priv->driver_lock); in lbtf_tx_work()
296 priv->tx_skb = NULL; in lbtf_tx_work()
304 struct lbtf_private *priv = hw->priv; in lbtf_op_start() local
305 void *card = priv->card; in lbtf_op_start()
310 if (!priv->fw_ready) in lbtf_op_start()
312 if (priv->hw_prog_firmware(card)) in lbtf_op_start()
316 priv->capability = WLAN_CAPABILITY_SHORT_PREAMBLE; in lbtf_op_start()
317 priv->radioon = RADIO_ON; in lbtf_op_start()
318 priv->mac_control = CMD_ACT_MAC_RX_ON | CMD_ACT_MAC_TX_ON; in lbtf_op_start()
319 ret = lbtf_setup_firmware(priv); in lbtf_op_start()
323 if ((priv->fwrelease < LBTF_FW_VER_MIN) || in lbtf_op_start()
324 (priv->fwrelease > LBTF_FW_VER_MAX)) { in lbtf_op_start()
334 priv->hw_reset_device(card); in lbtf_op_start()
341 struct lbtf_private *priv = hw->priv; in lbtf_op_stop() local
350 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_op_stop()
351 list_for_each_entry(cmdnode, &priv->cmdpendingq, list) { in lbtf_op_stop()
357 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_op_stop()
358 cancel_work_sync(&priv->cmd_work); in lbtf_op_stop()
359 cancel_work_sync(&priv->tx_work); in lbtf_op_stop()
360 while ((skb = skb_dequeue(&priv->bc_ps_buf))) in lbtf_op_stop()
362 priv->radioon = RADIO_OFF; in lbtf_op_stop()
363 lbtf_set_radio_control(priv); in lbtf_op_stop()
371 struct lbtf_private *priv = hw->priv; in lbtf_op_add_interface() local
373 if (priv->vif != NULL) in lbtf_op_add_interface()
376 priv->vif = vif; in lbtf_op_add_interface()
380 lbtf_set_mode(priv, LBTF_AP_MODE); in lbtf_op_add_interface()
383 lbtf_set_mode(priv, LBTF_STA_MODE); in lbtf_op_add_interface()
386 priv->vif = NULL; in lbtf_op_add_interface()
389 lbtf_set_mac_address(priv, (u8 *) vif->addr); in lbtf_op_add_interface()
397 struct lbtf_private *priv = hw->priv; in lbtf_op_remove_interface() local
400 if (priv->vif->type == NL80211_IFTYPE_AP || in lbtf_op_remove_interface()
401 priv->vif->type == NL80211_IFTYPE_MESH_POINT) in lbtf_op_remove_interface()
402 lbtf_beacon_ctrl(priv, 0, 0); in lbtf_op_remove_interface()
403 lbtf_set_mode(priv, LBTF_PASSIVE_MODE); in lbtf_op_remove_interface()
404 lbtf_set_bssid(priv, 0, NULL); in lbtf_op_remove_interface()
405 priv->vif = NULL; in lbtf_op_remove_interface()
411 struct lbtf_private *priv = hw->priv; in lbtf_op_config() local
415 if (conf->chandef.chan->center_freq != priv->cur_freq) { in lbtf_op_config()
416 priv->cur_freq = conf->chandef.chan->center_freq; in lbtf_op_config()
417 lbtf_set_channel(priv, conf->chandef.chan->hw_value); in lbtf_op_config()
426 struct lbtf_private *priv = hw->priv; in lbtf_op_prepare_multicast() local
434 priv->nr_of_multicastmacaddr = mc_count; in lbtf_op_prepare_multicast()
437 memcpy(&priv->multicastlist[i++], ha->addr, ETH_ALEN); in lbtf_op_prepare_multicast()
448 struct lbtf_private *priv = hw->priv; in lbtf_op_configure_filter() local
449 int old_mac_control = priv->mac_control; in lbtf_op_configure_filter()
461 priv->mac_control &= ~CMD_ACT_MAC_PROMISCUOUS_ENABLE; in lbtf_op_configure_filter()
464 priv->mac_control |= CMD_ACT_MAC_ALL_MULTICAST_ENABLE; in lbtf_op_configure_filter()
465 priv->mac_control &= ~CMD_ACT_MAC_MULTICAST_ENABLE; in lbtf_op_configure_filter()
467 priv->mac_control |= CMD_ACT_MAC_MULTICAST_ENABLE; in lbtf_op_configure_filter()
468 priv->mac_control &= ~CMD_ACT_MAC_ALL_MULTICAST_ENABLE; in lbtf_op_configure_filter()
469 lbtf_cmd_set_mac_multicast_addr(priv); in lbtf_op_configure_filter()
471 priv->mac_control &= ~(CMD_ACT_MAC_MULTICAST_ENABLE | in lbtf_op_configure_filter()
473 if (priv->nr_of_multicastmacaddr) { in lbtf_op_configure_filter()
474 priv->nr_of_multicastmacaddr = 0; in lbtf_op_configure_filter()
475 lbtf_cmd_set_mac_multicast_addr(priv); in lbtf_op_configure_filter()
480 if (priv->mac_control != old_mac_control) in lbtf_op_configure_filter()
481 lbtf_set_mac_control(priv); in lbtf_op_configure_filter()
491 struct lbtf_private *priv = hw->priv; in lbtf_op_bss_info_changed() local
496 switch (priv->vif->type) { in lbtf_op_bss_info_changed()
501 lbtf_beacon_set(priv, beacon); in lbtf_op_bss_info_changed()
503 lbtf_beacon_ctrl(priv, 1, in lbtf_op_bss_info_changed()
514 lbtf_set_bssid(priv, activate, bss_conf->bssid); in lbtf_op_bss_info_changed()
519 priv->preamble = CMD_TYPE_SHORT_PREAMBLE; in lbtf_op_bss_info_changed()
521 priv->preamble = CMD_TYPE_LONG_PREAMBLE; in lbtf_op_bss_info_changed()
522 lbtf_set_radio_control(priv); in lbtf_op_bss_info_changed()
531 struct lbtf_private *priv = hw->priv; in lbtf_op_get_survey() local
539 survey->noise = priv->noise; in lbtf_op_get_survey()
557 int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb) in lbtf_rx() argument
572 stats.freq = priv->cur_freq; in lbtf_rx()
575 priv->noise = prxpd->nf; in lbtf_rx()
603 ieee80211_rx_irqsafe(priv->hw, skb); in lbtf_rx()
620 struct lbtf_private *priv = NULL; in lbtf_add_card() local
628 priv = hw->priv; in lbtf_add_card()
629 if (lbtf_init_adapter(priv)) in lbtf_add_card()
632 priv->hw = hw; in lbtf_add_card()
633 priv->card = card; in lbtf_add_card()
634 priv->tx_skb = NULL; in lbtf_add_card()
639 memcpy(priv->channels, lbtf_channels, sizeof(lbtf_channels)); in lbtf_add_card()
640 memcpy(priv->rates, lbtf_rates, sizeof(lbtf_rates)); in lbtf_add_card()
641 priv->band.n_bitrates = ARRAY_SIZE(lbtf_rates); in lbtf_add_card()
642 priv->band.bitrates = priv->rates; in lbtf_add_card()
643 priv->band.n_channels = ARRAY_SIZE(lbtf_channels); in lbtf_add_card()
644 priv->band.channels = priv->channels; in lbtf_add_card()
645 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band; in lbtf_add_card()
649 skb_queue_head_init(&priv->bc_ps_buf); in lbtf_add_card()
653 INIT_WORK(&priv->cmd_work, lbtf_cmd_work); in lbtf_add_card()
654 INIT_WORK(&priv->tx_work, lbtf_tx_work); in lbtf_add_card()
661 lbtf_free_adapter(priv); in lbtf_add_card()
663 priv = NULL; in lbtf_add_card()
666 lbtf_deb_leave_args(LBTF_DEB_MAIN, "priv %p", priv); in lbtf_add_card()
667 return priv; in lbtf_add_card()
672 int lbtf_remove_card(struct lbtf_private *priv) in lbtf_remove_card() argument
674 struct ieee80211_hw *hw = priv->hw; in lbtf_remove_card()
678 priv->surpriseremoved = 1; in lbtf_remove_card()
679 del_timer(&priv->command_timer); in lbtf_remove_card()
680 lbtf_free_adapter(priv); in lbtf_remove_card()
681 priv->hw = NULL; in lbtf_remove_card()
690 void lbtf_send_tx_feedback(struct lbtf_private *priv, u8 retrycnt, u8 fail) in lbtf_send_tx_feedback() argument
692 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(priv->tx_skb); in lbtf_send_tx_feedback()
703 skb_pull(priv->tx_skb, sizeof(struct txpd)); in lbtf_send_tx_feedback()
704 ieee80211_tx_status_irqsafe(priv->hw, priv->tx_skb); in lbtf_send_tx_feedback()
705 priv->tx_skb = NULL; in lbtf_send_tx_feedback()
706 if (!priv->skb_to_tx && skb_queue_empty(&priv->bc_ps_buf)) in lbtf_send_tx_feedback()
707 ieee80211_wake_queues(priv->hw); in lbtf_send_tx_feedback()
709 queue_work(lbtf_wq, &priv->tx_work); in lbtf_send_tx_feedback()
713 void lbtf_bcn_sent(struct lbtf_private *priv) in lbtf_bcn_sent() argument
717 if (priv->vif->type != NL80211_IFTYPE_AP) in lbtf_bcn_sent()
720 if (skb_queue_empty(&priv->bc_ps_buf)) { in lbtf_bcn_sent()
723 while ((skb = ieee80211_get_buffered_bc(priv->hw, priv->vif))) { in lbtf_bcn_sent()
724 skb_queue_tail(&priv->bc_ps_buf, skb); in lbtf_bcn_sent()
728 ieee80211_stop_queues(priv->hw); in lbtf_bcn_sent()
729 queue_work(lbtf_wq, &priv->tx_work); in lbtf_bcn_sent()
733 skb = ieee80211_beacon_get(priv->hw, priv->vif); in lbtf_bcn_sent()
736 lbtf_beacon_set(priv, skb); in lbtf_bcn_sent()