Lines Matching refs:xfer
158 struct scmi_xfer *xfer; in scmi_xfer_get() local
175 xfer = &minfo->xfer_block[xfer_id]; in scmi_xfer_get()
176 xfer->hdr.seq = xfer_id; in scmi_xfer_get()
177 reinit_completion(&xfer->done); in scmi_xfer_get()
178 xfer->transfer_id = atomic_inc_return(&transfer_last_id); in scmi_xfer_get()
180 return xfer; in scmi_xfer_get()
192 __scmi_xfer_put(struct scmi_xfers_info *minfo, struct scmi_xfer *xfer) in __scmi_xfer_put() argument
202 clear_bit(xfer->hdr.seq, minfo->xfer_alloc_table); in __scmi_xfer_put()
208 struct scmi_xfer *xfer; in scmi_handle_notification() local
215 xfer = scmi_xfer_get(cinfo->handle, minfo); in scmi_handle_notification()
216 if (IS_ERR(xfer)) { in scmi_handle_notification()
218 PTR_ERR(xfer)); in scmi_handle_notification()
223 unpack_scmi_header(msg_hdr, &xfer->hdr); in scmi_handle_notification()
224 scmi_dump_header_dbg(dev, &xfer->hdr); in scmi_handle_notification()
226 xfer); in scmi_handle_notification()
227 scmi_notify(cinfo->handle, xfer->hdr.protocol_id, in scmi_handle_notification()
228 xfer->hdr.id, xfer->rx.buf, xfer->rx.len, ts); in scmi_handle_notification()
230 trace_scmi_rx_done(xfer->transfer_id, xfer->hdr.id, in scmi_handle_notification()
231 xfer->hdr.protocol_id, xfer->hdr.seq, in scmi_handle_notification()
234 __scmi_xfer_put(minfo, xfer); in scmi_handle_notification()
242 struct scmi_xfer *xfer; in scmi_handle_response() local
254 xfer = &minfo->xfer_block[xfer_id]; in scmi_handle_response()
261 if (unlikely(msg_type == MSG_TYPE_DELAYED_RESP && !xfer->async_done)) { in scmi_handle_response()
267 __scmi_xfer_put(minfo, xfer); in scmi_handle_response()
271 scmi_dump_header_dbg(dev, &xfer->hdr); in scmi_handle_response()
273 info->desc->ops->fetch_response(cinfo, xfer); in scmi_handle_response()
275 trace_scmi_rx_done(xfer->transfer_id, xfer->hdr.id, in scmi_handle_response()
276 xfer->hdr.protocol_id, xfer->hdr.seq, in scmi_handle_response()
281 complete(xfer->async_done); in scmi_handle_response()
283 complete(&xfer->done); in scmi_handle_response()
324 void scmi_xfer_put(const struct scmi_handle *handle, struct scmi_xfer *xfer) in scmi_xfer_put() argument
328 __scmi_xfer_put(&info->tx_minfo, xfer); in scmi_xfer_put()
334 struct scmi_xfer *xfer, ktime_t stop) in scmi_xfer_done_no_timeout() argument
338 return info->desc->ops->poll_done(cinfo, xfer) || in scmi_xfer_done_no_timeout()
352 int scmi_do_xfer(const struct scmi_handle *handle, struct scmi_xfer *xfer) in scmi_do_xfer() argument
360 cinfo = idr_find(&info->tx_idr, xfer->hdr.protocol_id); in scmi_do_xfer()
364 trace_scmi_xfer_begin(xfer->transfer_id, xfer->hdr.id, in scmi_do_xfer()
365 xfer->hdr.protocol_id, xfer->hdr.seq, in scmi_do_xfer()
366 xfer->hdr.poll_completion); in scmi_do_xfer()
368 ret = info->desc->ops->send_message(cinfo, xfer); in scmi_do_xfer()
374 if (xfer->hdr.poll_completion) { in scmi_do_xfer()
377 spin_until_cond(scmi_xfer_done_no_timeout(cinfo, xfer, stop)); in scmi_do_xfer()
380 info->desc->ops->fetch_response(cinfo, xfer); in scmi_do_xfer()
386 if (!wait_for_completion_timeout(&xfer->done, timeout)) { in scmi_do_xfer()
393 if (!ret && xfer->hdr.status) in scmi_do_xfer()
394 ret = scmi_to_linux_errno(xfer->hdr.status); in scmi_do_xfer()
399 trace_scmi_xfer_end(xfer->transfer_id, xfer->hdr.id, in scmi_do_xfer()
400 xfer->hdr.protocol_id, xfer->hdr.seq, ret); in scmi_do_xfer()
406 struct scmi_xfer *xfer) in scmi_reset_rx_to_maxsz() argument
410 xfer->rx.len = info->desc->max_msg_size; in scmi_reset_rx_to_maxsz()
426 struct scmi_xfer *xfer) in scmi_do_xfer_with_response() argument
431 xfer->async_done = &async_response; in scmi_do_xfer_with_response()
433 ret = scmi_do_xfer(handle, xfer); in scmi_do_xfer_with_response()
434 if (!ret && !wait_for_completion_timeout(xfer->async_done, timeout)) in scmi_do_xfer_with_response()
437 xfer->async_done = NULL; in scmi_do_xfer_with_response()
461 struct scmi_xfer *xfer; in scmi_xfer_get_init() local
471 xfer = scmi_xfer_get(handle, minfo); in scmi_xfer_get_init()
472 if (IS_ERR(xfer)) { in scmi_xfer_get_init()
473 ret = PTR_ERR(xfer); in scmi_xfer_get_init()
478 xfer->tx.len = tx_size; in scmi_xfer_get_init()
479 xfer->rx.len = rx_size ? : info->desc->max_msg_size; in scmi_xfer_get_init()
480 xfer->hdr.id = msg_id; in scmi_xfer_get_init()
481 xfer->hdr.protocol_id = prot_id; in scmi_xfer_get_init()
482 xfer->hdr.poll_completion = false; in scmi_xfer_get_init()
484 *p = xfer; in scmi_xfer_get_init()
608 struct scmi_xfer *xfer; in __scmi_xfer_info_init() local
630 for (i = 0, xfer = info->xfer_block; i < desc->max_msg; i++, xfer++) { in __scmi_xfer_info_init()
631 xfer->rx.buf = devm_kcalloc(dev, sizeof(u8), desc->max_msg_size, in __scmi_xfer_info_init()
633 if (!xfer->rx.buf) in __scmi_xfer_info_init()
636 xfer->tx.buf = xfer->rx.buf; in __scmi_xfer_info_init()
637 init_completion(&xfer->done); in __scmi_xfer_info_init()