Lines Matching refs:xfer

189 static void scmi_fetch_response(struct scmi_xfer *xfer,  in scmi_fetch_response()  argument
192 xfer->hdr.status = ioread32(mem->msg_payload); in scmi_fetch_response()
194 xfer->rx.len = min_t(size_t, xfer->rx.len, ioread32(&mem->length) - 8); in scmi_fetch_response()
197 memcpy_fromio(xfer->rx.buf, mem->msg_payload + 4, xfer->rx.len); in scmi_fetch_response()
215 struct scmi_xfer *xfer; in scmi_rx_callback() local
230 xfer = &minfo->xfer_block[xfer_id]; in scmi_rx_callback()
232 scmi_dump_header_dbg(dev, &xfer->hdr); in scmi_rx_callback()
234 if (xfer->rx.len > info->desc->max_msg_size) { in scmi_rx_callback()
236 xfer->rx.len, info->desc->max_msg_size); in scmi_rx_callback()
240 scmi_fetch_response(xfer, mem); in scmi_rx_callback()
241 complete(&xfer->done); in scmi_rx_callback()
301 struct scmi_xfer *xfer; in scmi_xfer_get() local
319 xfer = &minfo->xfer_block[xfer_id]; in scmi_xfer_get()
320 xfer->hdr.seq = xfer_id; in scmi_xfer_get()
321 reinit_completion(&xfer->done); in scmi_xfer_get()
323 return xfer; in scmi_xfer_get()
334 void scmi_xfer_put(const struct scmi_handle *handle, struct scmi_xfer *xfer) in scmi_xfer_put() argument
346 clear_bit(xfer->hdr.seq, minfo->xfer_alloc_table); in scmi_xfer_put()
351 scmi_xfer_poll_done(const struct scmi_chan_info *cinfo, struct scmi_xfer *xfer) in scmi_xfer_poll_done() argument
356 if (xfer->hdr.seq != xfer_id) in scmi_xfer_poll_done()
367 struct scmi_xfer *xfer, ktime_t stop) in scmi_xfer_done_no_timeout() argument
371 return scmi_xfer_poll_done(cinfo, xfer) || ktime_after(__cur, stop); in scmi_xfer_done_no_timeout()
384 int scmi_do_xfer(const struct scmi_handle *handle, struct scmi_xfer *xfer) in scmi_do_xfer() argument
392 cinfo = idr_find(&info->tx_idr, xfer->hdr.protocol_id); in scmi_do_xfer()
396 ret = mbox_send_message(cinfo->chan, xfer); in scmi_do_xfer()
405 if (xfer->hdr.poll_completion) { in scmi_do_xfer()
408 spin_until_cond(scmi_xfer_done_no_timeout(cinfo, xfer, stop)); in scmi_do_xfer()
411 scmi_fetch_response(xfer, cinfo->payload); in scmi_do_xfer()
417 if (!wait_for_completion_timeout(&xfer->done, timeout)) { in scmi_do_xfer()
424 if (!ret && xfer->hdr.status) in scmi_do_xfer()
425 ret = scmi_to_linux_errno(xfer->hdr.status); in scmi_do_xfer()
458 struct scmi_xfer *xfer; in scmi_xfer_get_init() local
467 xfer = scmi_xfer_get(handle); in scmi_xfer_get_init()
468 if (IS_ERR(xfer)) { in scmi_xfer_get_init()
469 ret = PTR_ERR(xfer); in scmi_xfer_get_init()
474 xfer->tx.len = tx_size; in scmi_xfer_get_init()
475 xfer->rx.len = rx_size ? : info->desc->max_msg_size; in scmi_xfer_get_init()
476 xfer->hdr.id = msg_id; in scmi_xfer_get_init()
477 xfer->hdr.protocol_id = prot_id; in scmi_xfer_get_init()
478 xfer->hdr.poll_completion = false; in scmi_xfer_get_init()
480 *p = xfer; in scmi_xfer_get_init()
617 struct scmi_xfer *xfer; in scmi_xfer_info_init() local
640 for (i = 0, xfer = info->xfer_block; i < desc->max_msg; i++, xfer++) { in scmi_xfer_info_init()
641 xfer->rx.buf = devm_kcalloc(dev, sizeof(u8), desc->max_msg_size, in scmi_xfer_info_init()
643 if (!xfer->rx.buf) in scmi_xfer_info_init()
646 xfer->tx.buf = xfer->rx.buf; in scmi_xfer_info_init()
647 init_completion(&xfer->done); in scmi_xfer_info_init()