arc: remove deprecated dynamic interrupt implementation
Change-Id: I7a81123f72458f43d3e8e1ca04a921ae6c5f1f6e Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
53dffd61aa
commit
3a1cf9af2c
4 changed files with 0 additions and 110 deletions
|
@ -231,19 +231,6 @@ config SW_ISR_TABLE
|
||||||
a parameter to be passed to the interrupt handlers. Also, invoking
|
a parameter to be passed to the interrupt handlers. Also, invoking
|
||||||
the exeception/interrupt exit stub is automatically done.
|
the exeception/interrupt exit stub is automatically done.
|
||||||
|
|
||||||
This has to be enabled for dynamically connecting interrupt handlers
|
|
||||||
at runtime (SW_ISR_TABLE_DYNAMIC).
|
|
||||||
|
|
||||||
config SW_ISR_TABLE_DYNAMIC
|
|
||||||
bool
|
|
||||||
prompt "Allow installing interrupt handlers at runtime"
|
|
||||||
depends on SW_ISR_TABLE
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
This option enables irq_connect_dynamic(). It moves the ISR table to
|
|
||||||
SRAM so that it is writable. This has the side-effect of removing
|
|
||||||
write-protection on the ISR table.
|
|
||||||
|
|
||||||
config IRQ_VECTOR_TABLE_CUSTOM
|
config IRQ_VECTOR_TABLE_CUSTOM
|
||||||
bool
|
bool
|
||||||
prompt "Projects provide a custom static IRQ part of vector table"
|
prompt "Projects provide a custom static IRQ part of vector table"
|
||||||
|
|
|
@ -22,9 +22,6 @@
|
||||||
* Interrupt management:
|
* Interrupt management:
|
||||||
*
|
*
|
||||||
* - enabling/disabling
|
* - enabling/disabling
|
||||||
* - dynamic ISR connecting/replacing
|
|
||||||
*
|
|
||||||
* SW_ISR_TABLE_DYNAMIC has to be enabled for connecting ISRs at runtime.
|
|
||||||
*
|
*
|
||||||
* An IRQ number passed to the @a irq parameters found in this file is a
|
* An IRQ number passed to the @a irq parameters found in this file is a
|
||||||
* number from 16 to last IRQ number on the platform.
|
* number from 16 to last IRQ number on the platform.
|
||||||
|
@ -117,75 +114,3 @@ void _irq_spurious(void *unused)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_SW_ISR_TABLE_DYNAMIC
|
|
||||||
/*
|
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* @brief Replace an interrupt handler by another
|
|
||||||
*
|
|
||||||
* An interrupt's ISR can be replaced at runtime.
|
|
||||||
*
|
|
||||||
* @return N/A
|
|
||||||
*/
|
|
||||||
|
|
||||||
void _irq_handler_set(
|
|
||||||
unsigned int irq,
|
|
||||||
void (*new)(void *arg),
|
|
||||||
void *arg
|
|
||||||
)
|
|
||||||
{
|
|
||||||
int key = irq_lock();
|
|
||||||
int index = irq - 16;
|
|
||||||
|
|
||||||
__ASSERT(irq < CONFIG_NUM_IRQS, "IRQ number too high");
|
|
||||||
_sw_isr_table[index].isr = new;
|
|
||||||
_sw_isr_table[index].arg = arg;
|
|
||||||
|
|
||||||
irq_unlock(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @brief Connect an ISR to an interrupt line
|
|
||||||
*
|
|
||||||
* @a isr is connected to interrupt line @a irq, a number greater than or equal
|
|
||||||
* 16. No prior ISR can have been connected on @a irq interrupt line since the
|
|
||||||
* system booted.
|
|
||||||
*
|
|
||||||
* This routine will hang if another ISR was connected for interrupt line @a irq
|
|
||||||
* and ASSERT_ON is enabled; if ASSERT_ON is disabled, it will fail silently.
|
|
||||||
*
|
|
||||||
* @return the interrupt line number
|
|
||||||
*/
|
|
||||||
|
|
||||||
int _arch_irq_connect_dynamic(
|
|
||||||
unsigned int irq,
|
|
||||||
unsigned int prio,
|
|
||||||
void (*isr)(void *arg),
|
|
||||||
void *arg,
|
|
||||||
uint32_t flags
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ARG_UNUSED(flags);
|
|
||||||
_irq_handler_set(irq, isr, arg);
|
|
||||||
_irq_priority_set(irq, prio);
|
|
||||||
return irq;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* @brief Disconnect an ISR from an interrupt line
|
|
||||||
*
|
|
||||||
* Interrupt line @a irq is disconnected from its ISR and the latter is
|
|
||||||
* replaced by _irq_spurious(). irq_disable() should have been called before
|
|
||||||
* invoking this routine.
|
|
||||||
*
|
|
||||||
* @return N/A
|
|
||||||
*/
|
|
||||||
|
|
||||||
void _irq_disconnect(unsigned int irq)
|
|
||||||
{
|
|
||||||
_irq_handler_set(irq, _irq_spurious, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_SW_ISR_TABLE_DYNAMIC */
|
|
||||||
|
|
|
@ -39,11 +39,6 @@ GTEXT(_arch_irq_connect)
|
||||||
GTEXT(_arch_irq_enable)
|
GTEXT(_arch_irq_enable)
|
||||||
GTEXT(_arch_irq_disable)
|
GTEXT(_arch_irq_disable)
|
||||||
#else
|
#else
|
||||||
extern int _arch_irq_connect_dynamic(unsigned int irq,
|
|
||||||
unsigned int prio,
|
|
||||||
void (*isr)(void *arg),
|
|
||||||
void *arg,
|
|
||||||
uint32_t flags);
|
|
||||||
|
|
||||||
extern void _arch_irq_enable(unsigned int irq);
|
extern void _arch_irq_enable(unsigned int irq);
|
||||||
extern void _arch_irq_disable(unsigned int irq);
|
extern void _arch_irq_disable(unsigned int irq);
|
||||||
|
|
|
@ -89,7 +89,6 @@ SECTIONS {
|
||||||
*(.version_header)
|
*(.version_header)
|
||||||
KEEP(*(".version_header*"))
|
KEEP(*(".version_header*"))
|
||||||
#endif
|
#endif
|
||||||
#ifndef CONFIG_SW_ISR_TABLE_DYNAMIC
|
|
||||||
KEEP(*(.isr_irq*))
|
KEEP(*(.isr_irq*))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -108,7 +107,6 @@ SECTIONS {
|
||||||
KEEP(*(SORT(.gnu.linkonce.isr_irq[2-9][0-9])))
|
KEEP(*(SORT(.gnu.linkonce.isr_irq[2-9][0-9])))
|
||||||
/* sections for IRQ100-999 */
|
/* sections for IRQ100-999 */
|
||||||
KEEP(*(SORT(.gnu.linkonce.isr_irq[1-9][0-9][0-9])))
|
KEEP(*(SORT(.gnu.linkonce.isr_irq[1-9][0-9][0-9])))
|
||||||
#endif
|
|
||||||
|
|
||||||
*(.text)
|
*(.text)
|
||||||
*(".text.*")
|
*(".text.*")
|
||||||
|
@ -193,21 +191,6 @@ SECTIONS {
|
||||||
*(.data)
|
*(.data)
|
||||||
*(".data.*")
|
*(".data.*")
|
||||||
|
|
||||||
#if CONFIG_SW_ISR_TABLE_DYNAMIC
|
|
||||||
KEEP(*(.isr_irq*))
|
|
||||||
|
|
||||||
/*The following sections maps the location of the different rows for
|
|
||||||
the _sw_isr_table. Each row maps to an IRQ entry (handler, argument).*/
|
|
||||||
/*In ARC architecture, IRQ 0-15 are reserved for the system and are not
|
|
||||||
assignable by the user, for that reason the linker sections start
|
|
||||||
on IRQ 16*/
|
|
||||||
/* sections for IRQ16-19 */
|
|
||||||
KEEP(*(SORT(.gnu.linkonce.isr_irq[1][6-9])))
|
|
||||||
/* sections for IRQ20-99 */
|
|
||||||
KEEP(*(SORT(.gnu.linkonce.isr_irq[2-9][0-9])))
|
|
||||||
/* sections for IRQ100-999 */
|
|
||||||
KEEP(*(SORT(.gnu.linkonce.isr_irq[1-9][0-9][0-9])))
|
|
||||||
#endif
|
|
||||||
} GROUP_LINK_IN(RAMABLE_REGION)
|
} GROUP_LINK_IN(RAMABLE_REGION)
|
||||||
|
|
||||||
SECTION_PROLOGUE(initlevel, (OPTIONAL),)
|
SECTION_PROLOGUE(initlevel, (OPTIONAL),)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue