Lines Matching refs:priv
33 static struct cmd_ctrl_node *lbtf_get_cmd_ctrl_node(struct lbtf_private *priv);
46 int lbtf_cmd_copyback(struct lbtf_private *priv, unsigned long extra, in lbtf_cmd_copyback() argument
60 static void lbtf_geo_init(struct lbtf_private *priv) in lbtf_geo_init() argument
67 if (channel_ranges[i].regdomain == priv->regioncode) { in lbtf_geo_init()
72 for (ch = priv->range.start; ch < priv->range.end; ch++) in lbtf_geo_init()
73 priv->channels[CHAN_TO_IDX(ch)].flags = 0; in lbtf_geo_init()
83 int lbtf_update_hw_spec(struct lbtf_private *priv) in lbtf_update_hw_spec() argument
93 memcpy(cmd.permanentaddr, priv->current_addr, ETH_ALEN); in lbtf_update_hw_spec()
94 ret = lbtf_cmd_with_response(priv, CMD_GET_HW_SPEC, &cmd); in lbtf_update_hw_spec()
98 priv->fwcapinfo = le32_to_cpu(cmd.fwcapinfo); in lbtf_update_hw_spec()
102 priv->fwrelease = le32_to_cpu(cmd.fwrelease); in lbtf_update_hw_spec()
103 priv->fwrelease = (priv->fwrelease << 8) | in lbtf_update_hw_spec()
104 (priv->fwrelease >> 24 & 0xff); in lbtf_update_hw_spec()
108 priv->fwrelease >> 24 & 0xff, in lbtf_update_hw_spec()
109 priv->fwrelease >> 16 & 0xff, in lbtf_update_hw_spec()
110 priv->fwrelease >> 8 & 0xff, in lbtf_update_hw_spec()
111 priv->fwrelease & 0xff, in lbtf_update_hw_spec()
112 priv->fwcapinfo); in lbtf_update_hw_spec()
120 priv->regioncode = le16_to_cpu(cmd.regioncode) & 0xFF; in lbtf_update_hw_spec()
124 if (priv->regioncode == lbtf_region_code_to_index[i]) in lbtf_update_hw_spec()
130 priv->regioncode = 0x10; in lbtf_update_hw_spec()
134 if (priv->current_addr[0] == 0xff) in lbtf_update_hw_spec()
135 memmove(priv->current_addr, cmd.permanentaddr, ETH_ALEN); in lbtf_update_hw_spec()
137 SET_IEEE80211_PERM_ADDR(priv->hw, priv->current_addr); in lbtf_update_hw_spec()
139 lbtf_geo_init(priv); in lbtf_update_hw_spec()
153 int lbtf_set_channel(struct lbtf_private *priv, u8 channel) in lbtf_set_channel() argument
164 ret = lbtf_cmd_with_response(priv, CMD_802_11_RF_CHANNEL, &cmd); in lbtf_set_channel()
169 int lbtf_beacon_set(struct lbtf_private *priv, struct sk_buff *beacon) in lbtf_beacon_set() argument
185 lbtf_cmd_async(priv, CMD_802_11_BEACON_SET, &cmd.hdr, size); in lbtf_beacon_set()
191 int lbtf_beacon_ctrl(struct lbtf_private *priv, bool beacon_enable, in lbtf_beacon_ctrl() argument
202 lbtf_cmd_async(priv, CMD_802_11_BEACON_CTRL, &cmd.hdr, sizeof(cmd)); in lbtf_beacon_ctrl()
208 static void lbtf_queue_cmd(struct lbtf_private *priv, in lbtf_queue_cmd() argument
225 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_queue_cmd()
226 list_add_tail(&cmdnode->list, &priv->cmdpendingq); in lbtf_queue_cmd()
227 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_queue_cmd()
236 static void lbtf_submit_command(struct lbtf_private *priv, in lbtf_submit_command() argument
250 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_submit_command()
251 priv->cur_cmd = cmdnode; in lbtf_submit_command()
259 ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmd, cmdsize); in lbtf_submit_command()
260 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_submit_command()
270 mod_timer(&priv->command_timer, jiffies + timeo); in lbtf_submit_command()
279 static void __lbtf_cleanup_and_insert_cmd(struct lbtf_private *priv, in __lbtf_cleanup_and_insert_cmd() argument
292 list_add_tail(&cmdnode->list, &priv->cmdfreeq); in __lbtf_cleanup_and_insert_cmd()
298 static void lbtf_cleanup_and_insert_cmd(struct lbtf_private *priv, in lbtf_cleanup_and_insert_cmd() argument
303 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_cleanup_and_insert_cmd()
304 __lbtf_cleanup_and_insert_cmd(priv, ptempcmd); in lbtf_cleanup_and_insert_cmd()
305 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_cleanup_and_insert_cmd()
308 void lbtf_complete_command(struct lbtf_private *priv, struct cmd_ctrl_node *cmd, in lbtf_complete_command() argument
316 __lbtf_cleanup_and_insert_cmd(priv, cmd); in lbtf_complete_command()
317 priv->cur_cmd = NULL; in lbtf_complete_command()
320 int lbtf_cmd_set_mac_multicast_addr(struct lbtf_private *priv) in lbtf_cmd_set_mac_multicast_addr() argument
329 cmd.nr_of_adrs = cpu_to_le16((u16) priv->nr_of_multicastmacaddr); in lbtf_cmd_set_mac_multicast_addr()
333 memcpy(cmd.maclist, priv->multicastlist, in lbtf_cmd_set_mac_multicast_addr()
334 priv->nr_of_multicastmacaddr * ETH_ALEN); in lbtf_cmd_set_mac_multicast_addr()
336 lbtf_cmd_async(priv, CMD_MAC_MULTICAST_ADR, &cmd.hdr, sizeof(cmd)); in lbtf_cmd_set_mac_multicast_addr()
342 void lbtf_set_mode(struct lbtf_private *priv, enum lbtf_mode mode) in lbtf_set_mode() argument
350 lbtf_cmd_async(priv, CMD_802_11_SET_MODE, &cmd.hdr, sizeof(cmd)); in lbtf_set_mode()
355 void lbtf_set_bssid(struct lbtf_private *priv, bool activate, const u8 *bssid) in lbtf_set_bssid() argument
365 lbtf_cmd_async(priv, CMD_802_11_SET_BSSID, &cmd.hdr, sizeof(cmd)); in lbtf_set_bssid()
369 int lbtf_set_mac_address(struct lbtf_private *priv, uint8_t *mac_addr) in lbtf_set_mac_address() argument
379 lbtf_cmd_async(priv, CMD_802_11_MAC_ADDRESS, &cmd.hdr, sizeof(cmd)); in lbtf_set_mac_address()
384 int lbtf_set_radio_control(struct lbtf_private *priv) in lbtf_set_radio_control() argument
394 switch (priv->preamble) { in lbtf_set_radio_control()
409 if (priv->radioon) in lbtf_set_radio_control()
414 lbtf_deb_cmd("RADIO_SET: radio %d, preamble %d\n", priv->radioon, in lbtf_set_radio_control()
415 priv->preamble); in lbtf_set_radio_control()
417 ret = lbtf_cmd_with_response(priv, CMD_802_11_RADIO_CONTROL, &cmd); in lbtf_set_radio_control()
423 void lbtf_set_mac_control(struct lbtf_private *priv) in lbtf_set_mac_control() argument
429 cmd.action = cpu_to_le16(priv->mac_control); in lbtf_set_mac_control()
432 lbtf_cmd_async(priv, CMD_MAC_CONTROL, in lbtf_set_mac_control()
445 int lbtf_allocate_cmd_buffer(struct lbtf_private *priv) in lbtf_allocate_cmd_buffer() argument
462 priv->cmd_array = cmdarray; in lbtf_allocate_cmd_buffer()
476 lbtf_cleanup_and_insert_cmd(priv, &cmdarray[i]); in lbtf_allocate_cmd_buffer()
493 int lbtf_free_cmd_buffer(struct lbtf_private *priv) in lbtf_free_cmd_buffer() argument
501 if (priv->cmd_array == NULL) { in lbtf_free_cmd_buffer()
506 cmdarray = priv->cmd_array; in lbtf_free_cmd_buffer()
515 kfree(priv->cmd_array); in lbtf_free_cmd_buffer()
516 priv->cmd_array = NULL; in lbtf_free_cmd_buffer()
530 static struct cmd_ctrl_node *lbtf_get_cmd_ctrl_node(struct lbtf_private *priv) in lbtf_get_cmd_ctrl_node() argument
537 if (!priv) in lbtf_get_cmd_ctrl_node()
540 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_get_cmd_ctrl_node()
542 if (!list_empty(&priv->cmdfreeq)) { in lbtf_get_cmd_ctrl_node()
543 tempnode = list_first_entry(&priv->cmdfreeq, in lbtf_get_cmd_ctrl_node()
551 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_get_cmd_ctrl_node()
564 int lbtf_execute_next_command(struct lbtf_private *priv) in lbtf_execute_next_command() argument
576 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_execute_next_command()
578 if (priv->cur_cmd) { in lbtf_execute_next_command()
580 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_execute_next_command()
585 if (!list_empty(&priv->cmdpendingq)) { in lbtf_execute_next_command()
586 cmdnode = list_first_entry(&priv->cmdpendingq, in lbtf_execute_next_command()
596 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_execute_next_command()
597 lbtf_submit_command(priv, cmdnode); in lbtf_execute_next_command()
599 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_execute_next_command()
607 static struct cmd_ctrl_node *__lbtf_cmd_async(struct lbtf_private *priv, in __lbtf_cmd_async() argument
617 if (priv->surpriseremoved) { in __lbtf_cmd_async()
623 cmdnode = lbtf_get_cmd_ctrl_node(priv); in __lbtf_cmd_async()
628 queue_work(lbtf_wq, &priv->cmd_work); in __lbtf_cmd_async()
640 priv->seqnum++; in __lbtf_cmd_async()
643 cmdnode->cmdbuf->seqnum = cpu_to_le16(priv->seqnum); in __lbtf_cmd_async()
649 lbtf_queue_cmd(priv, cmdnode); in __lbtf_cmd_async()
650 queue_work(lbtf_wq, &priv->cmd_work); in __lbtf_cmd_async()
657 void lbtf_cmd_async(struct lbtf_private *priv, uint16_t command, in lbtf_cmd_async() argument
661 __lbtf_cmd_async(priv, command, in_cmd, in_cmd_size, NULL, 0); in lbtf_cmd_async()
665 int __lbtf_cmd(struct lbtf_private *priv, uint16_t command, in __lbtf_cmd() argument
677 cmdnode = __lbtf_cmd_async(priv, command, in_cmd, in_cmd_size, in __lbtf_cmd()
693 spin_lock_irqsave(&priv->driver_lock, flags); in __lbtf_cmd()
699 __lbtf_cleanup_and_insert_cmd(priv, cmdnode); in __lbtf_cmd()
700 spin_unlock_irqrestore(&priv->driver_lock, flags); in __lbtf_cmd()
709 void lbtf_cmd_response_rx(struct lbtf_private *priv) in lbtf_cmd_response_rx() argument
711 priv->cmd_response_rxed = 1; in lbtf_cmd_response_rx()
712 queue_work(lbtf_wq, &priv->cmd_work); in lbtf_cmd_response_rx()
716 int lbtf_process_rx_command(struct lbtf_private *priv) in lbtf_process_rx_command() argument
726 mutex_lock(&priv->lock); in lbtf_process_rx_command()
727 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_process_rx_command()
729 if (!priv->cur_cmd) { in lbtf_process_rx_command()
731 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
735 resp = (void *)priv->cmd_resp_buff; in lbtf_process_rx_command()
736 curcmd = le16_to_cpu(priv->cur_cmd->cmdbuf->command); in lbtf_process_rx_command()
745 if (resp->seqnum != priv->cur_cmd->cmdbuf->seqnum) { in lbtf_process_rx_command()
746 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
751 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
759 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
765 del_timer(&priv->command_timer); in lbtf_process_rx_command()
766 priv->cmd_timed_out = 0; in lbtf_process_rx_command()
767 if (priv->nr_retries) in lbtf_process_rx_command()
768 priv->nr_retries = 0; in lbtf_process_rx_command()
782 lbtf_complete_command(priv, priv->cur_cmd, result); in lbtf_process_rx_command()
783 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
789 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
791 if (priv->cur_cmd && priv->cur_cmd->callback) { in lbtf_process_rx_command()
792 ret = priv->cur_cmd->callback(priv, priv->cur_cmd->callback_arg, in lbtf_process_rx_command()
795 spin_lock_irqsave(&priv->driver_lock, flags); in lbtf_process_rx_command()
797 if (priv->cur_cmd) { in lbtf_process_rx_command()
799 lbtf_complete_command(priv, priv->cur_cmd, result); in lbtf_process_rx_command()
801 spin_unlock_irqrestore(&priv->driver_lock, flags); in lbtf_process_rx_command()
804 mutex_unlock(&priv->lock); in lbtf_process_rx_command()