Lines Matching refs:xfer

197 static void scmi_fetch_response(struct scmi_xfer *xfer,  in scmi_fetch_response()  argument
200 xfer->hdr.status = ioread32(mem->msg_payload); in scmi_fetch_response()
202 xfer->rx.len = min_t(size_t, xfer->rx.len, ioread32(&mem->length) - 8); in scmi_fetch_response()
205 memcpy_fromio(xfer->rx.buf, mem->msg_payload + 4, xfer->rx.len); in scmi_fetch_response()
287 struct scmi_xfer *xfer; in scmi_xfer_get() local
304 xfer = &minfo->xfer_block[xfer_id]; in scmi_xfer_get()
305 xfer->hdr.seq = xfer_id; in scmi_xfer_get()
306 reinit_completion(&xfer->done); in scmi_xfer_get()
308 return xfer; in scmi_xfer_get()
320 __scmi_xfer_put(struct scmi_xfers_info *minfo, struct scmi_xfer *xfer) in __scmi_xfer_put() argument
330 clear_bit(xfer->hdr.seq, minfo->xfer_alloc_table); in __scmi_xfer_put()
351 struct scmi_xfer *xfer; in scmi_rx_callback() local
371 xfer = &minfo->xfer_block[xfer_id]; in scmi_rx_callback()
373 scmi_dump_header_dbg(dev, &xfer->hdr); in scmi_rx_callback()
375 scmi_fetch_response(xfer, mem); in scmi_rx_callback()
378 complete(xfer->async_done); in scmi_rx_callback()
380 complete(&xfer->done); in scmi_rx_callback()
389 void scmi_xfer_put(const struct scmi_handle *handle, struct scmi_xfer *xfer) in scmi_xfer_put() argument
393 __scmi_xfer_put(&info->tx_minfo, xfer); in scmi_xfer_put()
397 scmi_xfer_poll_done(const struct scmi_chan_info *cinfo, struct scmi_xfer *xfer) in scmi_xfer_poll_done() argument
402 if (xfer->hdr.seq != xfer_id) in scmi_xfer_poll_done()
413 struct scmi_xfer *xfer, ktime_t stop) in scmi_xfer_done_no_timeout() argument
417 return scmi_xfer_poll_done(cinfo, xfer) || ktime_after(__cur, stop); in scmi_xfer_done_no_timeout()
430 int scmi_do_xfer(const struct scmi_handle *handle, struct scmi_xfer *xfer) in scmi_do_xfer() argument
438 cinfo = idr_find(&info->tx_idr, xfer->hdr.protocol_id); in scmi_do_xfer()
442 ret = mbox_send_message(cinfo->chan, xfer); in scmi_do_xfer()
451 if (xfer->hdr.poll_completion) { in scmi_do_xfer()
454 spin_until_cond(scmi_xfer_done_no_timeout(cinfo, xfer, stop)); in scmi_do_xfer()
457 scmi_fetch_response(xfer, cinfo->payload); in scmi_do_xfer()
463 if (!wait_for_completion_timeout(&xfer->done, timeout)) { in scmi_do_xfer()
470 if (!ret && xfer->hdr.status) in scmi_do_xfer()
471 ret = scmi_to_linux_errno(xfer->hdr.status); in scmi_do_xfer()
497 struct scmi_xfer *xfer) in scmi_do_xfer_with_response() argument
502 xfer->async_done = &async_response; in scmi_do_xfer_with_response()
504 ret = scmi_do_xfer(handle, xfer); in scmi_do_xfer_with_response()
505 if (!ret && !wait_for_completion_timeout(xfer->async_done, timeout)) in scmi_do_xfer_with_response()
508 xfer->async_done = NULL; in scmi_do_xfer_with_response()
532 struct scmi_xfer *xfer; in scmi_xfer_get_init() local
542 xfer = scmi_xfer_get(handle, minfo); in scmi_xfer_get_init()
543 if (IS_ERR(xfer)) { in scmi_xfer_get_init()
544 ret = PTR_ERR(xfer); in scmi_xfer_get_init()
549 xfer->tx.len = tx_size; in scmi_xfer_get_init()
550 xfer->rx.len = rx_size ? : info->desc->max_msg_size; in scmi_xfer_get_init()
551 xfer->hdr.id = msg_id; in scmi_xfer_get_init()
552 xfer->hdr.protocol_id = prot_id; in scmi_xfer_get_init()
553 xfer->hdr.poll_completion = false; in scmi_xfer_get_init()
555 *p = xfer; in scmi_xfer_get_init()
678 struct scmi_xfer *xfer; in scmi_xfer_info_init() local
701 for (i = 0, xfer = info->xfer_block; i < desc->max_msg; i++, xfer++) { in scmi_xfer_info_init()
702 xfer->rx.buf = devm_kcalloc(dev, sizeof(u8), desc->max_msg_size, in scmi_xfer_info_init()
704 if (!xfer->rx.buf) in scmi_xfer_info_init()
707 xfer->tx.buf = xfer->rx.buf; in scmi_xfer_info_init()
708 init_completion(&xfer->done); in scmi_xfer_info_init()