Lines Matching refs:msg
161 static void ssip_rxcmd_complete(struct hsi_msg *msg);
163 static inline void ssip_set_cmd(struct hsi_msg *msg, u32 cmd) in ssip_set_cmd() argument
167 data = sg_virt(msg->sgt.sgl); in ssip_set_cmd()
171 static inline u32 ssip_get_cmd(struct hsi_msg *msg) in ssip_get_cmd() argument
175 data = sg_virt(msg->sgt.sgl); in ssip_get_cmd()
180 static void ssip_skb_to_msg(struct sk_buff *skb, struct hsi_msg *msg) in ssip_skb_to_msg() argument
186 BUG_ON(msg->sgt.nents != (unsigned int)(skb_shinfo(skb)->nr_frags + 1)); in ssip_skb_to_msg()
188 sg = msg->sgt.sgl; in ssip_skb_to_msg()
198 static void ssip_free_data(struct hsi_msg *msg) in ssip_free_data() argument
202 skb = msg->context; in ssip_free_data()
203 pr_debug("free data: msg %p context %p skb %p\n", msg, msg->context, in ssip_free_data()
205 msg->destructor = NULL; in ssip_free_data()
207 hsi_free_msg(msg); in ssip_free_data()
213 struct hsi_msg *msg; in ssip_alloc_data() local
215 msg = hsi_alloc_msg(skb_shinfo(skb)->nr_frags + 1, flags); in ssip_alloc_data()
216 if (!msg) in ssip_alloc_data()
218 ssip_skb_to_msg(skb, msg); in ssip_alloc_data()
219 msg->destructor = ssip_free_data; in ssip_alloc_data()
220 msg->channel = ssi->channel_id_data; in ssip_alloc_data()
221 msg->context = skb; in ssip_alloc_data()
223 return msg; in ssip_alloc_data()
226 static inline void ssip_release_cmd(struct hsi_msg *msg) in ssip_release_cmd() argument
228 struct ssi_protocol *ssi = hsi_client_drvdata(msg->cl); in ssip_release_cmd()
230 dev_dbg(&msg->cl->device, "Release cmd 0x%08x\n", ssip_get_cmd(msg)); in ssip_release_cmd()
232 list_add_tail(&msg->link, &ssi->cmdqueue); in ssip_release_cmd()
238 struct hsi_msg *msg; in ssip_claim_cmd() local
243 msg = list_first_entry(&ssi->cmdqueue, struct hsi_msg, link); in ssip_claim_cmd()
244 list_del(&msg->link); in ssip_claim_cmd()
246 msg->destructor = ssip_release_cmd; in ssip_claim_cmd()
248 return msg; in ssip_claim_cmd()
253 struct hsi_msg *msg, *tmp; in ssip_free_cmds() local
255 list_for_each_entry_safe(msg, tmp, &ssi->cmdqueue, link) { in ssip_free_cmds()
256 list_del(&msg->link); in ssip_free_cmds()
257 msg->destructor = NULL; in ssip_free_cmds()
258 kfree(sg_virt(msg->sgt.sgl)); in ssip_free_cmds()
259 hsi_free_msg(msg); in ssip_free_cmds()
265 struct hsi_msg *msg; in ssip_alloc_cmds() local
270 msg = hsi_alloc_msg(1, GFP_KERNEL); in ssip_alloc_cmds()
271 if (!msg) in ssip_alloc_cmds()
275 hsi_free_msg(msg); in ssip_alloc_cmds()
278 sg_init_one(msg->sgt.sgl, buf, sizeof(*buf)); in ssip_alloc_cmds()
279 msg->channel = ssi->channel_id_cmd; in ssip_alloc_cmds()
280 list_add_tail(&msg->link, &ssi->cmdqueue); in ssip_alloc_cmds()
400 struct hsi_msg *msg; in ssip_reset() local
420 msg = list_entry(head, struct hsi_msg, link); in ssip_reset()
423 ssip_free_data(msg); in ssip_reset()
432 struct hsi_msg *msg; in ssip_dump_state() local
444 list_for_each_entry(msg, &ssi->txqueue, link) in ssip_dump_state()
445 dev_err(&cl->device, "pending TX data (%p)\n", msg); in ssip_dump_state()
452 struct hsi_msg *msg; in ssip_error() local
456 msg = ssip_claim_cmd(ssi); in ssip_error()
457 msg->complete = ssip_rxcmd_complete; in ssip_error()
458 hsi_async_read(cl, msg); in ssip_error()
498 struct hsi_msg *msg; in ssip_send_bootinfo_req_cmd() local
501 msg = ssip_claim_cmd(ssi); in ssip_send_bootinfo_req_cmd()
502 ssip_set_cmd(msg, SSIP_BOOTINFO_REQ_CMD(SSIP_LOCAL_VERID)); in ssip_send_bootinfo_req_cmd()
503 msg->complete = ssip_release_cmd; in ssip_send_bootinfo_req_cmd()
504 hsi_async_write(cl, msg); in ssip_send_bootinfo_req_cmd()
506 msg = ssip_claim_cmd(ssi); in ssip_send_bootinfo_req_cmd()
507 msg->complete = ssip_rxcmd_complete; in ssip_send_bootinfo_req_cmd()
508 hsi_async_read(cl, msg); in ssip_send_bootinfo_req_cmd()
514 struct hsi_msg *msg; in ssip_start_rx() local
536 msg = ssip_claim_cmd(ssi); in ssip_start_rx()
537 ssip_set_cmd(msg, SSIP_READY_CMD); in ssip_start_rx()
538 msg->complete = ssip_release_cmd; in ssip_start_rx()
540 hsi_async_write(cl, msg); in ssip_start_rx()
554 static void ssip_free_strans(struct hsi_msg *msg) in ssip_free_strans() argument
556 ssip_free_data(msg->context); in ssip_free_strans()
557 ssip_release_cmd(msg); in ssip_free_strans()
560 static void ssip_strans_complete(struct hsi_msg *msg) in ssip_strans_complete() argument
562 struct hsi_client *cl = msg->cl; in ssip_strans_complete()
566 data = msg->context; in ssip_strans_complete()
567 ssip_release_cmd(msg); in ssip_strans_complete()
577 struct hsi_msg *msg, *dmsg; in ssip_xmit() local
590 msg = ssip_claim_cmd(ssi); in ssip_xmit()
592 msg->context = dmsg; in ssip_xmit()
593 msg->complete = ssip_strans_complete; in ssip_xmit()
594 msg->destructor = ssip_free_strans; in ssip_xmit()
597 ssip_set_cmd(msg, SSIP_START_TRANS_CMD(SSIP_BYTES_TO_FRAMES(skb->len), in ssip_xmit()
606 return hsi_async_write(cl, msg); in ssip_xmit()
641 static void ssip_rx_data_complete(struct hsi_msg *msg) in ssip_rx_data_complete() argument
643 struct hsi_client *cl = msg->cl; in ssip_rx_data_complete()
647 if (msg->status == HSI_STATUS_ERROR) { in ssip_rx_data_complete()
649 ssip_free_data(msg); in ssip_rx_data_complete()
654 skb = msg->context; in ssip_rx_data_complete()
656 hsi_free_msg(msg); in ssip_rx_data_complete()
662 struct hsi_msg *msg; in ssip_rx_bootinforeq() local
686 msg = ssip_claim_cmd(ssi); in ssip_rx_bootinforeq()
687 ssip_set_cmd(msg, SSIP_BOOTINFO_RESP_CMD(SSIP_LOCAL_VERID)); in ssip_rx_bootinforeq()
688 msg->complete = ssip_release_cmd; in ssip_rx_bootinforeq()
689 hsi_async_write(cl, msg); in ssip_rx_bootinforeq()
773 struct hsi_msg *msg; in ssip_rx_strans() local
800 msg = ssip_alloc_data(ssi, skb, GFP_ATOMIC); in ssip_rx_strans()
801 if (unlikely(!msg)) { in ssip_rx_strans()
805 msg->complete = ssip_rx_data_complete; in ssip_rx_strans()
806 hsi_async_read(cl, msg); in ssip_rx_strans()
815 static void ssip_rxcmd_complete(struct hsi_msg *msg) in ssip_rxcmd_complete() argument
817 struct hsi_client *cl = msg->cl; in ssip_rxcmd_complete()
818 u32 cmd = ssip_get_cmd(msg); in ssip_rxcmd_complete()
821 if (msg->status == HSI_STATUS_ERROR) { in ssip_rxcmd_complete()
823 ssip_release_cmd(msg); in ssip_rxcmd_complete()
827 hsi_async_read(cl, msg); in ssip_rxcmd_complete()
854 static void ssip_swbreak_complete(struct hsi_msg *msg) in ssip_swbreak_complete() argument
856 struct hsi_client *cl = msg->cl; in ssip_swbreak_complete()
859 ssip_release_cmd(msg); in ssip_swbreak_complete()
876 static void ssip_tx_data_complete(struct hsi_msg *msg) in ssip_tx_data_complete() argument
878 struct hsi_client *cl = msg->cl; in ssip_tx_data_complete()
882 if (msg->status == HSI_STATUS_ERROR) { in ssip_tx_data_complete()
901 ssip_free_data(msg); in ssip_tx_data_complete()
972 struct hsi_msg *msg; in ssip_pn_xmit() local
991 msg = ssip_alloc_data(ssi, skb, GFP_ATOMIC); in ssip_pn_xmit()
992 if (!msg) { in ssip_pn_xmit()
996 msg->complete = ssip_tx_data_complete; in ssip_pn_xmit()
1004 list_add_tail(&msg->link, &ssi->txqueue); in ssip_pn_xmit()
1029 hsi_free_msg(msg); in ssip_pn_xmit()