mirror of
https://github.com/apache/nuttx.git
synced 2026-09-27 10:46:02 +08:00
irq_dispatch: Add argument pointer to irq_dispatch
Provide a user defined callback context for irq's, such that when registering a callback users can provide a pointer that will get passed back when the isr is called.
This commit is contained in:
committed by
Gregory Nutt
parent
f97a99e051
commit
b3222bbc8a
@@ -262,7 +262,7 @@ static void gpio_porthandler(uint32_t regbase, int irqbase, uint32_t irqset, voi
|
||||
****************************************************************************/
|
||||
|
||||
#if CONFIG_AVR32_GPIOIRQSETA != 0
|
||||
static int gpio0_interrupt(int irq, FAR void *context)
|
||||
static int gpio0_interrupt(int irq, FAR void *context, FAR void *arg)
|
||||
{
|
||||
gpio_porthandler(AVR32_GPIO0_BASE, __IRQ_GPIO_PA0,
|
||||
CONFIG_AVR32_GPIOIRQSETA, context);
|
||||
@@ -271,7 +271,7 @@ static int gpio0_interrupt(int irq, FAR void *context)
|
||||
#endif
|
||||
|
||||
#if CONFIG_AVR32_GPIOIRQSETB != 0
|
||||
static int gpio1_interrupt(int irq, FAR void *context)
|
||||
static int gpio1_interrupt(int irq, FAR void *context, FAR void *arg)
|
||||
{
|
||||
gpio_porthandler(AVR32_GPIO1_BASE, __IRQ_GPIO_PB0,
|
||||
CONFIG_AVR32_GPIOIRQSETB, context);
|
||||
@@ -310,10 +310,10 @@ void gpio_irqinitialize(void)
|
||||
/* Then attach the GPIO interrupt handlers */
|
||||
|
||||
#if CONFIG_AVR32_GPIOIRQSETA != 0
|
||||
irq_attach(AVR32_IRQ_GPIO0, gpio0_interrupt);
|
||||
irq_attach(AVR32_IRQ_GPIO0, gpio0_interrupt, NULL);
|
||||
#endif
|
||||
#if CONFIG_AVR32_GPIOIRQSETB != 0
|
||||
irq_attach(AVR32_IRQ_GPIO1, gpio1_interrupt);
|
||||
irq_attach(AVR32_IRQ_GPIO1, gpio1_interrupt, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -174,7 +174,7 @@ static int up_getgrp(unsigned int irq)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int avr32_xcptn(int irq, FAR void *context)
|
||||
static int avr32_xcptn(int irq, FAR void *context, FAR void *arg)
|
||||
{
|
||||
(void)up_irq_save();
|
||||
_alert("PANIC!!! Exception IRQ: %d\n", irq);
|
||||
@@ -223,7 +223,7 @@ void up_irqinitialize(void)
|
||||
|
||||
for (irq = 0; irq < AVR32_IRQ_NEVENTS; irq++)
|
||||
{
|
||||
irq_attach(irq, avr32_xcptn);
|
||||
irq_attach(irq, avr32_xcptn, NULL);
|
||||
}
|
||||
|
||||
/* Initialize GPIO interrupt facilities */
|
||||
|
||||
@@ -160,7 +160,7 @@ static int up_setup(struct uart_dev_s *dev);
|
||||
static void up_shutdown(struct uart_dev_s *dev);
|
||||
static int up_attach(struct uart_dev_s *dev);
|
||||
static void up_detach(struct uart_dev_s *dev);
|
||||
static int up_interrupt(int irq, void *context);
|
||||
static int up_interrupt(int irq, void *context, FAR void *arg);
|
||||
static int up_ioctl(struct file *filep, int cmd, unsigned long arg);
|
||||
static int up_receive(struct uart_dev_s *dev, uint32_t *status);
|
||||
static void up_rxint(struct uart_dev_s *dev, bool enable);
|
||||
@@ -408,7 +408,7 @@ static int up_attach(struct uart_dev_s *dev)
|
||||
|
||||
/* Attach the IRQ */
|
||||
|
||||
return irq_attach(priv->irq, up_interrupt);
|
||||
return irq_attach(priv->irq, up_interrupt, NULL);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@@ -440,7 +440,7 @@ static void up_detach(struct uart_dev_s *dev)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int up_interrupt(int irq, void *context)
|
||||
static int up_interrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
struct uart_dev_s *dev = NULL;
|
||||
struct up_dev_s *priv;
|
||||
|
||||
@@ -157,7 +157,7 @@ static void rtc_waitnotbusy(void)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int at32uc3_timerisr(int irq, uint32_t *regs)
|
||||
static int at32uc3_timerisr(int irq, uint32_t *regs, void *arg)
|
||||
{
|
||||
/* Clear the pending timer interrupt */
|
||||
|
||||
@@ -219,7 +219,7 @@ void avr_timer_initialize(void)
|
||||
|
||||
/* Attach the timer interrupt vector */
|
||||
|
||||
(void)irq_attach(AVR32_IRQ_RTC, (xcpt_t)at32uc3_timerisr);
|
||||
(void)irq_attach(AVR32_IRQ_RTC, (xcpt_t)at32uc3_timerisr, NULL);
|
||||
|
||||
/* Enable RTC interrupts */
|
||||
|
||||
|
||||
@@ -90,8 +90,8 @@ static int usart1_setup(struct uart_dev_s *dev);
|
||||
static void usart1_shutdown(struct uart_dev_s *dev);
|
||||
static int usart1_attach(struct uart_dev_s *dev);
|
||||
static void usart1_detach(struct uart_dev_s *dev);
|
||||
static int usart1_rxinterrupt(int irq, void *context);
|
||||
static int usart1_txinterrupt(int irq, void *context);
|
||||
static int usart1_rxinterrupt(int irq, void *context, FAR void *arg);
|
||||
static int usart1_txinterrupt(int irq, void *context, FAR void *arg);
|
||||
static int usart1_ioctl(struct file *filep, int cmd, unsigned long arg);
|
||||
static int usart1_receive(struct uart_dev_s *dev, FAR unsigned int *status);
|
||||
static void usart1_rxint(struct uart_dev_s *dev, bool enable);
|
||||
@@ -245,9 +245,9 @@ static int usart1_attach(struct uart_dev_s *dev)
|
||||
* written.
|
||||
*/
|
||||
|
||||
(void)irq_attach(AT90USB_IRQ_U1RX, usart1_rxinterrupt);
|
||||
(void)irq_attach(AT90USB_IRQ_U1DRE, usart1_txinterrupt);
|
||||
//(void)irq_attach(AT90USB_IRQ_U1TX, usart1_txinterrupt);
|
||||
(void)irq_attach(AT90USB_IRQ_U1RX, usart1_rxinterrupt, NULL);
|
||||
(void)irq_attach(AT90USB_IRQ_U1DRE, usart1_txinterrupt, NULL);
|
||||
//(void)irq_attach(AT90USB_IRQ_U1TX, usart1_txinterrupt, NULL);
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -284,7 +284,7 @@ static void usart1_detach(struct uart_dev_s *dev)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int usart1_rxinterrupt(int irq, void *context)
|
||||
static int usart1_rxinterrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
uint8_t ucsr1a = UCSR1A;
|
||||
|
||||
@@ -310,7 +310,7 @@ static int usart1_rxinterrupt(int irq, void *context)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int usart1_txinterrupt(int irq, void *context)
|
||||
static int usart1_txinterrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
uint8_t ucsr1a = UCSR1A;
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int at90usb_timerisr(int irq, uint32_t *regs)
|
||||
static int at90usb_timerisr(int irq, uint32_t *regs, void *arg)
|
||||
{
|
||||
/* Process timer interrupt */
|
||||
|
||||
@@ -168,7 +168,7 @@ void avr_timer_initialize(void)
|
||||
|
||||
/* Attach the timer interrupt vector */
|
||||
|
||||
(void)irq_attach(AT90USB_IRQ_T1COMPA, (xcpt_t)at90usb_timerisr);
|
||||
(void)irq_attach(AT90USB_IRQ_T1COMPA, (xcpt_t)at90usb_timerisr, NULL);
|
||||
|
||||
/* Enable the interrupt on compare match A */
|
||||
|
||||
|
||||
@@ -295,7 +295,7 @@ static void avr_dispatchrequest(FAR const struct usb_ctrlreq_s *ctrl);
|
||||
static int avr_ep0configure(void);
|
||||
static void avr_setaddress(uint8_t address);
|
||||
static void avr_ep0setup(void);
|
||||
static int avr_epinterrupt(int irq, FAR void *context);
|
||||
static int avr_epinterrupt(int irq, FAR void *context, FAR void *arg);
|
||||
|
||||
/* General interrupt handling **************************************************/
|
||||
|
||||
@@ -305,7 +305,7 @@ static void avr_genvbus(void);
|
||||
static inline void avr_gensuspend(void);
|
||||
static void avr_genwakeup(void);
|
||||
static inline void avr_geneor(void);
|
||||
static int avr_geninterrupt(int irq, FAR void *context);
|
||||
static int avr_geninterrupt(int irq, FAR void *context, FAR void *arg);
|
||||
|
||||
/* USB device controller operations ********************************************/
|
||||
|
||||
@@ -1877,7 +1877,7 @@ static inline void avr_epNinterrupt(void)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int avr_epinterrupt(int irq, FAR void *context)
|
||||
static int avr_epinterrupt(int irq, FAR void *context, FAR void *arg)
|
||||
{
|
||||
usbtrace(TRACE_INTENTRY(AVR_TRACEINTID_EPINT), irq);
|
||||
|
||||
@@ -2061,7 +2061,7 @@ static inline void avr_geneor(void)
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int avr_geninterrupt(int irq, FAR void *context)
|
||||
static int avr_geninterrupt(int irq, FAR void *context, FAR void *arg)
|
||||
{
|
||||
usbtrace(TRACE_INTENTRY(AVR_TRACEINTID_GENINT), irq);
|
||||
|
||||
@@ -2783,7 +2783,7 @@ void up_usbinitialize(void)
|
||||
|
||||
/* Attach USB controller general interrupt handler */
|
||||
|
||||
if (irq_attach(AT90USB_IRQ_USBGEN, avr_geninterrupt) != 0)
|
||||
if (irq_attach(AT90USB_IRQ_USBGEN, avr_geninterrupt, NULL) != 0)
|
||||
{
|
||||
usbtrace(TRACE_DEVERROR(AVR_TRACEERR_IRQREGISTRATION), AT90USB_IRQ_USBGEN);
|
||||
goto errout;
|
||||
@@ -2791,7 +2791,7 @@ void up_usbinitialize(void)
|
||||
|
||||
/* Attach USB controller endpoint/pipe interrupt handler */
|
||||
|
||||
if (irq_attach(AT90USB_IRQ_USBEP, avr_epinterrupt) != 0)
|
||||
if (irq_attach(AT90USB_IRQ_USBEP, avr_epinterrupt, NULL) != 0)
|
||||
{
|
||||
usbtrace(TRACE_DEVERROR(AVR_TRACEERR_IRQREGISTRATION), AT90USB_IRQ_USBEP);
|
||||
goto errout;
|
||||
|
||||
@@ -114,8 +114,8 @@ static int usart0_setup(struct uart_dev_s *dev);
|
||||
static void usart0_shutdown(struct uart_dev_s *dev);
|
||||
static int usart0_attach(struct uart_dev_s *dev);
|
||||
static void usart0_detach(struct uart_dev_s *dev);
|
||||
static int usart0_rxinterrupt(int irq, void *context);
|
||||
static int usart0_txinterrupt(int irq, void *context);
|
||||
static int usart0_rxinterrupt(int irq, void *context, FAR void *arg);
|
||||
static int usart0_txinterrupt(int irq, void *context, FAR void *arg);
|
||||
static int usart0_ioctl(struct file *filep, int cmd, unsigned long arg);
|
||||
static int usart0_receive(struct uart_dev_s *dev, FAR unsigned int *status);
|
||||
static void usart0_rxint(struct uart_dev_s *dev, bool enable);
|
||||
@@ -131,8 +131,8 @@ static int usart1_setup(struct uart_dev_s *dev);
|
||||
static void usart1_shutdown(struct uart_dev_s *dev);
|
||||
static int usart1_attach(struct uart_dev_s *dev);
|
||||
static void usart1_detach(struct uart_dev_s *dev);
|
||||
static int usart1_rxinterrupt(int irq, void *context);
|
||||
static int usart1_txinterrupt(int irq, void *context);
|
||||
static int usart1_rxinterrupt(int irq, void *context, FAR void *arg);
|
||||
static int usart1_txinterrupt(int irq, void *context, FAR void *arg);
|
||||
static int usart1_ioctl(struct file *filep, int cmd, unsigned long arg);
|
||||
static int usart1_receive(struct uart_dev_s *dev, FAR unsigned int *status);
|
||||
static void usart1_rxint(struct uart_dev_s *dev, bool enable);
|
||||
@@ -388,9 +388,9 @@ static int usart0_attach(struct uart_dev_s *dev)
|
||||
* written.
|
||||
*/
|
||||
|
||||
(void)irq_attach(ATMEGA_IRQ_U0RX, usart0_rxinterrupt);
|
||||
(void)irq_attach(ATMEGA_IRQ_U0DRE, usart0_txinterrupt);
|
||||
//(void)irq_attach(ATMEGA_IRQ_U0TX, usart0_txinterrupt);
|
||||
(void)irq_attach(ATMEGA_IRQ_U0RX, usart0_rxinterrupt, NULL);
|
||||
(void)irq_attach(ATMEGA_IRQ_U0DRE, usart0_txinterrupt, NULL);
|
||||
//(void)irq_attach(ATMEGA_IRQ_U0TX, usart0_txinterrupt, NULL);
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
@@ -410,9 +410,9 @@ static int usart1_attach(struct uart_dev_s *dev)
|
||||
* written.
|
||||
*/
|
||||
|
||||
(void)irq_attach(ATMEGA_IRQ_U1RX, usart1_rxinterrupt);
|
||||
(void)irq_attach(ATMEGA_IRQ_U1DRE, usart1_txinterrupt);
|
||||
//(void)irq_attach(ATMEGA_IRQ_U1TX, usart1_txinterrupt);
|
||||
(void)irq_attach(ATMEGA_IRQ_U1RX, usart1_rxinterrupt, NULL);
|
||||
(void)irq_attach(ATMEGA_IRQ_U1DRE, usart1_txinterrupt, NULL);
|
||||
//(void)irq_attach(ATMEGA_IRQ_U1TX, usart1_txinterrupt, NULL);
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
@@ -468,7 +468,7 @@ static void usart1_detach(struct uart_dev_s *dev)
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_AVR_USART0
|
||||
static int usart0_rxinterrupt(int irq, void *context)
|
||||
static int usart0_rxinterrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
uint8_t ucsr0a = UCSR0A;
|
||||
|
||||
@@ -486,7 +486,7 @@ static int usart0_rxinterrupt(int irq, void *context)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_AVR_USART1
|
||||
static int usart1_rxinterrupt(int irq, void *context)
|
||||
static int usart1_rxinterrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
uint8_t ucsr1a = UCSR1A;
|
||||
|
||||
@@ -514,7 +514,7 @@ static int usart1_rxinterrupt(int irq, void *context)
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_AVR_USART0
|
||||
static int usart0_txinterrupt(int irq, void *context)
|
||||
static int usart0_txinterrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
uint8_t ucsr0a = UCSR0A;
|
||||
|
||||
@@ -534,7 +534,7 @@ static int usart0_txinterrupt(int irq, void *context)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_AVR_USART1
|
||||
static int usart1_txinterrupt(int irq, void *context)
|
||||
static int usart1_txinterrupt(int irq, void *context, FAR void *arg)
|
||||
{
|
||||
uint8_t ucsr1a = UCSR1A;
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static int atmega_timerisr(int irq, uint32_t *regs)
|
||||
static int atmega_timerisr(int irq, uint32_t *regs, FAR void *arg);
|
||||
{
|
||||
/* Process timer interrupt */
|
||||
|
||||
@@ -169,9 +169,9 @@ void avr_timer_initialize(void)
|
||||
/* Attach the timer interrupt vector */
|
||||
|
||||
#if defined(ATMEGA_IRQ_T1COMPA)
|
||||
(void)irq_attach(ATMEGA_IRQ_T1COMPA, (xcpt_t)atmega_timerisr);
|
||||
(void)irq_attach(ATMEGA_IRQ_T1COMPA, (xcpt_t)atmega_timerisr, NULL);
|
||||
#elif defined(ATMEGA_IRQ_TIM1_COMPA)
|
||||
(void)irq_attach(ATMEGA_IRQ_TIM1_COMPA, (xcpt_t)atmega_timerisr);
|
||||
(void)irq_attach(ATMEGA_IRQ_TIM1_COMPA, (xcpt_t)atmega_timerisr, NULL);
|
||||
#else
|
||||
# error "Unable to find IRQ for timer"
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user