diff --git a/drivers/i2c/i2c_rtio.c b/drivers/i2c/i2c_rtio.c index e31c64bedf6..d921f5604ef 100644 --- a/drivers/i2c/i2c_rtio.c +++ b/drivers/i2c/i2c_rtio.c @@ -61,8 +61,6 @@ void i2c_rtio_init(struct i2c_rtio *ctx, const struct device *dev) ctx->dt_spec.bus = dev; ctx->iodev.data = &ctx->dt_spec; ctx->iodev.api = &i2c_iodev_api; - /* TODO drop the builtin submission queue? */ - mpsc_init(&ctx->iodev.iodev_sq); } /** diff --git a/drivers/spi/spi_mcux_lpspi.c b/drivers/spi/spi_mcux_lpspi.c index b0038fddfd5..0d5b7b27f48 100644 --- a/drivers/spi/spi_mcux_lpspi.c +++ b/drivers/spi/spi_mcux_lpspi.c @@ -75,6 +75,7 @@ struct spi_mcux_data { #ifdef CONFIG_SPI_RTIO struct rtio *r; + struct mpsc io_q; struct rtio_iodev iodev; struct rtio_iodev_sqe *txn_head; struct rtio_iodev_sqe *txn_curr; @@ -702,7 +703,7 @@ static int spi_mcux_init(const struct device *dev) data->dt_spec.bus = dev; data->iodev.api = &spi_iodev_api; data->iodev.data = &data->dt_spec; - mpsc_init(&data->iodev.iodev_sq); + mpsc_init(&data->io_q); #endif err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); @@ -803,7 +804,7 @@ static void spi_mcux_iodev_next(const struct device *dev, bool completion) return; } - struct mpsc_node *next = mpsc_pop(&data->iodev.iodev_sq); + struct mpsc_node *next = mpsc_pop(&data->io_q); if (next != NULL) { struct rtio_iodev_sqe *next_sqe = CONTAINER_OF(next, struct rtio_iodev_sqe, q); @@ -832,7 +833,7 @@ static void spi_mcux_iodev_submit(const struct device *dev, { struct spi_mcux_data *data = dev->data; - mpsc_push(&data->iodev.iodev_sq, &iodev_sqe->q); + mpsc_push(&data->io_q, &iodev_sqe->q); spi_mcux_iodev_next(dev, false); } diff --git a/drivers/spi/spi_sam.c b/drivers/spi/spi_sam.c index 7b8dd2ae35e..fb42cb6a553 100644 --- a/drivers/spi/spi_sam.c +++ b/drivers/spi/spi_sam.c @@ -53,6 +53,7 @@ struct spi_sam_data { #ifdef CONFIG_SPI_RTIO struct rtio *r; /* context for thread calls */ + struct mpsc io_q; struct rtio_iodev iodev; struct rtio_iodev_sqe *txn_head; struct rtio_iodev_sqe *txn_curr; @@ -691,7 +692,7 @@ static void spi_sam_iodev_next(const struct device *dev, bool completion) return; } - struct mpsc_node *next = mpsc_pop(&data->iodev.iodev_sq); + struct mpsc_node *next = mpsc_pop(&data->io_q); if (next != NULL) { struct rtio_iodev_sqe *next_sqe = CONTAINER_OF(next, struct rtio_iodev_sqe, q); @@ -736,7 +737,7 @@ static void spi_sam_iodev_submit(const struct device *dev, { struct spi_sam_data *data = dev->data; - mpsc_push(&data->iodev.iodev_sq, &iodev_sqe->q); + mpsc_push(&data->io_q, &iodev_sqe->q); spi_sam_iodev_next(dev, false); } #endif @@ -866,7 +867,7 @@ static int spi_sam_init(const struct device *dev) data->dt_spec.bus = dev; data->iodev.api = &spi_iodev_api; data->iodev.data = &data->dt_spec; - mpsc_init(&data->iodev.iodev_sq); + mpsc_init(&data->io_q); #endif spi_context_unlock_unconditionally(&data->ctx); diff --git a/include/zephyr/rtio/rtio.h b/include/zephyr/rtio/rtio.h index f44c09450b6..a53e939b0ac 100644 --- a/include/zephyr/rtio/rtio.h +++ b/include/zephyr/rtio/rtio.h @@ -449,9 +449,6 @@ struct rtio_iodev { /* Function pointer table */ const struct rtio_iodev_api *api; - /* Queue of RTIO contexts with requests */ - struct mpsc iodev_sq; - /* Data associated with this iodev */ void *data; }; @@ -732,7 +729,6 @@ static inline void rtio_block_pool_free(struct rtio *r, void *buf, uint32_t buf_ #define RTIO_IODEV_DEFINE(name, iodev_api, iodev_data) \ STRUCT_SECTION_ITERABLE(rtio_iodev, name) = { \ .api = (iodev_api), \ - .iodev_sq = MPSC_INIT((name.iodev_sq)), \ .data = (iodev_data), \ } @@ -1128,24 +1124,6 @@ static inline void rtio_iodev_sqe_err(struct rtio_iodev_sqe *iodev_sqe, int resu rtio_executor_err(iodev_sqe, result); } -/** - * @brief Cancel all requests that are pending for the iodev - * - * @param iodev IODev to cancel all requests for - */ -static inline void rtio_iodev_cancel_all(struct rtio_iodev *iodev) -{ - /* Clear pending requests as -ENODATA */ - struct mpsc_node *node = mpsc_pop(&iodev->iodev_sq); - - while (node != NULL) { - struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(node, struct rtio_iodev_sqe, q); - - rtio_iodev_sqe_err(iodev_sqe, -ECANCELED); - node = mpsc_pop(&iodev->iodev_sq); - } -} - /** * Submit a completion queue event with a given result and userdata * diff --git a/samples/subsys/rtio/sensor_batch_processing/src/vnd_sensor.c b/samples/subsys/rtio/sensor_batch_processing/src/vnd_sensor.c index ead3c64a648..97fd39f4d1f 100644 --- a/samples/subsys/rtio/sensor_batch_processing/src/vnd_sensor.c +++ b/samples/subsys/rtio/sensor_batch_processing/src/vnd_sensor.c @@ -20,6 +20,7 @@ struct vnd_sensor_config { struct vnd_sensor_data { struct rtio_iodev iodev; + struct mpsc io_q; struct k_timer timer; const struct device *dev; uint32_t sample_number; @@ -83,13 +84,13 @@ static void vnd_sensor_iodev_submit(struct rtio_iodev_sqe *iodev_sqe) { struct vnd_sensor_data *data = (struct vnd_sensor_data *) iodev_sqe->sqe.iodev; - mpsc_push(&data->iodev.iodev_sq, &iodev_sqe->q); + mpsc_push(&data->io_q, &iodev_sqe->q); } static void vnd_sensor_handle_int(const struct device *dev) { struct vnd_sensor_data *data = dev->data; - struct mpsc_node *node = mpsc_pop(&data->iodev.iodev_sq); + struct mpsc_node *node = mpsc_pop(&data->io_q); if (node != NULL) { struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(node, struct rtio_iodev_sqe, q); @@ -116,7 +117,7 @@ static int vnd_sensor_init(const struct device *dev) data->dev = dev; - mpsc_init(&data->iodev.iodev_sq); + mpsc_init(&data->io_q); k_timer_init(&data->timer, vnd_sensor_timer_expiry, NULL);