From c1f9fd888da79cd6510b5405131dca54b0072a7b Mon Sep 17 00:00:00 2001 From: Benjamin Walsh Date: Wed, 12 Aug 2015 15:15:48 -0400 Subject: [PATCH] irq: make utility functions private irq_handler_set, irq_priority_set and irq_disconnect have been made private by prepending an underscore to their names: irq_handler_set -> irq_handler_set irq_priority_set -> irq_priority_set irq_disconnect -> irq_disconnect The prototypes have been removed from header files when possible, and extern statements used in C code where they were called. _irq_priority_set() for ARM is still in the header file because IRQ_CONFIG() relies on it. Change-Id: I2ad585f8156ff80250f6d9eeca4a249a4477fd9d Signed-off-by: Benjamin Walsh --- arch/arc/core/irq_manage.c | 18 ++++++++++++------ arch/arm/core/irq_manage.c | 16 ++++++++++------ arch/x86/core/inthndlset.c | 7 ++++--- doc/platform/fsl_frdm_k64f.rst | 10 +++------- include/arch/arc/v2/irq.h | 10 ---------- include/arch/arm/CortexM/irq.h | 15 ++++----------- include/arch/x86/arch.h | 5 ----- kernel/microkernel/k_irq.c | 3 ++- .../benchmark/latency_measure/src/utils.c | 4 +++- .../test_arm_m3_irq_vector_table/src/main.c | 2 +- 10 files changed, 39 insertions(+), 51 deletions(-) diff --git a/arch/arc/core/irq_manage.c b/arch/arc/core/irq_manage.c index 13b231eb37c..3d4c91b07d0 100644 --- a/arch/arc/core/irq_manage.c +++ b/arch/arc/core/irq_manage.c @@ -52,6 +52,8 @@ #include /* + * @internal + * * @brief Replace an interrupt handler by another * * An interrupt's ISR can be replaced at runtime. Care must be taken that the @@ -63,7 +65,7 @@ * @return N/A */ -void irq_handler_set( +void _irq_handler_set( unsigned int irq, void (*old)(void *arg), void (*new)(void *arg), @@ -120,6 +122,8 @@ void irq_disable(unsigned int irq) } /* + * @internal + * * @brief Set an interrupt's priority * * Valid values are from 0 to 15. Interrupts of priority 1 are not masked when @@ -131,7 +135,7 @@ void irq_disable(unsigned int irq) * @return N/A */ -void irq_priority_set( +void _irq_priority_set( unsigned int irq, unsigned int prio ) @@ -182,12 +186,14 @@ int irq_connect( void *arg ) { - irq_handler_set(irq, _irq_spurious, isr, arg); - irq_priority_set(irq, prio); + _irq_handler_set(irq, _irq_spurious, isr, arg); + _irq_priority_set(irq, prio); return irq; } /* + * @internal + * * @brief Disconnect an ISR from an interrupt line * * Interrupt line is disconnected from its ISR and the latter is @@ -197,9 +203,9 @@ int irq_connect( * @return N/A */ -void irq_disconnect(unsigned int irq) +void _irq_disconnect(unsigned int irq) { int index = irq - 16; - irq_handler_set(irq, _sw_isr_table[index].isr, _irq_spurious, NULL); + _irq_handler_set(irq, _sw_isr_table[index].isr, _irq_spurious, NULL); } diff --git a/arch/arm/core/irq_manage.c b/arch/arm/core/irq_manage.c index 088a59df662..b3567faff55 100644 --- a/arch/arm/core/irq_manage.c +++ b/arch/arm/core/irq_manage.c @@ -47,6 +47,7 @@ SW_ISR_TABLE_DYNAMIC has to be enabled for connecting ISRs at runtime. extern void __reserved(void); /** + * @internal * * @brief Replace an interrupt handler by another * @@ -59,7 +60,7 @@ extern void __reserved(void); * @return N/A */ -void irq_handler_set(unsigned int irq, +void _irq_handler_set(unsigned int irq, void (*old)(void *arg), void (*new)(void *arg), void *arg) @@ -110,6 +111,7 @@ void irq_disable(unsigned int irq) } /** + * @internal * * @brief Set an interrupt's priority * @@ -124,7 +126,7 @@ void irq_disable(unsigned int irq) * @return N/A */ -void irq_priority_set(unsigned int irq, +void _irq_priority_set(unsigned int irq, unsigned int prio) { __ASSERT(prio > 0 && prio < 256, "invalid priority!"); @@ -167,12 +169,14 @@ int irq_connect(unsigned int irq, void (*isr)(void *arg), void *arg) { - irq_handler_set(irq, _irq_spurious, isr, arg); - irq_priority_set(irq, prio); + _irq_handler_set(irq, _irq_spurious, isr, arg); + _irq_priority_set(irq, prio); return irq; } /** + * + * @internal * * @brief Disconnect an ISR from an interrupt line * @@ -183,7 +187,7 @@ int irq_connect(unsigned int irq, * @return N/A */ -void irq_disconnect(unsigned int irq) +void _irq_disconnect(unsigned int irq) { - irq_handler_set(irq, _sw_isr_table[irq].isr, _irq_spurious, NULL); + _irq_handler_set(irq, _sw_isr_table[irq].isr, _irq_spurious, NULL); } diff --git a/arch/x86/core/inthndlset.c b/arch/x86/core/inthndlset.c index 36e02881937..302778fe4d8 100644 --- a/arch/x86/core/inthndlset.c +++ b/arch/x86/core/inthndlset.c @@ -32,7 +32,7 @@ /* * DESCRIPTION - * This module contains the irq_handler_set() API. This routine is closely + * This module contains the _irq_handler_set() API. This routine is closely * associated with irq_connect(), and any changes to the layout of the * constructed interrupt stub must be reflected in both places. * @@ -58,6 +58,7 @@ extern unsigned char _idt_base_address[]; #define FIRST_OPT_OPCODE_OFF 5 /** + * @internal * * @brief Set the handler in an already connected stub * @@ -67,7 +68,7 @@ extern unsigned char _idt_base_address[]; * WARNINGS: * * A fully constructed interrupt stub is generated via irq_connect(), i.e. - * the irq_handler_set() function must only be called after invoking + * the _irq_handler_set() function must only be called after invoking * irq_connect(). * * The caller must ensure that the associated interrupt does not occur while @@ -80,7 +81,7 @@ extern unsigned char _idt_base_address[]; * */ -void irq_handler_set(unsigned int vector, +void _irq_handler_set(unsigned int vector, void (*oldRoutine)(void *parameter), void (*newRoutine)(void *parameter), void *parameter) diff --git a/doc/platform/fsl_frdm_k64f.rst b/doc/platform/fsl_frdm_k64f.rst index d0051535e5e..5e1d0732b16 100644 --- a/doc/platform/fsl_frdm_k64f.rst +++ b/doc/platform/fsl_frdm_k64f.rst @@ -345,10 +345,8 @@ an ISR or to set the priority of an interrupt, use low numbers. For example, if 3 bits are implemented, use 1, 2, and 3, not 0x20h, 0x40h, and 0x60h. -Interrupt priority is set using the *prio* -parameter of :c:func:`irq_connect()`, or the -:c:func:`irq_priority_set()` API when not connecting -interrupt handlers dynamically. +Interrupt priority is set using the *prio* parameter of +:c:func:`irq_connect()`. The number of available priorities are: @@ -361,9 +359,7 @@ The number of available priorities are: Interrupt locking is done by setting :envvar:`BASEPRI` to 1, setting exceptions 4, 5, 6, and 11 to priority 0, and setting all other exceptions, including interrupts, to a lower priority -(1+). The result is that the :c:func:`irq_priority_set()` API can set -the interrupt priority to 1+ (if it has not already been -installed through :c:func:`irq_connect()`). +(1+). diff --git a/include/arch/arc/v2/irq.h b/include/arch/arc/v2/irq.h index d22028052cd..ec03ebb5a37 100644 --- a/include/arch/arc/v2/irq.h +++ b/include/arch/arc/v2/irq.h @@ -44,31 +44,21 @@ GTEXT(_irq_exit); GTEXT(irq_lock) GTEXT(irq_unlock) -GTEXT(irq_handler_set) GTEXT(irq_connect) -GTEXT(irq_disconnect) GTEXT(irq_enable) GTEXT(irq_disable) -GTEXT(irq_priority_set) #else extern int irq_lock(void); extern void irq_unlock(int key); -extern void irq_handler_set(unsigned int irq, - void (*old)(void *arg), - void (*new)(void *arg), - void *arg); extern int irq_connect(unsigned int irq, unsigned int prio, void (*isr)(void *arg), void *arg); -extern void irq_disconnect(unsigned int irq); extern void irq_enable(unsigned int irq); extern void irq_disable(unsigned int irq); -extern void irq_priority_set(unsigned int irq, unsigned int prio); - extern void _irq_exit(void); /** diff --git a/include/arch/arm/CortexM/irq.h b/include/arch/arm/CortexM/irq.h index e4be3fdcb37..d0e7d6d3a0b 100644 --- a/include/arch/arm/CortexM/irq.h +++ b/include/arch/arm/CortexM/irq.h @@ -45,31 +45,21 @@ ARM-specific nanokernel interrupt handling interface. Included by ARM/arch.h. GTEXT(_IntExit); GTEXT(irq_lock) GTEXT(irq_unlock) -GTEXT(irq_handler_set) GTEXT(irq_connect) -GTEXT(irq_disconnect) GTEXT(irq_enable) GTEXT(irq_disable) -GTEXT(irq_priority_set) #else extern int irq_lock(void); extern void irq_unlock(int key); -extern void irq_handler_set(unsigned int irq, - void (*old)(void *arg), - void (*new)(void *arg), - void *arg); extern int irq_connect(unsigned int irq, unsigned int prio, void (*isr)(void *arg), void *arg); -extern void irq_disconnect(unsigned int irq); extern void irq_enable(unsigned int irq); extern void irq_disable(unsigned int irq); -extern void irq_priority_set(unsigned int irq, unsigned int prio); - extern void _IntExit(void); /* macros convert value of it's argument to a string */ @@ -97,6 +87,9 @@ extern void _IntExit(void); __attribute__ ((section (TOSTR(CONCAT(.gnu.linkonce.isr_irq, irq))))) = \ {parameter, isr} +/* internal routine documented in C file, needed by IRQ_CONFIG macro */ +extern void _irq_priority_set(unsigned int irq, unsigned int prio); + /** * * @brief Configure interrupt for the device @@ -107,7 +100,7 @@ extern void _IntExit(void); * @return N/A * */ -#define IRQ_CONFIG(device, irq) irq_priority_set(irq, _##device##_int_priority) +#define IRQ_CONFIG(device, irq) _irq_priority_set(irq, _##device##_int_priority) #endif /* _ASMLANGUAGE */ diff --git a/include/arch/x86/arch.h b/include/arch/x86/arch.h index 92e35fd2b44..02b0130f866 100644 --- a/include/arch/x86/arch.h +++ b/include/arch/x86/arch.h @@ -392,11 +392,6 @@ extern unsigned int find_first_set(unsigned int op); extern unsigned int find_last_set(unsigned int op); -extern void irq_handler_set(unsigned int vector, - void (*oldRoutine)(void *parameter), - void (*newRoutine)(void *parameter), - void *parameter); - extern int irq_connect(unsigned int irq, unsigned int priority, void (*routine)(void *parameter), diff --git a/kernel/microkernel/k_irq.c b/kernel/microkernel/k_irq.c index 6fc06d7dc42..838e0b6cd99 100644 --- a/kernel/microkernel/k_irq.c +++ b/kernel/microkernel/k_irq.c @@ -93,7 +93,8 @@ static struct task_irq_info task_irq_object[MAX_TASK_IRQS] = { #elif defined(CONFIG_CPU_CORTEX_M3_M4) #include -#define RELEASE_VECTOR(v) irq_disconnect(v) +extern void _irq_disconnect(unsigned int irq); +#define RELEASE_VECTOR(v) _irq_disconnect(v) #else #error "Unknown target" #endif diff --git a/samples/microkernel/benchmark/latency_measure/src/utils.c b/samples/microkernel/benchmark/latency_measure/src/utils.c index 6f49fa6b153..98e69ad9e56 100644 --- a/samples/microkernel/benchmark/latency_measure/src/utils.c +++ b/samples/microkernel/benchmark/latency_measure/src/utils.c @@ -93,7 +93,9 @@ int initSwInterrupt(ptestIsr pIsrHdlr) void setSwInterrupt(ptestIsr pIsrHdlr) { - irq_handler_set(vector, pcurrIsrFunc, pIsrHdlr, (void *)0); + extern void _irq_handler_set(unsigned int irq, void (*old)(void *arg), + void (*new)(void *arg), void *arg); + _irq_handler_set(vector, pcurrIsrFunc, pIsrHdlr, (void *)0); pcurrIsrFunc = pIsrHdlr; } diff --git a/samples/nanokernel/test/test_arm_m3_irq_vector_table/src/main.c b/samples/nanokernel/test/test_arm_m3_irq_vector_table/src/main.c index 911c50aa8dd..a0f25226d04 100644 --- a/samples/nanokernel/test/test_arm_m3_irq_vector_table/src/main.c +++ b/samples/nanokernel/test/test_arm_m3_irq_vector_table/src/main.c @@ -104,7 +104,7 @@ void main(void) for (int ii = 0; ii < 3; ii++) { irq_enable(ii); - irq_priority_set(ii, _EXC_IRQ_DEFAULT_PRIO); + _irq_priority_set(ii, _EXC_IRQ_DEFAULT_PRIO); nano_sem_init(&sem[ii]); }