Convert more drivers to use new interrupt argument structure.

This commit is contained in:
Gregory Nutt
2017-02-28 09:29:09 -06:00
parent 370e188fa3
commit dc93340a01
3 changed files with 22 additions and 163 deletions
+6 -97
View File
@@ -688,11 +688,11 @@ static int up_attach(struct uart_dev_s *dev)
* disabled in the C2 register. * disabled in the C2 register.
*/ */
ret = irq_attach(priv->irqs, up_interrupts, NULL); ret = irq_attach(priv->irqs, up_interrupts, dev);
#ifdef CONFIG_DEBUG_FEATURES #ifdef CONFIG_DEBUG_FEATURES
if (ret == OK) if (ret == OK)
{ {
ret = irq_attach(priv->irqe, up_interrupt, NULL); ret = irq_attach(priv->irqe, up_interrupt, dev);
} }
#endif #endif
@@ -749,58 +749,12 @@ static void up_detach(struct uart_dev_s *dev)
#ifdef CONFIG_DEBUG_FEATURES #ifdef CONFIG_DEBUG_FEATURES
static int up_interrupt(int irq, void *context, FAR void *arg) static int up_interrupt(int irq, void *context, FAR void *arg)
{ {
struct uart_dev_s *dev = NULL; struct uart_dev_s *dev = (struct uart_dev_s *)arg;
struct up_dev_s *priv; struct up_dev_s *priv;
uint8_t regval; uint8_t regval;
#ifdef CONFIG_KINETIS_UART0 DEBUGASSERT(dev != NULL && dev->priv != NULL);
if (g_uart0priv.irqe == irq)
{
dev = &g_uart0port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART1
if (g_uart1priv.irqe == irq)
{
dev = &g_uart1port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART2
if (g_uart2priv.irqe == irq)
{
dev = &g_uart2port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART3
if (g_uart3priv.irqe == irq)
{
dev = &g_uart3port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART4
if (g_uart4priv.irqe == irq)
{
dev = &g_uart4port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART5
if (g_uart5priv.irqe == irq)
{
dev = &g_uart5port;
}
else
#endif
{
PANIC();
}
priv = (struct up_dev_s *)dev->priv; priv = (struct up_dev_s *)dev->priv;
DEBUGASSERT(priv);
/* Handle error interrupts. This interrupt may be caused by: /* Handle error interrupts. This interrupt may be caused by:
* *
@@ -837,7 +791,7 @@ static int up_interrupt(int irq, void *context, FAR void *arg)
static int up_interrupts(int irq, void *context, FAR void *arg) static int up_interrupts(int irq, void *context, FAR void *arg)
{ {
struct uart_dev_s *dev = NULL; struct uart_dev_s *dev = (struct uart_dev_s *)arg;
struct up_dev_s *priv; struct up_dev_s *priv;
int passes; int passes;
#ifdef CONFIG_KINETIS_UARTFIFOS #ifdef CONFIG_KINETIS_UARTFIFOS
@@ -847,53 +801,8 @@ static int up_interrupts(int irq, void *context, FAR void *arg)
#endif #endif
bool handled; bool handled;
#ifdef CONFIG_KINETIS_UART0 DEBUGASSERT(dev != NULL && dev->priv != NULL);
if (g_uart0priv.irqs == irq)
{
dev = &g_uart0port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART1
if (g_uart1priv.irqs == irq)
{
dev = &g_uart1port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART2
if (g_uart2priv.irqs == irq)
{
dev = &g_uart2port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART3
if (g_uart3priv.irqs == irq)
{
dev = &g_uart3port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART4
if (g_uart4priv.irqs == irq)
{
dev = &g_uart4port;
}
else
#endif
#ifdef CONFIG_KINETIS_UART5
if (g_uart5priv.irqs == irq)
{
dev = &g_uart5port;
}
else
#endif
{
PANIC();
}
priv = (struct up_dev_s *)dev->priv; priv = (struct up_dev_s *)dev->priv;
DEBUGASSERT(priv);
/* Loop until there are no characters to be transferred or, /* Loop until there are no characters to be transferred or,
* until we have been looping for a long time. * until we have been looping for a long time.
+12 -45
View File
@@ -159,7 +159,7 @@ static bool stm32can_txempty(FAR struct can_dev_s *dev);
/* CAN interrupt handling */ /* CAN interrupt handling */
static int stm32can_rxinterrupt(int irq, FAR void *context, int rxmb); static int stm32can_rxinterrupt(FAR struct can_dev_s *dev, int rxmb);
static int stm32can_rx0interrupt(int irq, FAR void *context, FAR void *arg); static int stm32can_rx0interrupt(int irq, FAR void *context, FAR void *arg);
static int stm32can_rx1interrupt(int irq, FAR void *context, FAR void *arg); static int stm32can_rx1interrupt(int irq, FAR void *context, FAR void *arg);
static int stm32can_txinterrupt(int irq, FAR void *context, FAR void *arg); static int stm32can_txinterrupt(int irq, FAR void *context, FAR void *arg);
@@ -654,7 +654,7 @@ static int stm32can_setup(FAR struct can_dev_s *dev)
* The others are not used. * The others are not used.
*/ */
ret = irq_attach(priv->canrx[0], stm32can_rx0interrupt, NULL); ret = irq_attach(priv->canrx[0], stm32can_rx0interrupt, dev);
if (ret < 0) if (ret < 0)
{ {
canerr("ERROR: Failed to attach CAN%d RX0 IRQ (%d)", canerr("ERROR: Failed to attach CAN%d RX0 IRQ (%d)",
@@ -662,7 +662,7 @@ static int stm32can_setup(FAR struct can_dev_s *dev)
return ret; return ret;
} }
ret = irq_attach(priv->canrx[1], stm32can_rx1interrupt, NULL); ret = irq_attach(priv->canrx[1], stm32can_rx1interrupt, dev);
if (ret < 0) if (ret < 0)
{ {
canerr("ERROR: Failed to attach CAN%d RX1 IRQ (%d)", canerr("ERROR: Failed to attach CAN%d RX1 IRQ (%d)",
@@ -670,7 +670,7 @@ static int stm32can_setup(FAR struct can_dev_s *dev)
return ret; return ret;
} }
ret = irq_attach(priv->cantx, stm32can_txinterrupt, NULL); ret = irq_attach(priv->cantx, stm32can_txinterrupt, dev);
if (ret < 0) if (ret < 0)
{ {
canerr("ERROR: Failed to attach CAN%d TX IRQ (%d)", canerr("ERROR: Failed to attach CAN%d TX IRQ (%d)",
@@ -1371,9 +1371,8 @@ static bool stm32can_txempty(FAR struct can_dev_s *dev)
* *
****************************************************************************/ ****************************************************************************/
static int stm32can_rxinterrupt(int irq, FAR void *context, int rxmb) static int stm32can_rxinterrupt(FAR struct can_dev_s *dev, int rxmb)
{ {
FAR struct can_dev_s *dev = NULL;
FAR struct stm32_can_s *priv; FAR struct stm32_can_s *priv;
struct can_hdr_s hdr; struct can_hdr_s hdr;
uint8_t data[CAN_MAXDATALEN]; uint8_t data[CAN_MAXDATALEN];
@@ -1381,24 +1380,7 @@ static int stm32can_rxinterrupt(int irq, FAR void *context, int rxmb)
int npending; int npending;
int ret; int ret;
#if defined(CONFIG_STM32_CAN1) && defined(CONFIG_STM32_CAN2) DEBUGASSERT(dev != NULL && dev->cd_priv != NULL);
if (g_can1priv.canrx[rxmb] == irq)
{
dev = &g_can1dev;
}
else if (g_can2priv.canrx[rxmb] == irq)
{
dev = &g_can2dev;
}
else
{
PANIC();
}
#elif defined(CONFIG_STM32_CAN1)
dev = &g_can1dev;
#else /* defined(CONFIG_STM32_CAN2) */
dev = &g_can2dev;
#endif
priv = dev->cd_priv; priv = dev->cd_priv;
/* Verify that a message is pending in the FIFO */ /* Verify that a message is pending in the FIFO */
@@ -1508,7 +1490,8 @@ errout:
static int stm32can_rx0interrupt(int irq, FAR void *context, FAR void *arg) static int stm32can_rx0interrupt(int irq, FAR void *context, FAR void *arg)
{ {
return stm32can_rxinterrupt(irq, context, 0); FAR struct can_dev_s *dev = (FAR struct can_dev_s *)arg;
return stm32can_rxinterrupt(dev, 0);
} }
/**************************************************************************** /****************************************************************************
@@ -1528,7 +1511,8 @@ static int stm32can_rx0interrupt(int irq, FAR void *context, FAR void *arg)
static int stm32can_rx1interrupt(int irq, FAR void *context, FAR void *arg) static int stm32can_rx1interrupt(int irq, FAR void *context, FAR void *arg)
{ {
return stm32can_rxinterrupt(irq, context, 1); FAR struct can_dev_s *dev = (FAR struct can_dev_s *)arg;
return stm32can_rxinterrupt(dev, 1);
} }
/**************************************************************************** /****************************************************************************
@@ -1548,28 +1532,11 @@ static int stm32can_rx1interrupt(int irq, FAR void *context, FAR void *arg)
static int stm32can_txinterrupt(int irq, FAR void *context, FAR void *arg) static int stm32can_txinterrupt(int irq, FAR void *context, FAR void *arg)
{ {
FAR struct can_dev_s *dev = NULL; FAR struct can_dev_s *dev = (FAR struct can_dev_s *)arg;
FAR struct stm32_can_s *priv; FAR struct stm32_can_s *priv;
uint32_t regval; uint32_t regval;
#if defined(CONFIG_STM32_CAN1) && defined(CONFIG_STM32_CAN2) DEBUGASSERT(dev != NULL && dev->cd_priv != NULL);
if (g_can1priv.cantx == irq)
{
dev = &g_can1dev;
}
else if (g_can2priv.cantx == irq)
{
dev = &g_can2dev;
}
else
{
PANIC();
}
#elif defined(CONFIG_STM32_CAN1)
dev = &g_can1dev;
#else /* defined(CONFIG_STM32_CAN2) */
dev = &g_can2dev;
#endif
priv = dev->cd_priv; priv = dev->cd_priv;
/* Get the transmit status */ /* Get the transmit status */
+4 -21
View File
@@ -363,8 +363,8 @@ static int up_attach(struct uart_dev_s *dev)
/* Initialize interrupt generation on the peripheral */ /* Initialize interrupt generation on the peripheral */
up_serialout(priv, NR5_UART_CTRL_REG_OFFSET, IE_RX | IE_TX); up_serialout(priv, NR5_UART_CTRL_REG_OFFSET, IE_RX | IE_TX);
irq_attach(priv->irqrx, up_interrupt, NULL); irq_attach(priv->irqrx, up_interrupt, dev);
irq_attach(priv->irqtx, up_interrupt, NULL); irq_attach(priv->irqtx, up_interrupt, dev);
/* Indicate no interrupts active in EPIC */ /* Indicate no interrupts active in EPIC */
@@ -415,31 +415,14 @@ static void up_detach(struct uart_dev_s *dev)
static int up_interrupt(int irq, void *context, FAR void *arg) static int up_interrupt(int irq, void *context, FAR void *arg)
{ {
struct uart_dev_s *dev = NULL; struct uart_dev_s *dev = (struct uart_dev_s *)arg;
struct up_dev_s *priv; struct up_dev_s *priv;
int passes; int passes;
uint32_t status; uint32_t status;
bool handled; bool handled;
#ifdef CONFIG_NR5_UART1 DEBUGASSERT(dev != NULL && dev->priv != NULL);
if (g_uart1priv.irqrx == irq || g_uart1priv.irqtx == irq)
{
dev = &g_uart1port;
}
else
#endif
#ifdef CONFIG_NR5_UART2
if (g_uart2priv.irqrx == irq || g_uart2priv.irqtx == irq)
{
dev = &g_uart2port;
}
else
#endif
{
PANIC();
}
priv = (struct up_dev_s *)dev->priv; priv = (struct up_dev_s *)dev->priv;
DEBUGASSERT(priv);
/* Loop until there are no characters to be transferred or, /* Loop until there are no characters to be transferred or,
* until we have been looping for a long time. * until we have been looping for a long time.