Lines Matching refs:xfer

206 	struct scmi_xfer *xfer;  member
336 scmi_xfer_raw_waiter_get(struct scmi_raw_mode_info *raw, struct scmi_xfer *xfer, in scmi_xfer_raw_waiter_get() argument
349 xfer->async_done = &rw->async_response; in scmi_xfer_raw_waiter_get()
353 rw->xfer = xfer; in scmi_xfer_raw_waiter_get()
363 if (rw->xfer) { in scmi_xfer_raw_waiter_put()
364 rw->xfer->async_done = NULL; in scmi_xfer_raw_waiter_put()
365 rw->xfer = NULL; in scmi_xfer_raw_waiter_put()
379 trace_scmi_xfer_response_wait(rw->xfer->transfer_id, rw->xfer->hdr.id, in scmi_xfer_raw_waiter_enqueue()
380 rw->xfer->hdr.protocol_id, in scmi_xfer_raw_waiter_enqueue()
381 rw->xfer->hdr.seq, in scmi_xfer_raw_waiter_enqueue()
383 rw->xfer->hdr.poll_completion); in scmi_xfer_raw_waiter_enqueue()
446 struct scmi_xfer *xfer; in scmi_xfer_raw_worker() local
455 xfer = rw->xfer; in scmi_xfer_raw_worker()
469 ret = scmi_xfer_raw_wait_for_message_response(cinfo, xfer, in scmi_xfer_raw_worker()
471 if (!ret && xfer->hdr.status) in scmi_xfer_raw_worker()
472 ret = scmi_to_linux_errno(xfer->hdr.status); in scmi_xfer_raw_worker()
475 raw->desc->ops->mark_txdone(rw->cinfo, ret, xfer); in scmi_xfer_raw_worker()
477 trace_scmi_xfer_end(xfer->transfer_id, xfer->hdr.id, in scmi_xfer_raw_worker()
478 xfer->hdr.protocol_id, xfer->hdr.seq, ret); in scmi_xfer_raw_worker()
481 if (!ret && xfer->async_done) { in scmi_xfer_raw_worker()
484 if (!wait_for_completion_timeout(xfer->async_done, tmo)) in scmi_xfer_raw_worker()
487 pack_scmi_header(&xfer->hdr)); in scmi_xfer_raw_worker()
491 scmi_xfer_raw_put(raw->handle, xfer); in scmi_xfer_raw_worker()
532 struct scmi_xfer *xfer; in scmi_xfer_raw_get_init() local
544 xfer = scmi_xfer_raw_get(raw->handle); in scmi_xfer_raw_get_init()
545 if (IS_ERR(xfer)) { in scmi_xfer_raw_get_init()
547 return PTR_ERR(xfer); in scmi_xfer_raw_get_init()
552 unpack_scmi_header(msg_hdr, &xfer->hdr); in scmi_xfer_raw_get_init()
553 xfer->hdr.seq = (u16)MSG_XTRACT_TOKEN(msg_hdr); in scmi_xfer_raw_get_init()
555 xfer->hdr.poll_completion = false; in scmi_xfer_raw_get_init()
556 xfer->hdr.status = SCMI_SUCCESS; in scmi_xfer_raw_get_init()
557 xfer->tx.len = tx_size; in scmi_xfer_raw_get_init()
558 xfer->rx.len = raw->desc->max_msg_size; in scmi_xfer_raw_get_init()
560 memset(xfer->tx.buf, 0x00, raw->desc->max_msg_size); in scmi_xfer_raw_get_init()
561 if (xfer->tx.len) in scmi_xfer_raw_get_init()
562 memcpy(xfer->tx.buf, (u8 *)buf + sizeof(msg_hdr), xfer->tx.len); in scmi_xfer_raw_get_init()
563 *p = xfer; in scmi_xfer_raw_get_init()
572 ret = scmi_xfer_raw_inflight_register(raw->handle, xfer); in scmi_xfer_raw_get_init()
585 xfer->hdr.seq, msg_hdr); in scmi_xfer_raw_get_init()
586 scmi_xfer_raw_put(raw->handle, xfer); in scmi_xfer_raw_get_init()
612 struct scmi_xfer *xfer, u8 chan_id, in scmi_do_xfer_raw_start() argument
621 chan_id = xfer->hdr.protocol_id; in scmi_do_xfer_raw_start()
623 xfer->flags |= SCMI_XFER_FLAG_CHAN_SET; in scmi_do_xfer_raw_start()
629 rw = scmi_xfer_raw_waiter_get(raw, xfer, cinfo, async); in scmi_do_xfer_raw_start()
637 xfer->hdr.poll_completion = true; in scmi_do_xfer_raw_start()
639 reinit_completion(&xfer->done); in scmi_do_xfer_raw_start()
641 smp_store_mb(xfer->state, SCMI_XFER_SENT_OK); in scmi_do_xfer_raw_start()
643 trace_scmi_xfer_begin(xfer->transfer_id, xfer->hdr.id, in scmi_do_xfer_raw_start()
644 xfer->hdr.protocol_id, xfer->hdr.seq, in scmi_do_xfer_raw_start()
645 xfer->hdr.poll_completion); in scmi_do_xfer_raw_start()
647 ret = raw->desc->ops->send_message(rw->cinfo, xfer); in scmi_do_xfer_raw_start()
654 trace_scmi_msg_dump(raw->id, cinfo->id, xfer->hdr.protocol_id, in scmi_do_xfer_raw_start()
655 xfer->hdr.id, "cmnd", xfer->hdr.seq, in scmi_do_xfer_raw_start()
656 xfer->hdr.status, in scmi_do_xfer_raw_start()
657 xfer->tx.buf, xfer->tx.len); in scmi_do_xfer_raw_start()
681 struct scmi_xfer *xfer; in scmi_raw_message_send() local
683 ret = scmi_xfer_raw_get_init(raw, buf, len, &xfer); in scmi_raw_message_send()
687 ret = scmi_do_xfer_raw_start(raw, xfer, chan_id, async); in scmi_raw_message_send()
689 scmi_xfer_raw_put(raw->handle, xfer); in scmi_raw_message_send()
1260 struct scmi_xfer *xfer) in scmi_xfer_raw_collect() argument
1265 if (!xfer || !msg || !msg_len) in scmi_xfer_raw_collect()
1269 msg_size = xfer->rx.len + sizeof(u32); in scmi_xfer_raw_collect()
1271 if (xfer->hdr.type != MSG_TYPE_NOTIFICATION) in scmi_xfer_raw_collect()
1278 *m = cpu_to_le32(pack_scmi_header(&xfer->hdr)); in scmi_xfer_raw_collect()
1279 if (xfer->hdr.type != MSG_TYPE_NOTIFICATION) in scmi_xfer_raw_collect()
1280 *++m = cpu_to_le32(xfer->hdr.status); in scmi_xfer_raw_collect()
1282 memcpy(++m, xfer->rx.buf, xfer->rx.len); in scmi_xfer_raw_collect()
1306 void scmi_raw_message_report(void *r, struct scmi_xfer *xfer, in scmi_raw_message_report() argument
1316 if (!raw || (idx == SCMI_RAW_REPLY_QUEUE && !SCMI_XFER_IS_RAW(xfer))) in scmi_raw_message_report()
1321 SCMI_XFER_IS_CHAN_SET(xfer) ? chan_id : 0); in scmi_raw_message_report()
1375 ret = scmi_xfer_raw_collect(rb->msg.buf, &rb->msg.len, xfer); in scmi_raw_message_report()
1387 struct scmi_xfer *xfer, u32 msg_hdr) in scmi_xfer_raw_fill() argument
1390 unpack_scmi_header(msg_hdr, &xfer->hdr); in scmi_xfer_raw_fill()
1391 xfer->hdr.seq = MSG_XTRACT_TOKEN(msg_hdr); in scmi_xfer_raw_fill()
1393 memset(xfer->rx.buf, 0x00, xfer->rx.len); in scmi_xfer_raw_fill()
1395 raw->desc->ops->fetch_response(cinfo, xfer); in scmi_xfer_raw_fill()
1419 struct scmi_xfer xfer; in scmi_raw_error_report() local
1425 xfer.rx.len = raw->desc->max_msg_size; in scmi_raw_error_report()
1426 xfer.rx.buf = kzalloc(xfer.rx.len, GFP_ATOMIC); in scmi_raw_error_report()
1427 if (!xfer.rx.buf) { in scmi_raw_error_report()
1437 smp_store_mb(xfer.priv, priv); in scmi_raw_error_report()
1439 scmi_xfer_raw_fill(raw, cinfo, &xfer, msg_hdr); in scmi_raw_error_report()
1440 scmi_raw_message_report(raw, &xfer, SCMI_RAW_ERRS_QUEUE, 0); in scmi_raw_error_report()
1442 kfree(xfer.rx.buf); in scmi_raw_error_report()