Lines Matching refs:priv

96 	struct lbtf_private *priv = container_of(work, struct lbtf_private,
101 spin_lock_irq(&priv->driver_lock);
103 if (priv->cmd_response_rxed) {
104 priv->cmd_response_rxed = 0;
105 spin_unlock_irq(&priv->driver_lock);
106 lbtf_process_rx_command(priv);
107 spin_lock_irq(&priv->driver_lock);
110 if (priv->cmd_timed_out && priv->cur_cmd) {
111 struct cmd_ctrl_node *cmdnode = priv->cur_cmd;
113 if (++priv->nr_retries > 10) {
114 lbtf_complete_command(priv, cmdnode,
116 priv->nr_retries = 0;
118 priv->cur_cmd = NULL;
122 list_add(&cmdnode->list, &priv->cmdpendingq);
125 priv->cmd_timed_out = 0;
126 spin_unlock_irq(&priv->driver_lock);
128 if (!priv->fw_ready) {
134 if (!priv->cur_cmd)
135 lbtf_execute_next_command(priv);
143 * @priv A pointer to struct lbtf_private structure
147 static int lbtf_setup_firmware(struct lbtf_private *priv)
153 * Read priv address from HW
155 memset(priv->current_addr, 0xff, ETH_ALEN);
156 ret = lbtf_update_hw_spec(priv);
162 lbtf_set_mac_control(priv);
163 lbtf_set_radio_control(priv);
177 struct lbtf_private *priv = (struct lbtf_private *)data;
181 spin_lock_irqsave(&priv->driver_lock, flags);
183 if (!priv->cur_cmd) {
190 le16_to_cpu(priv->cur_cmd->cmdbuf->command));
192 priv->cmd_timed_out = 1;
193 queue_work(lbtf_wq, &priv->cmd_work);
195 spin_unlock_irqrestore(&priv->driver_lock, flags);
199 static int lbtf_init_adapter(struct lbtf_private *priv)
202 memset(priv->current_addr, 0xff, ETH_ALEN);
203 mutex_init(&priv->lock);
205 priv->vif = NULL;
206 setup_timer(&priv->command_timer, command_timer_fn,
207 (unsigned long)priv);
209 INIT_LIST_HEAD(&priv->cmdfreeq);
210 INIT_LIST_HEAD(&priv->cmdpendingq);
212 spin_lock_init(&priv->driver_lock);
215 if (lbtf_allocate_cmd_buffer(priv))
222 static void lbtf_free_adapter(struct lbtf_private *priv)
225 lbtf_free_cmd_buffer(priv);
226 del_timer(&priv->command_timer);
232 struct lbtf_private *priv = hw->priv;
234 priv->skb_to_tx = skb;
235 queue_work(lbtf_wq, &priv->tx_work);
240 ieee80211_stop_queues(priv->hw);
245 struct lbtf_private *priv = container_of(work, struct lbtf_private,
255 if ((priv->vif->type == NL80211_IFTYPE_AP) &&
256 (!skb_queue_empty(&priv->bc_ps_buf)))
257 skb = skb_dequeue(&priv->bc_ps_buf);
258 else if (priv->skb_to_tx) {
259 skb = priv->skb_to_tx;
260 priv->skb_to_tx = NULL;
270 if (priv->surpriseremoved) {
279 ieee80211_get_tx_rate(priv->hw, info)->hw_value);
287 BUG_ON(priv->tx_skb);
288 spin_lock_irq(&priv->driver_lock);
289 priv->tx_skb = skb;
290 err = priv->hw_host_to_card(priv, MVMS_DAT, skb->data, skb->len);
291 spin_unlock_irq(&priv->driver_lock);
294 priv->tx_skb = NULL;
302 struct lbtf_private *priv = hw->priv;
303 void *card = priv->card;
308 if (!priv->fw_ready)
310 if (priv->hw_prog_firmware(card))
314 priv->capability = WLAN_CAPABILITY_SHORT_PREAMBLE;
315 priv->radioon = RADIO_ON;
316 priv->mac_control = CMD_ACT_MAC_RX_ON | CMD_ACT_MAC_TX_ON;
317 ret = lbtf_setup_firmware(priv);
321 if ((priv->fwrelease < LBTF_FW_VER_MIN) ||
322 (priv->fwrelease > LBTF_FW_VER_MAX)) {
332 priv->hw_reset_device(card);
339 struct lbtf_private *priv = hw->priv;
348 spin_lock_irqsave(&priv->driver_lock, flags);
349 list_for_each_entry(cmdnode, &priv->cmdpendingq, list) {
355 spin_unlock_irqrestore(&priv->driver_lock, flags);
356 cancel_work_sync(&priv->cmd_work);
357 cancel_work_sync(&priv->tx_work);
358 while ((skb = skb_dequeue(&priv->bc_ps_buf)))
360 priv->radioon = RADIO_OFF;
361 lbtf_set_radio_control(priv);
369 struct lbtf_private *priv = hw->priv;
371 if (priv->vif != NULL)
374 priv->vif = vif;
378 lbtf_set_mode(priv, LBTF_AP_MODE);
381 lbtf_set_mode(priv, LBTF_STA_MODE);
384 priv->vif = NULL;
387 lbtf_set_mac_address(priv, (u8 *) vif->addr);
395 struct lbtf_private *priv = hw->priv;
398 if (priv->vif->type == NL80211_IFTYPE_AP ||
399 priv->vif->type == NL80211_IFTYPE_MESH_POINT)
400 lbtf_beacon_ctrl(priv, 0, 0);
401 lbtf_set_mode(priv, LBTF_PASSIVE_MODE);
402 lbtf_set_bssid(priv, 0, NULL);
403 priv->vif = NULL;
409 struct lbtf_private *priv = hw->priv;
413 if (conf->channel->center_freq != priv->cur_freq) {
414 priv->cur_freq = conf->channel->center_freq;
415 lbtf_set_channel(priv, conf->channel->hw_value);
424 struct lbtf_private *priv = hw->priv;
432 priv->nr_of_multicastmacaddr = mc_count;
435 memcpy(&priv->multicastlist[i++], ha->addr, ETH_ALEN);
446 struct lbtf_private *priv = hw->priv;
447 int old_mac_control = priv->mac_control;
460 priv->mac_control |= CMD_ACT_MAC_PROMISCUOUS_ENABLE;
462 priv->mac_control &= ~CMD_ACT_MAC_PROMISCUOUS_ENABLE;
465 priv->mac_control |= CMD_ACT_MAC_ALL_MULTICAST_ENABLE;
466 priv->mac_control &= ~CMD_ACT_MAC_MULTICAST_ENABLE;
468 priv->mac_control |= CMD_ACT_MAC_MULTICAST_ENABLE;
469 priv->mac_control &= ~CMD_ACT_MAC_ALL_MULTICAST_ENABLE;
470 lbtf_cmd_set_mac_multicast_addr(priv);
472 priv->mac_control &= ~(CMD_ACT_MAC_MULTICAST_ENABLE |
474 if (priv->nr_of_multicastmacaddr) {
475 priv->nr_of_multicastmacaddr = 0;
476 lbtf_cmd_set_mac_multicast_addr(priv);
481 if (priv->mac_control != old_mac_control)
482 lbtf_set_mac_control(priv);
492 struct lbtf_private *priv = hw->priv;
497 switch (priv->vif->type) {
502 lbtf_beacon_set(priv, beacon);
504 lbtf_beacon_ctrl(priv, 1,
515 lbtf_set_bssid(priv, activate, bss_conf->bssid);
520 priv->preamble = CMD_TYPE_SHORT_PREAMBLE;
522 priv->preamble = CMD_TYPE_LONG_PREAMBLE;
523 lbtf_set_radio_control(priv);
532 struct lbtf_private *priv = hw->priv;
540 survey->noise = priv->noise;
558 int lbtf_rx(struct lbtf_private *priv, struct sk_buff *skb)
573 stats.freq = priv->cur_freq;
576 priv->noise = prxpd->nf;
604 ieee80211_rx_irqsafe(priv->hw, skb);
621 struct lbtf_private *priv = NULL;
629 priv = hw->priv;
630 if (lbtf_init_adapter(priv))
633 priv->hw = hw;
634 priv->card = card;
635 priv->tx_skb = NULL;
640 memcpy(priv->channels, lbtf_channels, sizeof(lbtf_channels));
641 memcpy(priv->rates, lbtf_rates, sizeof(lbtf_rates));
642 priv->band.n_bitrates = ARRAY_SIZE(lbtf_rates);
643 priv->band.bitrates = priv->rates;
644 priv->band.n_channels = ARRAY_SIZE(lbtf_channels);
645 priv->band.channels = priv->channels;
646 hw->wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band;
650 skb_queue_head_init(&priv->bc_ps_buf);
654 INIT_WORK(&priv->cmd_work, lbtf_cmd_work);
655 INIT_WORK(&priv->tx_work, lbtf_tx_work);
662 lbtf_free_adapter(priv);
664 priv = NULL;
667 lbtf_deb_leave_args(LBTF_DEB_MAIN, "priv %p", priv);
668 return priv;
673 int lbtf_remove_card(struct lbtf_private *priv)
675 struct ieee80211_hw *hw = priv->hw;
679 priv->surpriseremoved = 1;
680 del_timer(&priv->command_timer);
681 lbtf_free_adapter(priv);
682 priv->hw = NULL;
691 void lbtf_send_tx_feedback(struct lbtf_private *priv, u8 retrycnt, u8 fail)
693 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(priv->tx_skb);
704 skb_pull(priv->tx_skb, sizeof(struct txpd));
705 ieee80211_tx_status_irqsafe(priv->hw, priv->tx_skb);
706 priv->tx_skb = NULL;
707 if (!priv->skb_to_tx && skb_queue_empty(&priv->bc_ps_buf))
708 ieee80211_wake_queues(priv->hw);
710 queue_work(lbtf_wq, &priv->tx_work);
714 void lbtf_bcn_sent(struct lbtf_private *priv)
718 if (priv->vif->type != NL80211_IFTYPE_AP)
721 if (skb_queue_empty(&priv->bc_ps_buf)) {
724 while ((skb = ieee80211_get_buffered_bc(priv->hw, priv->vif))) {
725 skb_queue_tail(&priv->bc_ps_buf, skb);
729 ieee80211_stop_queues(priv->hw);
730 queue_work(lbtf_wq, &priv->tx_work);
734 skb = ieee80211_beacon_get(priv->hw, priv->vif);
737 lbtf_beacon_set(priv, skb);