Lines Matching refs:iodev_sqe

18 static void rtio_executor_op(struct rtio_iodev_sqe *iodev_sqe)  in rtio_executor_op()  argument
20 const struct rtio_sqe *sqe = &iodev_sqe->sqe; in rtio_executor_op()
24 sqe->callback.callback(iodev_sqe->r, sqe, sqe->callback.arg0); in rtio_executor_op()
25 rtio_iodev_sqe_ok(iodev_sqe, 0); in rtio_executor_op()
28 rtio_sched_alarm(iodev_sqe, sqe->delay.timeout); in rtio_executor_op()
31 rtio_iodev_sqe_err(iodev_sqe, -EINVAL); in rtio_executor_op()
43 static inline void rtio_iodev_submit(struct rtio_iodev_sqe *iodev_sqe) in rtio_iodev_submit() argument
45 if (FIELD_GET(RTIO_SQE_CANCELED, iodev_sqe->sqe.flags)) { in rtio_iodev_submit()
46 rtio_iodev_sqe_err(iodev_sqe, -ECANCELED); in rtio_iodev_submit()
51 if (iodev_sqe->sqe.iodev == NULL) { in rtio_iodev_submit()
52 rtio_executor_op(iodev_sqe); in rtio_iodev_submit()
56 iodev_sqe->sqe.iodev->api->submit(iodev_sqe); in rtio_iodev_submit()
72 struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(node, struct rtio_iodev_sqe, q); in rtio_executor_submit() local
75 if (iodev_sqe->sqe.flags & RTIO_SQE_CANCELED) { in rtio_executor_submit()
76 iodev_sqe->sqe.flags |= cancel_no_response; in rtio_executor_submit()
78 iodev_sqe->r = r; in rtio_executor_submit()
80 struct rtio_iodev_sqe *curr = iodev_sqe, *next; in rtio_executor_submit()
85 bool transaction = iodev_sqe->sqe.flags & RTIO_SQE_TRANSACTION; in rtio_executor_submit()
86 bool chained = iodev_sqe->sqe.flags & RTIO_SQE_CHAINED; in rtio_executor_submit()
87 bool multishot = iodev_sqe->sqe.flags & RTIO_SQE_MULTISHOT; in rtio_executor_submit()
94 node = mpsc_pop(&iodev_sqe->r->sq); in rtio_executor_submit()
119 rtio_iodev_submit(iodev_sqe); in rtio_executor_submit()
132 static inline void rtio_executor_handle_multishot(struct rtio_iodev_sqe *iodev_sqe, in rtio_executor_handle_multishot() argument
135 struct rtio *r = iodev_sqe->r; in rtio_executor_handle_multishot()
136 const bool is_canceled = FIELD_GET(RTIO_SQE_CANCELED, iodev_sqe->sqe.flags) == 1; in rtio_executor_handle_multishot()
137 const bool uses_mempool = FIELD_GET(RTIO_SQE_MEMPOOL_BUFFER, iodev_sqe->sqe.flags) == 1; in rtio_executor_handle_multishot()
138 const bool requires_response = FIELD_GET(RTIO_SQE_NO_RESPONSE, iodev_sqe->sqe.flags) == 0; in rtio_executor_handle_multishot()
139 uint32_t cqe_flags = rtio_cqe_compute_flags(iodev_sqe); in rtio_executor_handle_multishot()
140 void *userdata = iodev_sqe->sqe.userdata; in rtio_executor_handle_multishot()
142 if (iodev_sqe->sqe.op == RTIO_OP_RX && uses_mempool) { in rtio_executor_handle_multishot()
144 iodev_sqe->sqe.rx.buf = NULL; in rtio_executor_handle_multishot()
145 iodev_sqe->sqe.rx.buf_len = 0; in rtio_executor_handle_multishot()
154 LOG_DBG("Releasing memory @%p size=%u", (void *)iodev_sqe->sqe.rx.buf, in rtio_executor_handle_multishot()
155 iodev_sqe->sqe.rx.buf_len); in rtio_executor_handle_multishot()
156 rtio_release_buffer(r, iodev_sqe->sqe.rx.buf, iodev_sqe->sqe.rx.buf_len); in rtio_executor_handle_multishot()
157 rtio_sqe_pool_free(r->sqe_pool, iodev_sqe); in rtio_executor_handle_multishot()
160 mpsc_push(&r->sq, &iodev_sqe->q); in rtio_executor_handle_multishot()
176 static inline void rtio_executor_handle_oneshot(struct rtio_iodev_sqe *iodev_sqe, in rtio_executor_handle_oneshot() argument
179 const bool is_canceled = FIELD_GET(RTIO_SQE_CANCELED, iodev_sqe->sqe.flags) == 1; in rtio_executor_handle_oneshot()
180 struct rtio_iodev_sqe *curr = iodev_sqe; in rtio_executor_handle_oneshot()
181 struct rtio *r = iodev_sqe->r; in rtio_executor_handle_oneshot()
189 uint32_t cqe_flags = rtio_cqe_compute_flags(iodev_sqe); in rtio_executor_handle_oneshot()
214 static inline void rtio_executor_done(struct rtio_iodev_sqe *iodev_sqe, int result, bool is_ok) in rtio_executor_done() argument
216 const bool is_multishot = FIELD_GET(RTIO_SQE_MULTISHOT, iodev_sqe->sqe.flags) == 1; in rtio_executor_done()
219 rtio_executor_handle_multishot(iodev_sqe, result, is_ok); in rtio_executor_done()
221 rtio_executor_handle_oneshot(iodev_sqe, result, is_ok); in rtio_executor_done()
228 void rtio_executor_ok(struct rtio_iodev_sqe *iodev_sqe, int result) in rtio_executor_ok() argument
230 rtio_executor_done(iodev_sqe, result, true); in rtio_executor_ok()
240 void rtio_executor_err(struct rtio_iodev_sqe *iodev_sqe, int result) in rtio_executor_err() argument
242 rtio_executor_done(iodev_sqe, result, false); in rtio_executor_err()