Line data Source code
1 0 : /*
2 : * Copyright (c) 2024 Croxel Inc.
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_RTIO_WORKQ_H_
8 : #define ZEPHYR_INCLUDE_RTIO_WORKQ_H_
9 :
10 : #include <stdint.h>
11 : #include <zephyr/device.h>
12 : #include <zephyr/rtio/rtio.h>
13 : #include <zephyr/sys/p4wq.h>
14 :
15 : #ifdef __cplusplus
16 : extern "C" {
17 : #endif
18 :
19 : /**
20 : * @brief Callback API to execute work operation.
21 : *
22 : * @param iodev_sqe Associated SQE operation.
23 : */
24 1 : typedef void (*rtio_work_submit_t)(struct rtio_iodev_sqe *iodev_sqe);
25 :
26 : /**
27 : * @brief RTIO Work request.
28 : *
29 : * This RTIO Work request to perform a work operation decoupled
30 : * from its submission in the RTIO work-queues.
31 : */
32 1 : struct rtio_work_req {
33 : /** Work item used to submit unit of work. */
34 1 : struct k_p4wq_work work;
35 :
36 : /** Handle to IODEV SQE containing the operation.
37 : * This is filled inside @ref rtio_work_req_submit.
38 : */
39 1 : struct rtio_iodev_sqe *iodev_sqe;
40 :
41 : /** Callback handler where synchronous operation may be executed.
42 : * This is filled inside @ref rtio_work_req_submit.
43 : */
44 1 : rtio_work_submit_t handler;
45 : };
46 :
47 : /**
48 : * @brief Allocate item to perform an RTIO work request.
49 : *
50 : * @details This allocation utilizes its internal memory slab with
51 : * pre-allocated elements.
52 : *
53 : * @return Pointer to allocated item if successful.
54 : * @return NULL if allocation failed.
55 : */
56 1 : struct rtio_work_req *rtio_work_req_alloc(void);
57 :
58 : /**
59 : * @brief Submit RTIO work request.
60 : *
61 : * @param req Item to fill with request information.
62 : * @param iodev_sqe RTIO Operation information.
63 : * @param handler Callback to handler where work operation is performed.
64 : */
65 1 : void rtio_work_req_submit(struct rtio_work_req *req,
66 : struct rtio_iodev_sqe *iodev_sqe,
67 : rtio_work_submit_t handler);
68 :
69 : /**
70 : * @brief Obtain number of currently used items from the pre-allocated pool.
71 : *
72 : * @return Number of used items.
73 : */
74 1 : uint32_t rtio_work_req_used_count_get(void);
75 :
76 : #ifdef __cplusplus
77 : }
78 : #endif
79 :
80 : #endif /* ZEPHYR_INCLUDE_RTIO_WORKQ_H_ */
|