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 <benjamin.walsh@windriver.com>
This commit is contained in:
parent
0304cbc36d
commit
c1f9fd888d
10 changed files with 39 additions and 51 deletions
|
@ -52,6 +52,8 @@
|
|||
#include <sw_isr_table.h>
|
||||
|
||||
/*
|
||||
* @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 <irq> 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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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+).
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -93,7 +93,8 @@ static struct task_irq_info task_irq_object[MAX_TASK_IRQS] = {
|
|||
|
||||
#elif defined(CONFIG_CPU_CORTEX_M3_M4)
|
||||
#include <arch/cpu.h>
|
||||
#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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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]);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue