From 04d6d0b1203ed1560e43c75fd4f080824a038c19 Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Wed, 24 Jun 2020 15:47:15 +0200 Subject: [PATCH] drivers: serial: Fix uart_irq_callback_user_data_t usage Now providing the device pointer that calls the callback. Fixes #26923 Signed-off-by: Tomasz Bursztyka --- drivers/serial/leuart_gecko.c | 2 +- drivers/serial/uart_cc13xx_cc26xx.c | 5 +++-- drivers/serial/uart_cc32xx.c | 2 +- drivers/serial/uart_cmsdk_apb.c | 2 +- drivers/serial/uart_esp32.c | 2 +- drivers/serial/uart_gecko.c | 2 +- drivers/serial/uart_imx.c | 2 +- drivers/serial/uart_liteuart.c | 2 +- drivers/serial/uart_mcux.c | 2 +- drivers/serial/uart_mcux_flexcomm.c | 2 +- drivers/serial/uart_mcux_lpsci.c | 2 +- drivers/serial/uart_mcux_lpuart.c | 2 +- drivers/serial/uart_miv.c | 2 +- drivers/serial/uart_msp432p4xx.c | 2 +- drivers/serial/uart_nrfx_uart.c | 2 +- drivers/serial/uart_nrfx_uarte.c | 2 +- drivers/serial/uart_ns16550.c | 2 +- drivers/serial/uart_pl011.c | 2 +- drivers/serial/uart_rv32m1_lpuart.c | 2 +- drivers/serial/uart_sam.c | 2 +- drivers/serial/uart_sam0.c | 2 +- drivers/serial/uart_sifive.c | 2 +- drivers/serial/uart_stellaris.c | 2 +- drivers/serial/uart_stm32.c | 2 +- drivers/serial/uart_xlnx_ps.c | 2 +- drivers/serial/usart_sam.c | 2 +- subsys/usb/class/cdc_acm.c | 2 +- 27 files changed, 29 insertions(+), 28 deletions(-) diff --git a/drivers/serial/leuart_gecko.c b/drivers/serial/leuart_gecko.c index 3eebcb24c55..97c54cd3690 100644 --- a/drivers/serial/leuart_gecko.c +++ b/drivers/serial/leuart_gecko.c @@ -237,7 +237,7 @@ static void leuart_gecko_isr(void *arg) struct leuart_gecko_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_cc13xx_cc26xx.c b/drivers/serial/uart_cc13xx_cc26xx.c index 31e77dd50f3..ea0d96da139 100644 --- a/drivers/serial/uart_cc13xx_cc26xx.c +++ b/drivers/serial/uart_cc13xx_cc26xx.c @@ -345,10 +345,11 @@ static void uart_cc13xx_cc26xx_irq_callback_set( static void uart_cc13xx_cc26xx_isr(void *arg) { - struct uart_cc13xx_cc26xx_data *data = get_dev_data(arg); + struct device *dev = (struct device *)arg; + struct uart_cc13xx_cc26xx_data *data = get_dev_data(dev); if (data->callback) { - data->callback(data->user_data); + data->callback(dev, data->user_data); } } diff --git a/drivers/serial/uart_cc32xx.c b/drivers/serial/uart_cc32xx.c index 4f8eb34cbe6..8ae669dc919 100644 --- a/drivers/serial/uart_cc32xx.c +++ b/drivers/serial/uart_cc32xx.c @@ -282,7 +282,7 @@ static void uart_cc32xx_isr(void *arg) 1); if (dev_data->cb) { - dev_data->cb(dev_data->cb_data); + dev_data->cb(dev, dev_data->cb_data); } /* * RX/TX interrupt should have been implicitly cleared by Zephyr UART diff --git a/drivers/serial/uart_cmsdk_apb.c b/drivers/serial/uart_cmsdk_apb.c index da51517982d..ab4405edce1 100644 --- a/drivers/serial/uart_cmsdk_apb.c +++ b/drivers/serial/uart_cmsdk_apb.c @@ -430,7 +430,7 @@ void uart_cmsdk_apb_isr(void *arg) /* Verify if the callback has been registered */ if (data->irq_cb) { - data->irq_cb(data->irq_cb_data); + data->irq_cb(dev, data->irq_cb_data); } } diff --git a/drivers/serial/uart_esp32.c b/drivers/serial/uart_esp32.c index 0d55040f7b3..c83c92dc275 100644 --- a/drivers/serial/uart_esp32.c +++ b/drivers/serial/uart_esp32.c @@ -437,7 +437,7 @@ void uart_esp32_isr(void *arg) /* Verify if the callback has been registered */ if (data->irq_cb) { - data->irq_cb(data->irq_cb_data); + data->irq_cb(dev, data->irq_cb_data); } } diff --git a/drivers/serial/uart_gecko.c b/drivers/serial/uart_gecko.c index 4bb52402edf..f00a081289d 100644 --- a/drivers/serial/uart_gecko.c +++ b/drivers/serial/uart_gecko.c @@ -229,7 +229,7 @@ static void uart_gecko_isr(void *arg) struct uart_gecko_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_imx.c b/drivers/serial/uart_imx.c index bf56e961828..f26e762ea53 100644 --- a/drivers/serial/uart_imx.c +++ b/drivers/serial/uart_imx.c @@ -255,7 +255,7 @@ void uart_imx_isr(void *arg) struct imx_uart_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_liteuart.c b/drivers/serial/uart_liteuart.c index ef3462d7489..b722adf005f 100644 --- a/drivers/serial/uart_liteuart.c +++ b/drivers/serial/uart_liteuart.c @@ -279,7 +279,7 @@ static void liteuart_uart_irq_handler(void *arg) int key = irq_lock(); if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } /* clear events */ diff --git a/drivers/serial/uart_mcux.c b/drivers/serial/uart_mcux.c index 7d79566114f..333cab0bb50 100644 --- a/drivers/serial/uart_mcux.c +++ b/drivers/serial/uart_mcux.c @@ -298,7 +298,7 @@ static void uart_mcux_isr(void *arg) struct uart_mcux_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_mcux_flexcomm.c b/drivers/serial/uart_mcux_flexcomm.c index 15246e6993e..2bd3be3a6c0 100644 --- a/drivers/serial/uart_mcux_flexcomm.c +++ b/drivers/serial/uart_mcux_flexcomm.c @@ -236,7 +236,7 @@ static void mcux_flexcomm_isr(void *arg) struct mcux_flexcomm_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_mcux_lpsci.c b/drivers/serial/uart_mcux_lpsci.c index b7c2bc43f1d..bc4b2a4b063 100644 --- a/drivers/serial/uart_mcux_lpsci.c +++ b/drivers/serial/uart_mcux_lpsci.c @@ -227,7 +227,7 @@ static void mcux_lpsci_isr(void *arg) struct mcux_lpsci_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_mcux_lpuart.c b/drivers/serial/uart_mcux_lpuart.c index 40d544a4f20..fbcb9cdf80e 100644 --- a/drivers/serial/uart_mcux_lpuart.c +++ b/drivers/serial/uart_mcux_lpuart.c @@ -227,7 +227,7 @@ static void mcux_lpuart_isr(void *arg) struct mcux_lpuart_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_miv.c b/drivers/serial/uart_miv.c index 212f0e6fdf9..a83318c7995 100644 --- a/drivers/serial/uart_miv.c +++ b/drivers/serial/uart_miv.c @@ -300,7 +300,7 @@ static void uart_miv_irq_handler(void *arg) struct uart_miv_data *data = DEV_DATA(dev); if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } diff --git a/drivers/serial/uart_msp432p4xx.c b/drivers/serial/uart_msp432p4xx.c index 46c5efd83fc..7b65787b0e6 100644 --- a/drivers/serial/uart_msp432p4xx.c +++ b/drivers/serial/uart_msp432p4xx.c @@ -329,7 +329,7 @@ static void uart_msp432p4xx_isr(void *arg) (unsigned long)config->base); if (dev_data->cb) { - dev_data->cb(dev_data->cb_data); + dev_data->cb(dev, dev_data->cb_data); } /* * Clear interrupts only after cb called, as Zephyr UART clients expect diff --git a/drivers/serial/uart_nrfx_uart.c b/drivers/serial/uart_nrfx_uart.c index c93a149867a..c25f3938df0 100644 --- a/drivers/serial/uart_nrfx_uart.c +++ b/drivers/serial/uart_nrfx_uart.c @@ -950,7 +950,7 @@ static void uart_nrfx_isr(void *arg) } if (irq_callback) { - irq_callback(irq_cb_data); + irq_callback(dev, irq_cb_data); } } #endif /* CONFIG_UART_0_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_nrfx_uarte.c b/drivers/serial/uart_nrfx_uarte.c index e252a37c6d8..b5f3e9fd709 100644 --- a/drivers/serial/uart_nrfx_uarte.c +++ b/drivers/serial/uart_nrfx_uarte.c @@ -191,7 +191,7 @@ static void uarte_nrfx_isr_int(void *arg) } if (data->int_driven->cb) { - data->int_driven->cb(data->int_driven->cb_data); + data->int_driven->cb(dev, data->int_driven->cb_data); } } #endif /* UARTE_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_ns16550.c b/drivers/serial/uart_ns16550.c index 74755175980..d99b46f5c9f 100644 --- a/drivers/serial/uart_ns16550.c +++ b/drivers/serial/uart_ns16550.c @@ -853,7 +853,7 @@ static void uart_ns16550_isr(void *arg) struct uart_ns16550_dev_data_t * const dev_data = DEV_DATA(dev); if (dev_data->cb) { - dev_data->cb(dev_data->cb_data); + dev_data->cb(dev, dev_data->cb_data); } } diff --git a/drivers/serial/uart_pl011.c b/drivers/serial/uart_pl011.c index e5d99079670..d07d18003a7 100644 --- a/drivers/serial/uart_pl011.c +++ b/drivers/serial/uart_pl011.c @@ -402,7 +402,7 @@ void pl011_isr(void *arg) /* Verify if the callback has been registered */ if (data->irq_cb) { - data->irq_cb(data->irq_cb_data); + data->irq_cb(dev, data->irq_cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_rv32m1_lpuart.c b/drivers/serial/uart_rv32m1_lpuart.c index ebdc79ce6ae..d4ea98ec2b8 100644 --- a/drivers/serial/uart_rv32m1_lpuart.c +++ b/drivers/serial/uart_rv32m1_lpuart.c @@ -230,7 +230,7 @@ static void rv32m1_lpuart_isr(void *arg) struct rv32m1_lpuart_data *data = dev->driver_data; if (data->callback) { - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_sam.c b/drivers/serial/uart_sam.c index 9aff779929c..30a8abd0214 100644 --- a/drivers/serial/uart_sam.c +++ b/drivers/serial/uart_sam.c @@ -294,7 +294,7 @@ static void uart_sam_isr(void *arg) struct uart_sam_dev_data *const dev_data = DEV_DATA(dev); if (dev_data->irq_cb) { - dev_data->irq_cb(dev_data->irq_cb_data); + dev_data->irq_cb(dev, dev_data->irq_cb_data); } } diff --git a/drivers/serial/uart_sam0.c b/drivers/serial/uart_sam0.c index 54d15be1e55..028a52f3aaf 100644 --- a/drivers/serial/uart_sam0.c +++ b/drivers/serial/uart_sam0.c @@ -662,7 +662,7 @@ static void uart_sam0_isr(void *arg) #if CONFIG_UART_INTERRUPT_DRIVEN if (dev_data->cb) { - dev_data->cb(dev_data->cb_data); + dev_data->cb(dev, dev_data->cb_data); } #endif diff --git a/drivers/serial/uart_sifive.c b/drivers/serial/uart_sifive.c index c29257c0687..9750b7b82b5 100644 --- a/drivers/serial/uart_sifive.c +++ b/drivers/serial/uart_sifive.c @@ -323,7 +323,7 @@ static void uart_sifive_irq_handler(void *arg) struct uart_sifive_data *data = DEV_DATA(dev); if (data->callback) - data->callback(data->cb_data); + data->callback(dev, data->cb_data); } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/uart_stellaris.c b/drivers/serial/uart_stellaris.c index 6b335433113..d2e7349d5b1 100644 --- a/drivers/serial/uart_stellaris.c +++ b/drivers/serial/uart_stellaris.c @@ -597,7 +597,7 @@ static void uart_stellaris_isr(void *arg) struct uart_stellaris_dev_data_t * const dev_data = DEV_DATA(dev); if (dev_data->cb) { - dev_data->cb(dev_data->cb_data); + dev_data->cb(dev, dev_data->cb_data); } } diff --git a/drivers/serial/uart_stm32.c b/drivers/serial/uart_stm32.c index 9888281d3cd..dd3811b1fd4 100644 --- a/drivers/serial/uart_stm32.c +++ b/drivers/serial/uart_stm32.c @@ -615,7 +615,7 @@ static void uart_stm32_isr(void *arg) struct uart_stm32_data *data = DEV_DATA(dev); if (data->user_cb) { - data->user_cb(data->user_data); + data->user_cb(dev, data->user_data); } } diff --git a/drivers/serial/uart_xlnx_ps.c b/drivers/serial/uart_xlnx_ps.c index 72bab1d1288..f34163dd8e9 100644 --- a/drivers/serial/uart_xlnx_ps.c +++ b/drivers/serial/uart_xlnx_ps.c @@ -1139,7 +1139,7 @@ static void uart_xlnx_ps_isr(void *arg) const struct uart_xlnx_ps_dev_data_t *data = DEV_DATA(dev); if (data->user_cb) { - data->user_cb(data->user_data); + data->user_cb(dev, data->user_data); } } #endif /* CONFIG_UART_INTERRUPT_DRIVEN */ diff --git a/drivers/serial/usart_sam.c b/drivers/serial/usart_sam.c index acdd71da53a..aa1090ab20a 100644 --- a/drivers/serial/usart_sam.c +++ b/drivers/serial/usart_sam.c @@ -295,7 +295,7 @@ static void usart_sam_isr(void *arg) struct usart_sam_dev_data *const dev_data = DEV_DATA(dev); if (dev_data->irq_cb) { - dev_data->irq_cb(dev_data->cb_data); + dev_data->irq_cb(dev, dev_data->cb_data); } } diff --git a/subsys/usb/class/cdc_acm.c b/subsys/usb/class/cdc_acm.c index c19273d9e62..9de34b92321 100644 --- a/subsys/usb/class/cdc_acm.c +++ b/subsys/usb/class/cdc_acm.c @@ -519,7 +519,7 @@ static void cdc_acm_irq_callback_work_handler(struct k_work *work) dev_data = CONTAINER_OF(work, struct cdc_acm_dev_data_t, cb_work); - dev_data->cb(dev_data->cb_data); + dev_data->cb(dev_data->common.dev, dev_data->cb_data); } /**