Lines Matching refs:msg

179 	struct scmi_vio_msg *msg;  in scmi_virtio_get_free_msg()  local
187 msg = list_first_entry(&vioch->free_list, typeof(*msg), list); in scmi_virtio_get_free_msg()
188 list_del_init(&msg->list); in scmi_virtio_get_free_msg()
192 msg->poll_status = VIO_MSG_NOT_POLLED; in scmi_virtio_get_free_msg()
193 refcount_set(&msg->users, 1); in scmi_virtio_get_free_msg()
195 return msg; in scmi_virtio_get_free_msg()
198 static inline bool scmi_vio_msg_acquire(struct scmi_vio_msg *msg) in scmi_vio_msg_acquire() argument
200 return refcount_inc_not_zero(&msg->users); in scmi_vio_msg_acquire()
205 struct scmi_vio_msg *msg) in scmi_vio_msg_release() argument
209 ret = refcount_dec_and_test(&msg->users); in scmi_vio_msg_release()
214 list_add_tail(&msg->list, &vioch->free_list); in scmi_vio_msg_release()
227 struct scmi_vio_msg *msg) in scmi_vio_feed_vq_rx() argument
234 sg_init_one(&sg_in, msg->input, VIRTIO_SCMI_MAX_PDU_SIZE); in scmi_vio_feed_vq_rx()
238 rc = virtqueue_add_inbuf(vioch->vqueue, &sg_in, 1, msg, GFP_ATOMIC); in scmi_vio_feed_vq_rx()
254 struct scmi_vio_msg *msg) in scmi_finalize_message() argument
257 scmi_vio_feed_vq_rx(vioch, msg); in scmi_finalize_message()
259 scmi_vio_msg_release(vioch, msg); in scmi_finalize_message()
267 struct scmi_vio_msg *msg; in scmi_vio_complete_cb() local
284 msg = virtqueue_get_buf(vqueue, &length); in scmi_vio_complete_cb()
285 if (!msg) { in scmi_vio_complete_cb()
295 if (msg) { in scmi_vio_complete_cb()
296 msg->rx_len = length; in scmi_vio_complete_cb()
298 msg_read_header(msg->input), msg); in scmi_vio_complete_cb()
300 scmi_finalize_message(vioch, msg); in scmi_vio_complete_cb()
318 struct scmi_vio_msg *msg, *tmp; in scmi_vio_deferred_tx_worker() local
334 list_for_each_entry_safe(msg, tmp, &vioch->pending_cmds_list, list) { in scmi_vio_deferred_tx_worker()
335 list_del(&msg->list); in scmi_vio_deferred_tx_worker()
341 if (msg->poll_status == VIO_MSG_NOT_POLLED) in scmi_vio_deferred_tx_worker()
343 msg_read_header(msg->input), msg); in scmi_vio_deferred_tx_worker()
346 scmi_vio_msg_release(vioch, msg); in scmi_vio_deferred_tx_worker()
450 struct scmi_vio_msg *msg; in virtio_chan_setup() local
452 msg = devm_kzalloc(dev, sizeof(*msg), GFP_KERNEL); in virtio_chan_setup()
453 if (!msg) in virtio_chan_setup()
457 msg->request = devm_kzalloc(dev, in virtio_chan_setup()
460 if (!msg->request) in virtio_chan_setup()
462 spin_lock_init(&msg->poll_lock); in virtio_chan_setup()
463 refcount_set(&msg->users, 1); in virtio_chan_setup()
466 msg->input = devm_kzalloc(dev, VIRTIO_SCMI_MAX_PDU_SIZE, in virtio_chan_setup()
468 if (!msg->input) in virtio_chan_setup()
471 scmi_finalize_message(vioch, msg); in virtio_chan_setup()
504 struct scmi_vio_msg *msg; in virtio_send_message() local
509 msg = scmi_virtio_get_free_msg(vioch); in virtio_send_message()
510 if (!msg) { in virtio_send_message()
515 msg_tx_prepare(msg->request, xfer); in virtio_send_message()
517 sg_init_one(&sg_out, msg->request, msg_command_size(xfer)); in virtio_send_message()
518 sg_init_one(&sg_in, msg->input, msg_response_size(xfer)); in virtio_send_message()
529 msg->poll_idx = virtqueue_enable_cb_prepare(vioch->vqueue); in virtio_send_message()
531 msg->poll_status = VIO_MSG_POLLING; in virtio_send_message()
532 scmi_vio_msg_acquire(msg); in virtio_send_message()
534 smp_store_mb(xfer->priv, msg); in virtio_send_message()
537 rc = virtqueue_add_sgs(vioch->vqueue, sgs, 1, 1, msg, GFP_ATOMIC); in virtio_send_message()
550 scmi_vio_msg_release(vioch, msg); in virtio_send_message()
551 scmi_vio_msg_release(vioch, msg); in virtio_send_message()
562 struct scmi_vio_msg *msg = xfer->priv; in virtio_fetch_response() local
564 if (msg) in virtio_fetch_response()
565 msg_fetch_response(msg->input, msg->rx_len, xfer); in virtio_fetch_response()
571 struct scmi_vio_msg *msg = xfer->priv; in virtio_fetch_notification() local
573 if (msg) in virtio_fetch_notification()
574 msg_fetch_notification(msg->input, msg->rx_len, max_len, xfer); in virtio_fetch_notification()
617 struct scmi_vio_msg *msg = xfer->priv; in virtio_mark_txdone() local
619 if (!msg || !scmi_vio_channel_acquire(vioch)) in virtio_mark_txdone()
626 if (!xfer->hdr.poll_completion || scmi_vio_msg_release(vioch, msg)) { in virtio_mark_txdone()
631 spin_lock_irqsave(&msg->poll_lock, flags); in virtio_mark_txdone()
633 if (ret != -ETIMEDOUT || msg->poll_status == VIO_MSG_POLL_DONE) in virtio_mark_txdone()
634 scmi_vio_msg_release(vioch, msg); in virtio_mark_txdone()
635 else if (msg->poll_status == VIO_MSG_POLLING) in virtio_mark_txdone()
636 msg->poll_status = VIO_MSG_POLL_TIMEOUT; in virtio_mark_txdone()
637 spin_unlock_irqrestore(&msg->poll_lock, flags); in virtio_mark_txdone()
685 struct scmi_vio_msg *next_msg, *msg = xfer->priv; in virtio_poll_done() local
688 if (!msg) in virtio_poll_done()
706 if (msg->poll_status == VIO_MSG_POLL_DONE) in virtio_poll_done()
713 pending = virtqueue_poll(vioch->vqueue, msg->poll_idx); in virtio_poll_done()
742 if (next_msg == msg) { in virtio_poll_done()
780 msg->poll_idx = virtqueue_enable_cb_prepare(vioch->vqueue); in virtio_poll_done()
781 pending = virtqueue_poll(vioch->vqueue, msg->poll_idx); in virtio_poll_done()