Lines Matching refs:wmi

89 struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv)
91 struct wmi *wmi;
93 wmi = kzalloc(sizeof(struct wmi), GFP_KERNEL);
94 if (!wmi)
97 wmi->drv_priv = priv;
98 wmi->stopped = false;
99 skb_queue_head_init(&wmi->wmi_event_queue);
100 spin_lock_init(&wmi->wmi_lock);
101 spin_lock_init(&wmi->event_lock);
102 mutex_init(&wmi->op_mutex);
103 mutex_init(&wmi->multi_write_mutex);
104 init_completion(&wmi->cmd_wait);
105 INIT_LIST_HEAD(&wmi->pending_tx_events);
106 tasklet_init(&wmi->wmi_event_tasklet, ath9k_wmi_event_tasklet,
107 (unsigned long)wmi);
109 return wmi;
114 struct wmi *wmi = priv->wmi;
116 mutex_lock(&wmi->op_mutex);
117 wmi->stopped = true;
118 mutex_unlock(&wmi->op_mutex);
120 kfree(priv->wmi);
127 tasklet_kill(&priv->wmi->wmi_event_tasklet);
128 spin_lock_irqsave(&priv->wmi->wmi_lock, flags);
129 __skb_queue_purge(&priv->wmi->wmi_event_queue);
130 spin_unlock_irqrestore(&priv->wmi->wmi_lock, flags);
135 struct wmi *wmi = (struct wmi *)data;
136 struct ath9k_htc_priv *priv = wmi->drv_priv;
145 spin_lock_irqsave(&wmi->wmi_lock, flags);
146 skb = __skb_dequeue(&wmi->wmi_event_queue);
148 spin_unlock_irqrestore(&wmi->wmi_lock, flags);
151 spin_unlock_irqrestore(&wmi->wmi_lock, flags);
163 ieee80211_queue_work(wmi->drv_priv->hw,
164 &wmi->drv_priv->fatal_work);
194 static void ath9k_wmi_rsp_callback(struct wmi *wmi, struct sk_buff *skb)
198 if (wmi->cmd_rsp_buf != NULL && wmi->cmd_rsp_len != 0)
199 memcpy(wmi->cmd_rsp_buf, skb->data, wmi->cmd_rsp_len);
201 complete(&wmi->cmd_wait);
207 struct wmi *wmi = (struct wmi *) priv;
211 if (unlikely(wmi->stopped))
218 spin_lock(&wmi->wmi_lock);
219 __skb_queue_tail(&wmi->wmi_event_queue, skb);
220 spin_unlock(&wmi->wmi_lock);
221 tasklet_schedule(&wmi->wmi_event_tasklet);
226 spin_lock(&wmi->wmi_lock);
227 if (cmd_id != wmi->last_cmd_id) {
228 spin_unlock(&wmi->wmi_lock);
231 spin_unlock(&wmi->wmi_lock);
234 ath9k_wmi_rsp_callback(wmi, skb);
246 int ath9k_wmi_connect(struct htc_target *htc, struct wmi *wmi,
252 wmi->htc = htc;
256 connect.ep_callbacks.priv = wmi;
261 ret = htc_connect_service(htc, &connect, &wmi->ctrl_epid);
265 *wmi_ctrl_epid = wmi->ctrl_epid;
270 static int ath9k_wmi_cmd_issue(struct wmi *wmi,
278 hdr->seq_no = cpu_to_be16(++wmi->tx_seq_id);
280 return htc_send_epid(wmi->htc, skb, wmi->ctrl_epid);
283 int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
288 struct ath_hw *ah = wmi->drv_priv->ah;
311 mutex_lock(&wmi->op_mutex);
313 /* check if wmi stopped flag is set */
314 if (unlikely(wmi->stopped)) {
320 wmi->cmd_rsp_buf = rsp_buf;
321 wmi->cmd_rsp_len = rsp_len;
323 spin_lock_irqsave(&wmi->wmi_lock, flags);
324 wmi->last_cmd_id = cmd_id;
325 spin_unlock_irqrestore(&wmi->wmi_lock, flags);
327 ret = ath9k_wmi_cmd_issue(wmi, skb, cmd_id, cmd_len);
331 time_left = wait_for_completion_timeout(&wmi->cmd_wait, timeout);
335 mutex_unlock(&wmi->op_mutex);
339 mutex_unlock(&wmi->op_mutex);
345 mutex_unlock(&wmi->op_mutex);