diff options
Diffstat (limited to 'include/i386/edison/bsp/irq.h')
-rw-r--r-- | include/i386/edison/bsp/irq.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/include/i386/edison/bsp/irq.h b/include/i386/edison/bsp/irq.h new file mode 100644 index 0000000000..095af423cf --- /dev/null +++ b/include/i386/edison/bsp/irq.h @@ -0,0 +1,135 @@ +/** + * @file + * @ingroup i386_irq + * @brief Interrupt handlers + */ + +/* irq.h + * + * This include file describe the data structure and the functions implemented + * by rtems to write interrupt handlers. + * + * CopyRight (C) 1998 valette@crf.canon.fr + * + * This code is heavilly inspired by the public specification of STREAM V2 + * that can be found at : + * + * <http://www.chorus.com/Documentation/index.html> by following + * the STREAM API Specification Document link. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +/** + * @defgroup i386_irq Interrupt handlers + * @ingroup i386_shared + * @brief Data structure and the functions to write interrupt handlers + * @{ + */ + +#ifndef _IRQ_H_ +#define _IRQ_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** @brief + * Include some preprocessor value also used by assember code + */ + +#include <bsp/irq_asm.h> +#include <rtems.h> +#define BSP_SHARED_HANDLER_SUPPORT 1 +#include <rtems/irq.h> +#include <rtems/irq-extension.h> + +/*-------------------------------------------------------------------------+ +| Constants ++--------------------------------------------------------------------------*/ + + /** @brief Base vector for our IRQ handlers. */ +#define BSP_IRQ_VECTOR_BASE BSP_ASM_IRQ_VECTOR_BASE +#define BSP_IRQ_LINES_NUMBER 17 +#define BSP_LOWEST_OFFSET 0 +#define BSP_MAX_ON_i8259S (BSP_IRQ_LINES_NUMBER - 2) +#define BSP_MAX_OFFSET (BSP_IRQ_LINES_NUMBER - 1) + /** @brief + * Interrupt offset in comparison to BSP_ASM_IRQ_VECTOR_BASE + * NB : 1) Interrupt vector number in IDT = offset + BSP_ASM_IRQ_VECTOR_BASE + * 2) The same name should be defined on all architecture + * so that handler connection can be unchanged. + */ +#define BSP_PERIODIC_TIMER 0 +#define BSP_KEYBOARD 1 +#define BSP_UART_COM2_IRQ 3 +#define BSP_UART_COM1_IRQ 4 +#define BSP_UART_COM3_IRQ 5 +#define BSP_UART_COM4_IRQ 6 +#define BSP_RT_TIMER1 8 +#define BSP_RT_TIMER3 10 +#define BSP_SMP_IPI 16 + +#define BSP_INTERRUPT_VECTOR_MIN BSP_LOWEST_OFFSET +#define BSP_INTERRUPT_VECTOR_MAX BSP_MAX_OFFSET + +/** @brief + * Type definition for RTEMS managed interrupts + */ +typedef unsigned short rtems_i8259_masks; + +/** + * @brief Contains the current IMR of both i8259s. + */ +extern rtems_i8259_masks i8259s_cache; + +/** + * @brief Contains the super IMR of both i8259s to overrule i8259s_cache during + * interrupt exit. + * + * This enables a bsp_interrupt_vector_disable() in interrupt handlers. This + * is required for the interrupt server support used by the new network stack. + */ +extern rtems_i8259_masks i8259s_super_imr; + +/*-------------------------------------------------------------------------+ +| Function Prototypes. ++--------------------------------------------------------------------------*/ +/* + * ------------------------ Intel 8259 (or emulation) Mngt Routines ------- + */ + +/** @brief + * function to disable a particular irq at 8259 level. After calling + * this function, even if the device asserts the interrupt line it will + * not be propagated further to the processor + */ +int BSP_irq_disable_at_i8259s (const rtems_irq_number irqLine); +/** @brief + * function to enable a particular irq at 8259 level. After calling + * this function, if the device asserts the interrupt line it will + * be propagated further to the processor + */ +int BSP_irq_enable_at_i8259s (const rtems_irq_number irqLine); +/** @brief + * function to acknoledge a particular irq at 8259 level. After calling + * this function, if a device asserts an enabled interrupt line it will + * be propagated further to the processor. Mainly usefull for people + * writting raw handlers as this is automagically done for rtems managed + * handlers. + */ +int BSP_irq_ack_at_i8259s (const rtems_irq_number irqLine); +/** @brief + * function to check if a particular irq is enabled at 8259 level. After calling + */ +int BSP_irq_enabled_at_i8259s (const rtems_irq_number irqLine); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _IRQ_H_ */ |