Lines Matching refs:msg
33 static inline int hsi_dummy_msg(struct hsi_msg *msg __maybe_unused) in hsi_dummy_msg()
194 static int ssi_claim_lch(struct hsi_msg *msg) in ssi_claim_lch() argument
197 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_claim_lch()
203 if (!omap_ssi->gdd_trn[lch].msg) { in ssi_claim_lch()
204 omap_ssi->gdd_trn[lch].msg = msg; in ssi_claim_lch()
205 omap_ssi->gdd_trn[lch].sg = msg->sgt.sgl; in ssi_claim_lch()
212 static int ssi_start_dma(struct hsi_msg *msg, int lch) in ssi_start_dma() argument
214 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_start_dma()
226 if (msg->ttype == HSI_MSG_READ) { in ssi_start_dma()
227 err = dma_map_sg(&ssi->device, msg->sgt.sgl, msg->sgt.nents, in ssi_start_dma()
236 ccr = msg->channel + 0x10 + (port->num * 8); /* Sync */ in ssi_start_dma()
240 SSI_SSR_BUFFER_CH_REG(msg->channel); in ssi_start_dma()
241 d_addr = sg_dma_address(msg->sgt.sgl); in ssi_start_dma()
243 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()
269 writew_relaxed(SSI_BYTES_TO_FRAMES(msg->sgt.sgl->length), in ssi_start_dma()
278 msg->status = HSI_STATUS_PROCEEDING; in ssi_start_dma()
283 static int ssi_start_pio(struct hsi_msg *msg) in ssi_start_pio() argument
285 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_start_pio()
292 if (msg->ttype == HSI_MSG_WRITE) { in ssi_start_pio()
293 val = SSI_DATAACCEPT(msg->channel); in ssi_start_pio()
297 val = SSI_DATAAVAILABLE(msg->channel) | SSI_ERROROCCURED; in ssi_start_pio()
300 msg->ttype ? "write" : "read"); in ssi_start_pio()
304 msg->actual_len = 0; in ssi_start_pio()
305 msg->status = HSI_STATUS_PROCEEDING; in ssi_start_pio()
312 struct hsi_msg *msg; in ssi_start_transfer() local
317 msg = list_first_entry(queue, struct hsi_msg, link); in ssi_start_transfer()
318 if (msg->status != HSI_STATUS_QUEUED) in ssi_start_transfer()
320 if ((msg->sgt.nents) && (msg->sgt.sgl->length > sizeof(u32))) in ssi_start_transfer()
321 lch = ssi_claim_lch(msg); in ssi_start_transfer()
323 return ssi_start_dma(msg, lch); in ssi_start_transfer()
325 return ssi_start_pio(msg); in ssi_start_transfer()
328 static int ssi_async_break(struct hsi_msg *msg) in ssi_async_break() argument
330 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_async_break()
338 if (msg->ttype == HSI_MSG_WRITE) { in ssi_async_break()
344 msg->status = HSI_STATUS_COMPLETED; in ssi_async_break()
345 msg->complete(msg); in ssi_async_break()
356 msg->status = HSI_STATUS_PROCEEDING; in ssi_async_break()
357 list_add_tail(&msg->link, &omap_port->brkqueue); in ssi_async_break()
366 static int ssi_async(struct hsi_msg *msg) in ssi_async() argument
368 struct hsi_port *port = hsi_get_port(msg->cl); in ssi_async()
373 BUG_ON(!msg); in ssi_async()
375 if (msg->sgt.nents > 1) in ssi_async()
378 if (msg->break_frame) in ssi_async()
379 return ssi_async_break(msg); in ssi_async()
381 if (msg->ttype) { in ssi_async()
382 BUG_ON(msg->channel >= omap_port->sst.channels); in ssi_async()
383 queue = &omap_port->txqueue[msg->channel]; in ssi_async()
385 BUG_ON(msg->channel >= omap_port->ssr.channels); in ssi_async()
386 queue = &omap_port->rxqueue[msg->channel]; in ssi_async()
388 msg->status = HSI_STATUS_QUEUED; in ssi_async()
390 list_add_tail(&msg->link, queue); in ssi_async()
393 list_del(&msg->link); in ssi_async()
394 msg->status = HSI_STATUS_ERROR; in ssi_async()
398 msg->status, msg->ttype, msg->channel); in ssi_async()
422 struct hsi_msg *msg; in ssi_flush_queue() local
425 msg = list_entry(node, struct hsi_msg, link); in ssi_flush_queue()
426 if ((cl) && (cl != msg->cl)) in ssi_flush_queue()
430 msg->channel, msg, msg->sgt.sgl->length, in ssi_flush_queue()
431 msg->ttype, msg->context); in ssi_flush_queue()
432 if (msg->destructor) in ssi_flush_queue()
433 msg->destructor(msg); in ssi_flush_queue()
435 hsi_free_msg(msg); in ssi_flush_queue()
509 struct hsi_msg *msg; in ssi_flush() local
519 msg = omap_ssi->gdd_trn[i].msg; in ssi_flush()
520 if (!msg || (port != hsi_get_port(msg->cl))) in ssi_flush()
523 if (msg->ttype == HSI_MSG_READ) in ssi_flush()
525 omap_ssi->gdd_trn[i].msg = NULL; in ssi_flush()
605 struct hsi_msg *msg; in ssi_transfer() local
612 msg = list_first_entry(queue, struct hsi_msg, link); in ssi_transfer()
613 msg->status = HSI_STATUS_ERROR; in ssi_transfer()
614 msg->actual_len = 0; in ssi_transfer()
615 list_del(&msg->link); in ssi_transfer()
617 msg->complete(msg); in ssi_transfer()
630 struct hsi_msg *msg; in ssi_cleanup_queues() local
644 msg = list_first_entry(&omap_port->txqueue[i], struct hsi_msg, in ssi_cleanup_queues()
646 if ((msg->cl == cl) && (msg->status == HSI_STATUS_PROCEEDING)) { in ssi_cleanup_queues()
657 msg = list_first_entry(&omap_port->rxqueue[i], struct hsi_msg, in ssi_cleanup_queues()
659 if ((msg->cl == cl) && (msg->status == HSI_STATUS_PROCEEDING)) { in ssi_cleanup_queues()
689 struct hsi_msg *msg; in ssi_cleanup_gdd() local
695 msg = omap_ssi->gdd_trn[i].msg; in ssi_cleanup_gdd()
696 if ((!msg) || (msg->cl != cl)) in ssi_cleanup_gdd()
704 if (msg->ttype == HSI_MSG_READ) in ssi_cleanup_gdd()
706 omap_ssi->gdd_trn[i].msg = NULL; in ssi_cleanup_gdd()
767 struct hsi_msg *msg; in ssi_error() local
783 msg = omap_ssi->gdd_trn[i].msg; in ssi_error()
784 if ((msg) && (msg->ttype == HSI_MSG_READ)) { in ssi_error()
787 omap_ssi->gdd_trn[i].msg = NULL; in ssi_error()
807 msg = list_first_entry(&omap_port->rxqueue[i], struct hsi_msg, in ssi_error()
809 list_del(&msg->link); in ssi_error()
810 msg->status = HSI_STATUS_ERROR; in ssi_error()
812 msg->complete(msg); in ssi_error()
825 struct hsi_msg *msg; in ssi_break_complete() local
840 list_for_each_entry_safe(msg, tmp, &omap_port->brkqueue, link) { in ssi_break_complete()
841 msg->status = HSI_STATUS_COMPLETED; in ssi_break_complete()
843 list_del(&msg->link); in ssi_break_complete()
845 msg->complete(msg); in ssi_break_complete()
855 struct hsi_msg *msg; in ssi_pio_complete() local
861 msg = list_first_entry(queue, struct hsi_msg, link); in ssi_pio_complete()
862 if ((!msg->sgt.nents) || (!msg->sgt.sgl->length)) { in ssi_pio_complete()
863 msg->actual_len = 0; in ssi_pio_complete()
864 msg->status = HSI_STATUS_PENDING; in ssi_pio_complete()
866 if (msg->ttype == HSI_MSG_WRITE) in ssi_pio_complete()
867 val = SSI_DATAACCEPT(msg->channel); in ssi_pio_complete()
869 val = SSI_DATAAVAILABLE(msg->channel); in ssi_pio_complete()
870 if (msg->status == HSI_STATUS_PROCEEDING) { in ssi_pio_complete()
871 buf = sg_virt(msg->sgt.sgl) + msg->actual_len; in ssi_pio_complete()
872 if (msg->ttype == HSI_MSG_WRITE) in ssi_pio_complete()
874 SSI_SST_BUFFER_CH_REG(msg->channel)); in ssi_pio_complete()
877 SSI_SSR_BUFFER_CH_REG(msg->channel)); in ssi_pio_complete()
878 dev_dbg(&port->device, "ch %d ttype %d 0x%08x\n", msg->channel, in ssi_pio_complete()
879 msg->ttype, *buf); in ssi_pio_complete()
880 msg->actual_len += sizeof(*buf); in ssi_pio_complete()
881 if (msg->actual_len >= msg->sgt.sgl->length) in ssi_pio_complete()
882 msg->status = HSI_STATUS_COMPLETED; in ssi_pio_complete()
887 if ((msg->status == HSI_STATUS_PROCEEDING) || in ssi_pio_complete()
888 ((msg->status == HSI_STATUS_COMPLETED) && in ssi_pio_complete()
889 (msg->ttype == HSI_MSG_WRITE))) { in ssi_pio_complete()
900 if (msg->ttype == HSI_MSG_WRITE) { in ssi_pio_complete()
907 list_del(&msg->link); in ssi_pio_complete()
909 msg->complete(msg); in ssi_pio_complete()