From 60e5832e232bb788b67bc1f7678dbde6bdf9f306 Mon Sep 17 00:00:00 2001 From: Thomas Doerfler Date: Wed, 21 Oct 2009 13:24:35 +0000 Subject: interrupt handler type change --- c/src/ChangeLog | 4 + c/src/lib/libbsp/arm/lpc24xx/ChangeLog | 5 + c/src/lib/libbsp/arm/lpc24xx/i2c/i2c.c | 2 +- c/src/lib/libbsp/arm/lpc24xx/misc/dma-copy.c | 2 +- c/src/lib/libbsp/arm/lpc24xx/network/network.c | 5 +- c/src/lib/libbsp/arm/lpc24xx/ssp/ssp.c | 4 +- c/src/lib/libbsp/powerpc/gen5200/ChangeLog | 4 + c/src/lib/libbsp/powerpc/gen5200/clock/clock.c | 2 +- c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog | 5 + .../libbsp/powerpc/mpc55xxevb/network/network.c | 19 ---- .../libbsp/powerpc/mpc55xxevb/network/smsc9218i.c | 5 +- c/src/lib/libbsp/powerpc/mpc55xxevb/tests/tests.c | 2 +- c/src/lib/libbsp/powerpc/tqm8xx/ChangeLog | 4 + c/src/lib/libbsp/powerpc/tqm8xx/Makefile.am | 3 + c/src/lib/libbsp/powerpc/tqm8xx/clock/p_clock.c | 3 +- c/src/lib/libbsp/powerpc/tqm8xx/console/console.c | 121 ++++++++------------- c/src/lib/libbsp/powerpc/tqm8xx/include/bsp.h | 13 +-- c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c | 16 +-- c/src/lib/libbsp/powerpc/tqm8xx/preinstall.am | 4 + c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c | 14 +-- c/src/lib/libbsp/powerpc/tqm8xx/startup/start.S | 7 +- c/src/lib/libbsp/shared/ChangeLog | 5 + c/src/lib/libbsp/shared/include/irq-generic.h | 2 +- c/src/lib/libbsp/shared/src/irq-generic.c | 5 +- c/src/lib/libbsp/shared/src/irq-legacy.c | 98 ++--------------- c/src/lib/libcpu/powerpc/ChangeLog | 5 + c/src/lib/libcpu/powerpc/mpc55xx/edma/edma.c | 4 +- c/src/lib/libcpu/powerpc/mpc55xx/esci/esci.c | 2 +- c/src/libchip/serial/ns16550.c | 9 +- cpukit/ChangeLog | 5 + cpukit/include/rtems/irq-extension.h | 2 +- testsuites/samples/fileio/init.c | 25 ++++- 32 files changed, 159 insertions(+), 247 deletions(-) delete mode 100644 c/src/lib/libbsp/powerpc/mpc55xxevb/network/network.c diff --git a/c/src/ChangeLog b/c/src/ChangeLog index d9443504d5..9e618f5d88 100644 --- a/c/src/ChangeLog +++ b/c/src/ChangeLog @@ -1,3 +1,7 @@ +2009-10-21 Sebastian Huber + + * libchip/serial/ns16550.c: Update for interrupt handler type change. + 2009-10-21 Ralf Corsépius * aclocal/bsp-alias.m4: New. diff --git a/c/src/lib/libbsp/arm/lpc24xx/ChangeLog b/c/src/lib/libbsp/arm/lpc24xx/ChangeLog index 351e0607bc..b5f0b5a8d1 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/ChangeLog +++ b/c/src/lib/libbsp/arm/lpc24xx/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Sebastian Huber + + * i2c/i2c.c, misc/dma-copy.c, network/network.c, ssp/ssp.c: Update for + interrupt handler type change. + 2009-10-21 Ralf Corsépius * make/custom/lpc24xx.inc: Remove RTEMS_BSP_FAMILY. diff --git a/c/src/lib/libbsp/arm/lpc24xx/i2c/i2c.c b/c/src/lib/libbsp/arm/lpc24xx/i2c/i2c.c index 289fbe98ff..a1e86493d6 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/i2c/i2c.c +++ b/c/src/lib/libbsp/arm/lpc24xx/i2c/i2c.c @@ -44,7 +44,7 @@ typedef struct { uint8_t * volatile end; } lpc24xx_i2c_bus_entry; -static void lpc24xx_i2c_handler( rtems_vector_number vector, void *arg) +static void lpc24xx_i2c_handler( void *arg) { lpc24xx_i2c_bus_entry *e = arg; volatile lpc24xx_i2c *regs = e->regs; diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/dma-copy.c b/c/src/lib/libbsp/arm/lpc24xx/misc/dma-copy.c index 55c33e451f..f5bd2e2baf 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/misc/dma-copy.c +++ b/c/src/lib/libbsp/arm/lpc24xx/misc/dma-copy.c @@ -27,7 +27,7 @@ static rtems_id lpc24xx_dma_sema_table [GPDMA_CH_NUMBER]; static bool lpc24xx_dma_status_table [GPDMA_CH_NUMBER]; -static void lpc24xx_dma_copy_handler(rtems_vector_number vector, void *arg) +static void lpc24xx_dma_copy_handler(void *arg) { /* Get interrupt status */ uint32_t tc = GPDMA_INT_TCSTAT; diff --git a/c/src/lib/libbsp/arm/lpc24xx/network/network.c b/c/src/lib/libbsp/arm/lpc24xx/network/network.c index 63a04c3650..0941118084 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/network/network.c +++ b/c/src/lib/libbsp/arm/lpc24xx/network/network.c @@ -252,10 +252,7 @@ static void lpc24xx_eth_enable_promiscous_mode(bool enable) } } -static void lpc24xx_eth_interrupt_handler( - rtems_vector_number vector, - void *arg -) +static void lpc24xx_eth_interrupt_handler(void *arg) { lpc24xx_eth_driver_entry *e = (lpc24xx_eth_driver_entry *) arg; rtems_event_set re = 0; diff --git a/c/src/lib/libbsp/arm/lpc24xx/ssp/ssp.c b/c/src/lib/libbsp/arm/lpc24xx/ssp/ssp.c index 62e3be6654..a20d6ab1be 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/ssp/ssp.c +++ b/c/src/lib/libbsp/arm/lpc24xx/ssp/ssp.c @@ -80,7 +80,7 @@ static inline bool lpc24xx_ssp_is_busy(const lpc24xx_ssp_bus_entry *bus) && lpc24xx_ssp_dma_data.status != LPC24XX_SSP_DMA_AVAILABLE; } -static void lpc24xx_ssp_handler(rtems_vector_number vector, void *arg) +static void lpc24xx_ssp_handler(void *arg) { lpc24xx_ssp_bus_entry *e = (lpc24xx_ssp_bus_entry *) arg; volatile lpc24xx_ssp *regs = e->regs; @@ -96,7 +96,7 @@ static void lpc24xx_ssp_handler(rtems_vector_number vector, void *arg) regs->icr = icr; } -static void lpc24xx_ssp_dma_handler(rtems_vector_number vector, void *arg) +static void lpc24xx_ssp_dma_handler(void *arg) { lpc24xx_ssp_dma_entry *e = (lpc24xx_ssp_dma_entry *) arg; lpc24xx_ssp_dma_status status = e->status; diff --git a/c/src/lib/libbsp/powerpc/gen5200/ChangeLog b/c/src/lib/libbsp/powerpc/gen5200/ChangeLog index 180b85128f..b92bb30633 100644 --- a/c/src/lib/libbsp/powerpc/gen5200/ChangeLog +++ b/c/src/lib/libbsp/powerpc/gen5200/ChangeLog @@ -1,3 +1,7 @@ +2009-10-21 Sebastian Huber + + * clock/clock.c: Update for interrupt handler type change. + 2009-10-21 Ralf Corsépius * make/custom/gen5200.inc: Remove RTEMS_BSP_FAMILY. diff --git a/c/src/lib/libbsp/powerpc/gen5200/clock/clock.c b/c/src/lib/libbsp/powerpc/gen5200/clock/clock.c index 467b2da4ca..fb85103a7b 100644 --- a/c/src/lib/libbsp/powerpc/gen5200/clock/clock.c +++ b/c/src/lib/libbsp/powerpc/gen5200/clock/clock.c @@ -123,7 +123,7 @@ volatile int ClockInitialized = 0; /* * ISR Handlers */ -void mpc5200_gpt_clock_isr(rtems_vector_number vector, void *handle) +void mpc5200_gpt_clock_isr(void *handle) { uint32_t status; struct mpc5200_gpt *gpt = (struct mpc5200_gpt *)handle; diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog b/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog index 2d560eca0b..f7eafe4aca 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Sebastian Huber + + * network/smsc9218i.c, tests/tests.c: Update for interrupt handler + type change. + 2009-10-21 Ralf Corsépius * make/custom/mpc55xx.cfg: Remove RTEMS_BSP_FAMILY. diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/network.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/network.c deleted file mode 100644 index 7be177d861..0000000000 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/network.c +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @file - * - * @ingroup mpc55xx - * - * @brief Empty file. - */ - -/* - * Copyright (c) 2008 - * Embedded Brains GmbH - * Obere Lagerstr. 30 - * D-82178 Puchheim - * Germany - * rtems@embedded-brains.de - * - * The license and distribution terms for this file may be found in the file - * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. - */ diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c index 6337743725..a540faf4e0 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/network/smsc9218i.c @@ -403,10 +403,7 @@ static void smsc9218i_register_dump(volatile smsc9218i_registers *regs) printf("phy: physcsr: 0x%08" PRIx32 "\n", smsc9218i_phy_read(regs, SMSC9218I_PHY_PHYSCSR)); } -static void smsc9218i_interrupt_handler( - rtems_vector_number vector, - void *arg -) +static void smsc9218i_interrupt_handler(void *arg) { smsc9218i_driver_entry *e = (smsc9218i_driver_entry *) arg; volatile smsc9218i_registers *const regs = smsc9218i; diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/tests/tests.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/tests/tests.c index d1310a5c86..758ef4ce8e 100644 --- a/c/src/lib/libbsp/powerpc/mpc55xxevb/tests/tests.c +++ b/c/src/lib/libbsp/powerpc/mpc55xxevb/tests/tests.c @@ -637,7 +637,7 @@ static inline void test_mpc55xx_intc_worker( void *data) printk( "(%i): Done\n", i); } -static void test_mpc55xx_intc_handler( rtems_vector_number vector, void *data) +static void test_mpc55xx_intc_handler( void *data) { test_mpc55xx_intc_worker( data); } diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/ChangeLog b/c/src/lib/libbsp/powerpc/tqm8xx/ChangeLog index b9a57929fa..f1cbc00bce 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/ChangeLog +++ b/c/src/lib/libbsp/powerpc/tqm8xx/ChangeLog @@ -1,3 +1,7 @@ +2009-10-21 Sebastian Huber + + * clock/p_clock.c: Update for interrupt handler type change. + 2009-10-21 Ralf Corsépius * make/custom/tqm8xx.inc: Remove RTEMS_BSP_FAMILY. diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/Makefile.am b/c/src/lib/libbsp/powerpc/tqm8xx/Makefile.am index 8246d0ae62..5cf4345d39 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/Makefile.am +++ b/c/src/lib/libbsp/powerpc/tqm8xx/Makefile.am @@ -23,6 +23,7 @@ include_HEADERS += include/coverhd.h include_bsp_HEADERS = include/tqm.h include/8xx_immap.h \ include/irq.h include/irq-config.h \ ../../shared/include/irq-generic.h\ + spi/spi.h\ ../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/vectors.h \ ../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/ppc_exc_bspsupp.h @@ -53,6 +54,8 @@ libbsp_a_SOURCES += clock/p_clock.c # console libbsp_a_SOURCES += console/console.c +# spi +libbsp_a_SOURCES += spi/spi.c # timer libbsp_a_SOURCES += timer/timer.c # startup diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/clock/p_clock.c b/c/src/lib/libbsp/powerpc/tqm8xx/clock/p_clock.c index 3067745acd..0e46563e43 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/clock/p_clock.c +++ b/c/src/lib/libbsp/powerpc/tqm8xx/clock/p_clock.c @@ -22,8 +22,7 @@ extern void clockOff (void*); extern int clockIsOn(void*); extern void Clock_isr(void*); -void BSP_clock_hdl(rtems_vector_number vecnum, - void * arg) +void BSP_clock_hdl(void * arg) { Clock_isr(arg); } diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c b/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c index 2d5435fde6..6a48bd390a 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c +++ b/c/src/lib/libbsp/powerpc/tqm8xx/console/console.c @@ -54,31 +54,20 @@ #include #include #include +#include +#include #include #include #include #include #include -/* - * Declare clock speed -- may be overwritten by downloader or debugger - */ -int m8xx_clock_rate = 0; /* * Interrupt-driven input buffer */ #define RXBUFSIZE 256 -#define M8xx_IVEC_SRC_MASK (0x1f) -#define M8xx_IVEC_SRC_SCC1 (0x1E) -#define M8xx_IVEC_SRC_SCC2 (0x1D) -#define M8xx_IVEC_SRC_SCC3 (0x1C) -#define M8xx_IVEC_SRC_SCC4 (0x1B) -#define M8xx_IVEC_SRC_SMC1 (0x04) -#define M8xx_IVEC_SRC_SMC2 (0x03) - -#define M8xx_IREG_MASK(src) (1UL << src) #define M8xx_SICR_BRG1 (0) #define M8xx_SICR_BRG2 (1) #define M8xx_SICR_BRG3 (2) @@ -132,9 +121,8 @@ typedef struct m8xx_console_chan_desc_s { volatile m8xxSMCRegisters_t *smcr; } regs; int ivec_src; - uint32_t ireg_mask; - int cr_chan_code; - int brg_used; + int cr_chan_code; + int brg_used; } m8xx_console_chan_desc_t; m8xx_console_chan_desc_t m8xx_console_chan_desc[CONS_CHN_CNT] = { @@ -142,48 +130,42 @@ m8xx_console_chan_desc_t m8xx_console_chan_desc[CONS_CHN_CNT] = { {TRUE, {(m8xxSCCparms_t *)&(m8xx.scc1p),NULL}, {&(m8xx.scc1),NULL}, - M8xx_IVEC_SRC_SCC1, - M8xx_IREG_MASK(M8xx_IVEC_SRC_SCC1), + BSP_CPM_IRQ_SCC1, M8xx_CR_CHAN_SCC1, -1}, /* SCC2 */ {TRUE, {&(m8xx.scc2p),NULL}, {&(m8xx.scc2),NULL}, - M8xx_IVEC_SRC_SCC2, - M8xx_IREG_MASK(M8xx_IVEC_SRC_SCC2), + BSP_CPM_IRQ_SCC2, M8xx_CR_CHAN_SCC2, -1}, /* SCC3 */ {TRUE, {&(m8xx.scc3p),NULL}, {&(m8xx.scc3),NULL}, - M8xx_IVEC_SRC_SCC3, - M8xx_IREG_MASK(M8xx_IVEC_SRC_SCC3), + BSP_CPM_IRQ_SCC3, M8xx_CR_CHAN_SCC3, -1}, /* SCC4 */ {TRUE, {&(m8xx.scc4p),NULL}, {&(m8xx.scc4),NULL}, - M8xx_IVEC_SRC_SCC4, - M8xx_IREG_MASK(M8xx_IVEC_SRC_SCC4), + BSP_CPM_IRQ_SCC4, M8xx_CR_CHAN_SCC4, -1}, /* SMC1 */ {FALSE, {NULL,&(m8xx.smc1p)}, {NULL,&(m8xx.smc1)}, - M8xx_IVEC_SRC_SMC1, - M8xx_IREG_MASK(M8xx_IVEC_SRC_SMC1), + BSP_CPM_IRQ_SMC1, M8xx_CR_CHAN_SMC1, -1}, /* SMC2 */ {FALSE, {NULL,&(m8xx.smc2p)}, {NULL,&(m8xx.smc2)}, - M8xx_IVEC_SRC_SMC2, - M8xx_IREG_MASK(M8xx_IVEC_SRC_SMC2), + BSP_CPM_IRQ_SMC2_OR_PIP, M8xx_CR_CHAN_SMC2, -1}}; @@ -249,7 +231,7 @@ sccBRGval (int baud) int divisor; int div16 = 0; - divisor = ((m8xx_clock_rate / 16) + (baud / 2)) / baud; + divisor = ((BSP_bus_frequency / 16) + (baud / 2)) / baud; if (divisor > 4096) { div16 = 1; divisor = (divisor + 8) / 16; @@ -283,6 +265,7 @@ static void sccBRGinit(void) #endif } +#if CONS_USE_EXT_CLK /* * input clock frq for CPM clock inputs */ @@ -295,6 +278,7 @@ static uint32_t clkin_frq[2][4] = { {1843000,0,0,0} #endif }; +#endif /* * allocate, set and connect baud rate generators @@ -310,7 +294,7 @@ static int sccBRGalloc(int chan,int baud) int old_brg; int new_brg = -1; int brg_idx; -#if 0 /* we do not support external clocked console */ +#if CONS_USE_EXT_CLK int clk_group; int clk_sel; #endif @@ -319,7 +303,7 @@ static int sccBRGalloc(int chan,int baud) /* compute brg register contents needed */ reg_val = sccBRGval(baud); -#if 0 /* we do not support external clocked console */ +#if CONS_EXT_CLK /* search for clock input with this frq */ clk_group = ((chan == CONS_CHN_SCC3) || (chan == CONS_CHN_SCC4) || @@ -438,32 +422,9 @@ sccSetAttributes (int minor, const struct termios *t) * Interrupt handler */ static rtems_isr -sccInterruptHandler (rtems_vector_number v) +sccInterruptHandler (void *arg) { - int chan = 0; - /* - * calculate channel from vector - */ - switch(v & M8xx_IVEC_SRC_MASK) { - case M8xx_IVEC_SRC_SCC1: - chan = CONS_CHN_SCC1; - break; - case M8xx_IVEC_SRC_SCC2: - chan = CONS_CHN_SCC2; - break; - case M8xx_IVEC_SRC_SCC3: - chan = CONS_CHN_SCC3; - break; - case M8xx_IVEC_SRC_SCC4: - chan = CONS_CHN_SCC4; - break; - case M8xx_IVEC_SRC_SMC1: - chan = CONS_CHN_SMC1; - break; - case M8xx_IVEC_SRC_SMC2: - chan = CONS_CHN_SMC2; - break; - } + int chan = (int)arg; /* * Buffer received? @@ -533,8 +494,24 @@ sccInterruptHandler (rtems_vector_number v) } } } +} + +static void +mpc8xx_console_irq_on(const rtems_irq_connect_data *irq) +{ + CHN_MASK_SET(irq->name,3); /* Enable TX and RX interrupts */ +} - m8xx.cisr = m8xx_console_chan_desc[chan].ireg_mask;/* Clear interrupt-in-service bit */ +static void +mpc8xx_console_irq_off(const rtems_irq_connect_data *irq) +{ + CHN_MASK_SET(irq->name,0); /* Disable TX and RX interrupts */ +} + +static int +mpc8xx_console_irq_isOn(const rtems_irq_connect_data *irq) +{ + return (0 != CHN_MASK_GET(irq->name)); /* Check TX and RX interrupts */ } static void @@ -730,19 +707,18 @@ sccInitialize (int chan) } if (m8xx_scc_mode[chan] != TERMIOS_POLLED) { - rtems_isr_entry old_handler; - rtems_status_code sc; -#if 0 - sc = rtems_interrupt_catch (sccInterruptHandler, - m8xx_console_chan_desc[chan].ivec_src - | (m8xx.cicr & 0xE0), - &old_handler); -#endif - #warning "Redo interrupt installation" - printk( "Redo interrupt installation" ); - CHN_MASK_SET(chan,3); /* Enable TX and RX interrupts */ - m8xx.cimr |= m8xx_console_chan_desc[chan].ireg_mask; /* Enable interrupts */ + rtems_irq_connect_data irq_conn_data = { + m8xx_console_chan_desc[chan].ivec_src, + sccInterruptHandler, /* rtems_irq_hdl */ + (rtems_irq_hdl_param)chan, /* (rtems_irq_hdl_param) */ + mpc8xx_console_irq_on, /* (rtems_irq_enable) */ + mpc8xx_console_irq_off, /* (rtems_irq_disable) */ + mpc8xx_console_irq_isOn /* (rtems_irq_is_enabled) */ + }; + if (!BSP_install_rtems_irq_handler (&irq_conn_data)) { + rtems_panic("console: cannot install IRQ handler"); + } } } @@ -899,13 +875,6 @@ rtems_device_driver console_initialize(rtems_device_major_number major, int chan,entry,ttynum; char tty_name[] = "/dev/tty00"; - /* - * init base clock for BRGs - * (if not already set by debugger etc) - */ - if (m8xx_clock_rate == 0) { - m8xx_clock_rate = BSP_bus_frequency; - } /* * Set up TERMIOS */ diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/include/bsp.h b/c/src/lib/libbsp/powerpc/tqm8xx/include/bsp.h index ffd4b3543f..24a45410c3 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/include/bsp.h +++ b/c/src/lib/libbsp/powerpc/tqm8xx/include/bsp.h @@ -132,18 +132,9 @@ extern int rtems_scc_enet_driver_attach (struct rtems_bsdnet_ifconfig *config, #undef RTEMS_BSP_HAS_IDE_DRIVER /* - * our bus frequency + * our (internal) bus frequency */ -extern unsigned int BSP_bus_frequency; - -/* functions */ - -rtems_isr_entry set_vector( /* returns old vector */ - rtems_isr_entry handler, /* isr routine */ - rtems_vector_number vector, /* vector number */ - int type /* RTEMS or RAW intr */ -); - +extern uint32_t BSP_bus_frequency; #ifdef __cplusplus } diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c b/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c index 4dac7fb38b..d01542e8fa 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/tqm8xx/irq/irq.c @@ -98,15 +98,15 @@ static int BSP_irq_handle_at_cpm(void) { int32_t cpvecnum; uint32_t msr; - rtems_interrupt_level level; /* Get vector number: write IACK=1, then read vectir */ m8xx.civr = 1; cpvecnum = (m8xx.civr >> 11) + BSP_CPM_IRQ_LOWEST_OFFSET; /* - * Check the vector number, mask lower priority interrupts, enable - * exceptions and dispatch the handler. + * Check the vector number, + * enable exceptions and dispatch the handler. + * NOTE: lower-prio interrupts are automatically masked in CPIC */ if (BSP_IS_CPM_IRQ(cpvecnum)) { /* Enable all interrupts */ @@ -115,15 +115,16 @@ static int BSP_irq_handle_at_cpm(void) bsp_interrupt_handler_dispatch(cpvecnum); /* Restore machine state */ ppc_external_exceptions_disable(msr); - /* - * clear "in-service" bit - */ - m8xx.cisr = 1 << (cpvecnum - BSP_CPM_IRQ_LOWEST_OFFSET); } else { /* not valid vector */ bsp_interrupt_handler_default(cpvecnum); } + /* + * clear "in-service" bit + */ + m8xx.cisr = 1 << (cpvecnum - BSP_CPM_IRQ_LOWEST_OFFSET); + return 0; } @@ -131,7 +132,6 @@ static int BSP_irq_handle_at_siu( unsigned excNum) { int32_t sivecnum; uint32_t msr; - rtems_interrupt_level level; bool is_cpm_irq; uint32_t simask_save; /* diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/preinstall.am b/c/src/lib/libbsp/powerpc/tqm8xx/preinstall.am index 7c54509da1..a73f10070b 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/preinstall.am +++ b/c/src/lib/libbsp/powerpc/tqm8xx/preinstall.am @@ -77,6 +77,10 @@ $(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJE $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h +$(PROJECT_INCLUDE)/bsp/spi.h: spi/spi.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/spi.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/spi.h + $(PROJECT_INCLUDE)/bsp/vectors.h: ../../../libcpu/@RTEMS_CPU@/@exceptions@/bspsupport/vectors.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/vectors.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/vectors.h diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c b/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c index b02ccdb057..a7d2a3d2d6 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c +++ b/c/src/lib/libbsp/powerpc/tqm8xx/startup/bspstart.c @@ -21,13 +21,13 @@ */ #include - +#include #include #include #include -/* #include - #include */ +#include +#include #ifdef BSP_HAS_TQMMON /* @@ -36,11 +36,10 @@ #endif /* BSP_HAS_TQMMON */ /* Configuration parameters for console driver, ... */ -unsigned int BSP_bus_frequency; +uint32_t BSP_bus_frequency; /* Configuration parameters for clock driver, ... */ uint32_t bsp_clicks_per_usec; /* for PIT driver: OSCCLK */ -uint32_t bsp_clock_speed ; /* needed for PIT driver */ /* for timer: */ uint32_t bsp_timer_average_overhead; /* Average overhead of timer in ticks */ uint32_t bsp_timer_least_valid; /* Least valid number from timer */ @@ -94,7 +93,7 @@ const char *bsp_tqm_get_cib_string( const char *cib_id) /* * search for pattern in info block (CIB) */ - fnd_str = strstr(TQM_CONF_INFO_BLOCK_ADDR,srch_pattern); + fnd_str = strstr((const char *)TQM_CONF_INFO_BLOCK_ADDR,srch_pattern); if (fnd_str == NULL) { return NULL; @@ -111,7 +110,7 @@ rtems_status_code bsp_tqm_get_cib_uint32( const char *cib_id, uint32_t *result) { const char *item_ptr; - const char *end_ptr; + char *end_ptr; item_ptr = bsp_tqm_get_cib_string(cib_id); if (item_ptr == NULL) { return RTEMS_INVALID_ID; @@ -174,7 +173,6 @@ void bsp_start( void) bsp_clicks_per_usec = 0; /* force to zero to control * PIT clock driver from EXTCLK */ - bsp_clock_speed = BSP_bus_frequency; bsp_timer_least_valid = 3; bsp_timer_average_overhead = 3; diff --git a/c/src/lib/libbsp/powerpc/tqm8xx/startup/start.S b/c/src/lib/libbsp/powerpc/tqm8xx/startup/start.S index b7e557ee02..d94817d597 100644 --- a/c/src/lib/libbsp/powerpc/tqm8xx/startup/start.S +++ b/c/src/lib/libbsp/powerpc/tqm8xx/startup/start.S @@ -24,11 +24,6 @@ #include #include -#warning Call to boot_card has changed and needs checking. -#warning The call is "void boot_card(const char* cmdline);" -#warning You need to pass a NULL. -#warning Please check and remove these warnings. - .extern boot_card .section ".entry" @@ -147,7 +142,7 @@ start_code_in_ram: /* clear arguments and do further init. in C (common for RAM/ROM startup) */ - /* Clear argc, argv and envp */ + /* Clear cmdline */ xor r3, r3, r3 bl SYM (boot_card) /* Call the first C routine */ diff --git a/c/src/lib/libbsp/shared/ChangeLog b/c/src/lib/libbsp/shared/ChangeLog index 7043dac3a7..f0d3427e7c 100644 --- a/c/src/lib/libbsp/shared/ChangeLog +++ b/c/src/lib/libbsp/shared/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Sebastian Huber + + * include/irq-generic.h, src/irq-generic.c, src/irq-legacy.c: Update + for interrupt handler type change. + 2009-10-09 Sebastian Huber * bootcard: Update for heap API changes. diff --git a/c/src/lib/libbsp/shared/include/irq-generic.h b/c/src/lib/libbsp/shared/include/irq-generic.h index 2386587ccb..555e3e3ed5 100644 --- a/c/src/lib/libbsp/shared/include/irq-generic.h +++ b/c/src/lib/libbsp/shared/include/irq-generic.h @@ -226,7 +226,7 @@ static inline void bsp_interrupt_handler_dispatch(rtems_vector_number vector) &bsp_interrupt_handler_table [bsp_interrupt_handler_index(vector)]; do { - (*e->handler)(vector, e->arg); + (*e->handler)(e->arg); e = e->next; } while (e != NULL); } else { diff --git a/c/src/lib/libbsp/shared/src/irq-generic.c b/c/src/lib/libbsp/shared/src/irq-generic.c index 8356728f41..2acd6b81f1 100644 --- a/c/src/lib/libbsp/shared/src/irq-generic.c +++ b/c/src/lib/libbsp/shared/src/irq-generic.c @@ -39,8 +39,10 @@ static uint8_t bsp_interrupt_handler_unique_table static rtems_id bsp_interrupt_mutex = RTEMS_ID_NONE; -static void bsp_interrupt_handler_empty(rtems_vector_number vector, void *arg) +static void bsp_interrupt_handler_empty(void *arg) { + rtems_vector_number vector = (rtems_vector_number) arg; + bsp_interrupt_handler_default(vector); } @@ -219,6 +221,7 @@ rtems_status_code bsp_interrupt_initialize(void) /* Initialize handler table */ for (i = 0; i < BSP_INTERRUPT_HANDLER_TABLE_SIZE; ++i) { bsp_interrupt_handler_table [i].handler = bsp_interrupt_handler_empty; + bsp_interrupt_handler_table [i].arg = (void *) i; } sc = bsp_interrupt_facility_initialize(); diff --git a/c/src/lib/libbsp/shared/src/irq-legacy.c b/c/src/lib/libbsp/shared/src/irq-legacy.c index b864541b8b..37853bae3d 100644 --- a/c/src/lib/libbsp/shared/src/irq-legacy.c +++ b/c/src/lib/libbsp/shared/src/irq-legacy.c @@ -19,62 +19,21 @@ * http://www.rtems.com/license/LICENSE. */ -#include -#include +#include #define BSP_SHARED_HANDLER_SUPPORT +#include #include #include -typedef struct { - rtems_irq_hdl handler; - void *arg; -} bsp_interrupt_legacy_entry; - -typedef struct { - rtems_irq_hdl handler; - void *handler_arg; - bsp_interrupt_legacy_entry *legacy_handler_arg; -} bsp_interrupt_legacy_iterate_entry; - -static void bsp_interrupt_legacy_dispatch(rtems_vector_number vector, void *arg) -{ - bsp_interrupt_legacy_entry *e = (bsp_interrupt_legacy_entry *) arg; - e->handler(e->arg); -} - -static void bsp_interrupt_legacy_per_handler_routine( - void *arg, - const char *info, - rtems_option options, - rtems_interrupt_handler handler, - void *handler_arg -) -{ - bsp_interrupt_legacy_iterate_entry *ie = - (bsp_interrupt_legacy_iterate_entry *) arg; - bsp_interrupt_legacy_entry *e = NULL; - - if (handler == bsp_interrupt_legacy_dispatch) { - e = (bsp_interrupt_legacy_entry *) handler_arg; - if (e->handler == ie->handler && e->arg == ie->handler_arg) { - ie->legacy_handler_arg = e; - } - } -} - /** * @deprecated Obsolete. */ int BSP_get_current_rtems_irq_handler(rtems_irq_connect_data *cd) { - cd->hdl = NULL; - cd->handle = NULL; - cd->on = NULL; - cd->off = NULL; - cd->isOn = NULL; + memset(cd, 0, sizeof(*cd)); return 1; } @@ -85,24 +44,15 @@ int BSP_get_current_rtems_irq_handler(rtems_irq_connect_data *cd) int BSP_install_rtems_irq_handler(const rtems_irq_connect_data *cd) { rtems_status_code sc = RTEMS_SUCCESSFUL; - bsp_interrupt_legacy_entry *e = malloc(sizeof(bsp_interrupt_legacy_entry)); - - if (e == NULL) { - return 0; - } - - e->handler = cd->hdl; - e->arg = cd->handle; sc = rtems_interrupt_handler_install( cd->name, "LEGACY INSTALLED", RTEMS_INTERRUPT_UNIQUE, - bsp_interrupt_legacy_dispatch, - e + cd->hdl, + cd->handle ); if (sc != RTEMS_SUCCESSFUL) { - free(e); return 0; } @@ -119,29 +69,20 @@ int BSP_install_rtems_irq_handler(const rtems_irq_connect_data *cd) int BSP_install_rtems_shared_irq_handler(const rtems_irq_connect_data *cd) { rtems_status_code sc = RTEMS_SUCCESSFUL; - bsp_interrupt_legacy_entry *e = malloc(sizeof(bsp_interrupt_legacy_entry)); - - if (e == NULL) { - return 0; - } - - e->handler = cd->hdl; - e->arg = cd->handle; sc = rtems_interrupt_handler_install( cd->name, "LEGACY INSTALLED", RTEMS_INTERRUPT_SHARED, - bsp_interrupt_legacy_dispatch, - e + cd->hdl, + cd->handle ); if (sc != RTEMS_SUCCESSFUL) { - free(e); return 0; } if (cd->on != NULL) { - cd->on(cd); + (*cd->on)(cd); } return 1; @@ -153,31 +94,12 @@ int BSP_install_rtems_shared_irq_handler(const rtems_irq_connect_data *cd) int BSP_remove_rtems_irq_handler(const rtems_irq_connect_data *cd) { rtems_status_code sc = RTEMS_SUCCESSFUL; - bsp_interrupt_legacy_iterate_entry e = { - .handler = cd->hdl, - .handler_arg = cd->handle, - .legacy_handler_arg = NULL - }; - - sc = rtems_interrupt_handler_iterate( - cd->name, bsp_interrupt_legacy_per_handler_routine, &e); - if (sc != RTEMS_SUCCESSFUL) { - return 0; - } - - if (e.legacy_handler_arg == NULL) { - return 0; - } if (cd->off != NULL) { - cd->off(cd); + (*cd->off)(cd); } - sc = rtems_interrupt_handler_remove( - cd->name, bsp_interrupt_legacy_dispatch, e.legacy_handler_arg); - - free(e.legacy_handler_arg); - + sc = rtems_interrupt_handler_remove(cd->name, cd->hdl, cd->handle); if (sc != RTEMS_SUCCESSFUL) { return 0; } diff --git a/c/src/lib/libcpu/powerpc/ChangeLog b/c/src/lib/libcpu/powerpc/ChangeLog index 22562b32f7..9ea820c4ef 100644 --- a/c/src/lib/libcpu/powerpc/ChangeLog +++ b/c/src/lib/libcpu/powerpc/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Sebastian Huber + + * mpc55xx/edma/edma.c, mpc55xx/esci/esci.c: Update for interrupt + handler type change. + 2009-10-16 Jennifer Averett * mpc6xx/mmu/bat.c: Resolved bug: It is not an overlap if the batindex diff --git a/c/src/lib/libcpu/powerpc/mpc55xx/edma/edma.c b/c/src/lib/libcpu/powerpc/mpc55xx/edma/edma.c index dc7adc136e..74167711f5 100644 --- a/c/src/lib/libcpu/powerpc/mpc55xx/edma/edma.c +++ b/c/src/lib/libcpu/powerpc/mpc55xx/edma/edma.c @@ -47,7 +47,7 @@ static uint64_t mpc55xx_edma_channel_occupation = 0; static rtems_chain_control mpc55xx_edma_channel_chain; -static void mpc55xx_edma_interrupt_handler( rtems_vector_number vector, void *arg) +static void mpc55xx_edma_interrupt_handler( void *arg) { mpc55xx_edma_channel_entry *e = (mpc55xx_edma_channel_entry *) arg; @@ -63,7 +63,7 @@ static void mpc55xx_edma_interrupt_handler( rtems_vector_number vector, void *ar e->done( e, 0); } -static void mpc55xx_edma_interrupt_error_handler( rtems_vector_number vector, void *arg) +static void mpc55xx_edma_interrupt_error_handler( void *arg) { rtems_chain_control *chain = &mpc55xx_edma_channel_chain; rtems_chain_node *node = chain->first; diff --git a/c/src/lib/libcpu/powerpc/mpc55xx/esci/esci.c b/c/src/lib/libcpu/powerpc/mpc55xx/esci/esci.c index 88265d4de7..8181c65cca 100644 --- a/c/src/lib/libcpu/powerpc/mpc55xx/esci/esci.c +++ b/c/src/lib/libcpu/powerpc/mpc55xx/esci/esci.c @@ -410,7 +410,7 @@ static int mpc55xx_esci_termios_set_attributes( int minor, const struct termios /** * @brief Interrupt handler. */ -static void mpc55xx_esci_termios_interrupt_handler( rtems_vector_number vector, void *arg) +static void mpc55xx_esci_termios_interrupt_handler( void *arg) { mpc55xx_esci_driver_entry *e = (mpc55xx_esci_driver_entry *) arg; volatile union ESCI_SR_tag *status = &e->regs->SR; diff --git a/c/src/libchip/serial/ns16550.c b/c/src/libchip/serial/ns16550.c index 19403431f3..5997280e84 100644 --- a/c/src/libchip/serial/ns16550.c +++ b/c/src/libchip/serial/ns16550.c @@ -577,14 +577,7 @@ NS16550_STATIC void ns16550_enable_interrupts( (*setReg)(pNS16550, NS16550_INTERRUPT_ENABLE, mask); } -#ifdef BSP_FEATURE_IRQ_EXTENSION - NS16550_STATIC void ns16550_isr(rtems_vector_number vector, void *arg) - { - int minor = (int) arg; - - ns16550_process( minor); - } -#elif defined BSP_FEATURE_IRQ_LEGACY +#if defined(BSP_FEATURE_IRQ_EXTENSION) || defined(BSP_FEATURE_IRQ_LEGACY) NS16550_STATIC rtems_isr ns16550_isr(void *arg) { int minor = (int) arg; diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 5310c0606d..40acc09844 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,8 @@ +2009-10-21 Sebastian Huber + + * include/rtems/irq-extension.h: Removed vector argument from + rtems_interrupt_handler type. + 2009-10-20 Till Straumann * score/cpu/i386/cpu.c, score/cpu/i386/cpu.h: let the default diff --git a/cpukit/include/rtems/irq-extension.h b/cpukit/include/rtems/irq-extension.h index 6a5164f3f7..8cf6a81431 100644 --- a/cpukit/include/rtems/irq-extension.h +++ b/cpukit/include/rtems/irq-extension.h @@ -68,7 +68,7 @@ extern "C" { /** * @brief Interrupt handler routine type. */ -typedef void (*rtems_interrupt_handler)(rtems_vector_number, void *); +typedef void (*rtems_interrupt_handler)(void *); /** * @brief Installs the interrupt handler routine @a handler for the interrupt diff --git a/testsuites/samples/fileio/init.c b/testsuites/samples/fileio/init.c index b2fe8cab6d..a8504c5a82 100644 --- a/testsuites/samples/fileio/init.c +++ b/testsuites/samples/fileio/init.c @@ -677,15 +677,38 @@ void fileio_menu (void) int menu_tid; +/* + * RTEMS File Menu Task + */ +rtems_task +fileio_task (rtems_task_argument ignored) +{ + fileio_menu(); +} + /* * RTEMS Startup Task */ rtems_task Init (rtems_task_argument ignored) { + rtems_name Task_name; + rtems_id Task_id; + rtems_status_code status; + puts( "\n\n*** FILE I/O SAMPLE AND TEST ***" ); - fileio_menu(); + Task_name = rtems_build_name('F','M','N','U'); + + status = rtems_task_create( + Task_name, 1, RTEMS_MINIMUM_STACK_SIZE * 2, + RTEMS_DEFAULT_MODES , + RTEMS_FLOATING_POINT | RTEMS_DEFAULT_ATTRIBUTES, &Task_id + ); + + status = rtems_task_start( Task_id, fileio_task, 1 ); + + status = rtems_task_delete( RTEMS_SELF ); } #if defined(USE_SHELL) -- cgit v1.2.3