Lines Matching refs:msg

23 static inline int hsi_dummy_msg(struct hsi_msg *msg __maybe_unused)  in hsi_dummy_msg()
172 struct hsi_msg *msg; in ssi_process_errqueue() local
177 msg = list_entry(head, struct hsi_msg, link); in ssi_process_errqueue()
178 msg->complete(msg); in ssi_process_errqueue()
183 static int ssi_claim_lch(struct hsi_msg *msg) in ssi_claim_lch() argument
186 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_claim_lch()
192 if (!omap_ssi->gdd_trn[lch].msg) { in ssi_claim_lch()
193 omap_ssi->gdd_trn[lch].msg = msg; in ssi_claim_lch()
194 omap_ssi->gdd_trn[lch].sg = msg->sgt.sgl; in ssi_claim_lch()
201 static int ssi_start_dma(struct hsi_msg *msg, int lch) in ssi_start_dma() argument
203 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_start_dma()
224 if (msg->ttype == HSI_MSG_READ) { in ssi_start_dma()
225 err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents, in ssi_start_dma()
235 ccr = msg->channel + 0x10 + (port->num * 8); /* Sync */ in ssi_start_dma()
239 SSI_SSR_BUFFER_CH_REG(msg->channel); in ssi_start_dma()
240 d_addr = sg_dma_address(msg->sgt.sgl); in ssi_start_dma()
242 err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents, in ssi_start_dma()
252 ccr = (msg->channel + 1 + (port->num * 8)) & 0xf; /* Sync */ in ssi_start_dma()
255 s_addr = sg_dma_address(msg->sgt.sgl); in ssi_start_dma()
257 SSI_SST_BUFFER_CH_REG(msg->channel); in ssi_start_dma()
266 writew_relaxed(SSI_BYTES_TO_FRAMES(msg->sgt.sgl->length), in ssi_start_dma()
275 msg->status = HSI_STATUS_PROCEEDING; in ssi_start_dma()
280 static int ssi_start_pio(struct hsi_msg *msg) in ssi_start_pio() argument
282 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_start_pio()
296 if (msg->ttype == HSI_MSG_WRITE) { in ssi_start_pio()
297 val = SSI_DATAACCEPT(msg->channel); in ssi_start_pio()
301 val = SSI_DATAAVAILABLE(msg->channel) | SSI_ERROROCCURED; in ssi_start_pio()
304 msg->ttype ? "write" : "read"); in ssi_start_pio()
308 msg->actual_len = 0; in ssi_start_pio()
309 msg->status = HSI_STATUS_PROCEEDING; in ssi_start_pio()
316 struct hsi_msg *msg; in ssi_start_transfer() local
321 msg = list_first_entry(queue, struct hsi_msg, link); in ssi_start_transfer()
322 if (msg->status != HSI_STATUS_QUEUED) in ssi_start_transfer()
324 if ((msg->sgt.nents) && (msg->sgt.sgl->length > sizeof(u32))) in ssi_start_transfer()
325 lch = ssi_claim_lch(msg); in ssi_start_transfer()
327 return ssi_start_dma(msg, lch); in ssi_start_transfer()
329 return ssi_start_pio(msg); in ssi_start_transfer()
332 static int ssi_async_break(struct hsi_msg *msg) in ssi_async_break() argument
334 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_async_break()
342 if (msg->ttype == HSI_MSG_WRITE) { in ssi_async_break()
348 msg->status = HSI_STATUS_COMPLETED; in ssi_async_break()
349 msg->complete(msg); in ssi_async_break()
360 msg->status = HSI_STATUS_PROCEEDING; in ssi_async_break()
361 list_add_tail(&msg->link, &omap_port->brkqueue); in ssi_async_break()
371 static int ssi_async(struct hsi_msg *msg) in ssi_async() argument
373 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_async()
378 BUG_ON(!msg); in ssi_async()
380 if (msg->sgt.nents > 1) in ssi_async()
383 if (msg->break_frame) in ssi_async()
384 return ssi_async_break(msg); in ssi_async()
386 if (msg->ttype) { in ssi_async()
387 BUG_ON(msg->channel >= omap_port->sst.channels); in ssi_async()
388 queue = &omap_port->txqueue[msg->channel]; in ssi_async()
390 BUG_ON(msg->channel >= omap_port->ssr.channels); in ssi_async()
391 queue = &omap_port->rxqueue[msg->channel]; in ssi_async()
393 msg->status = HSI_STATUS_QUEUED; in ssi_async()
397 list_add_tail(&msg->link, queue); in ssi_async()
400 list_del(&msg->link); in ssi_async()
401 msg->status = HSI_STATUS_ERROR; in ssi_async()
407 msg->status, msg->ttype, msg->channel); in ssi_async()
431 struct hsi_msg *msg; in ssi_flush_queue() local
434 msg = list_entry(node, struct hsi_msg, link); in ssi_flush_queue()
435 if ((cl) && (cl != msg->cl)) in ssi_flush_queue()
439 msg->channel, msg, msg->sgt.sgl->length, in ssi_flush_queue()
440 msg->ttype, msg->context); in ssi_flush_queue()
441 if (msg->destructor) in ssi_flush_queue()
442 msg->destructor(msg); in ssi_flush_queue()
444 hsi_free_msg(msg); in ssi_flush_queue()
519 struct hsi_msg *msg; in ssi_flush() local
534 msg = omap_ssi->gdd_trn[i].msg; in ssi_flush()
535 if (!msg || (port != hsi_get_port(msg->cl))) in ssi_flush()
538 if (msg->ttype == HSI_MSG_READ) in ssi_flush()
540 omap_ssi->gdd_trn[i].msg = NULL; in ssi_flush()
638 struct hsi_msg *msg; in ssi_transfer() local
646 msg = list_first_entry(queue, struct hsi_msg, link); in ssi_transfer()
647 msg->status = HSI_STATUS_ERROR; in ssi_transfer()
648 msg->actual_len = 0; in ssi_transfer()
649 list_del(&msg->link); in ssi_transfer()
651 msg->complete(msg); in ssi_transfer()
666 struct hsi_msg *msg; in ssi_cleanup_queues() local
680 msg = list_first_entry(&omap_port->txqueue[i], struct hsi_msg, in ssi_cleanup_queues()
682 if ((msg->cl == cl) && (msg->status == HSI_STATUS_PROCEEDING)) { in ssi_cleanup_queues()
694 msg = list_first_entry(&omap_port->rxqueue[i], struct hsi_msg, in ssi_cleanup_queues()
696 if ((msg->cl == cl) && (msg->status == HSI_STATUS_PROCEEDING)) { in ssi_cleanup_queues()
726 struct hsi_msg *msg; in ssi_cleanup_gdd() local
732 msg = omap_ssi->gdd_trn[i].msg; in ssi_cleanup_gdd()
733 if ((!msg) || (msg->cl != cl)) in ssi_cleanup_gdd()
741 if (msg->ttype == HSI_MSG_READ) { in ssi_cleanup_gdd()
745 omap_ssi->gdd_trn[i].msg = NULL; in ssi_cleanup_gdd()
804 struct hsi_msg *msg; in ssi_error() local
820 msg = omap_ssi->gdd_trn[i].msg; in ssi_error()
821 if ((msg) && (msg->ttype == HSI_MSG_READ)) { in ssi_error()
824 omap_ssi->gdd_trn[i].msg = NULL; in ssi_error()
844 msg = list_first_entry(&omap_port->rxqueue[i], struct hsi_msg, in ssi_error()
846 list_del(&msg->link); in ssi_error()
847 msg->status = HSI_STATUS_ERROR; in ssi_error()
849 msg->complete(msg); in ssi_error()
862 struct hsi_msg *msg; in ssi_break_complete() local
877 list_for_each_entry_safe(msg, tmp, &omap_port->brkqueue, link) { in ssi_break_complete()
878 msg->status = HSI_STATUS_COMPLETED; in ssi_break_complete()
880 list_del(&msg->link); in ssi_break_complete()
882 msg->complete(msg); in ssi_break_complete()
892 struct hsi_msg *msg; in ssi_pio_complete() local
898 msg = list_first_entry(queue, struct hsi_msg, link); in ssi_pio_complete()
899 if ((!msg->sgt.nents) || (!msg->sgt.sgl->length)) { in ssi_pio_complete()
900 msg->actual_len = 0; in ssi_pio_complete()
901 msg->status = HSI_STATUS_PENDING; in ssi_pio_complete()
903 if (msg->ttype == HSI_MSG_WRITE) in ssi_pio_complete()
904 val = SSI_DATAACCEPT(msg->channel); in ssi_pio_complete()
906 val = SSI_DATAAVAILABLE(msg->channel); in ssi_pio_complete()
907 if (msg->status == HSI_STATUS_PROCEEDING) { in ssi_pio_complete()
908 buf = sg_virt(msg->sgt.sgl) + msg->actual_len; in ssi_pio_complete()
909 if (msg->ttype == HSI_MSG_WRITE) in ssi_pio_complete()
911 SSI_SST_BUFFER_CH_REG(msg->channel)); in ssi_pio_complete()
914 SSI_SSR_BUFFER_CH_REG(msg->channel)); in ssi_pio_complete()
915 dev_dbg(&port->device, "ch %d ttype %d 0x%08x\n", msg->channel, in ssi_pio_complete()
916 msg->ttype, *buf); in ssi_pio_complete()
917 msg->actual_len += sizeof(*buf); in ssi_pio_complete()
918 if (msg->actual_len >= msg->sgt.sgl->length) in ssi_pio_complete()
919 msg->status = HSI_STATUS_COMPLETED; in ssi_pio_complete()
924 if ((msg->status == HSI_STATUS_PROCEEDING) || in ssi_pio_complete()
925 ((msg->status == HSI_STATUS_COMPLETED) && in ssi_pio_complete()
926 (msg->ttype == HSI_MSG_WRITE))) { in ssi_pio_complete()
937 if (msg->ttype == HSI_MSG_WRITE) { in ssi_pio_complete()
945 list_del(&msg->link); in ssi_pio_complete()
947 msg->complete(msg); in ssi_pio_complete()