00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef _RTAI_ASM_I386_VECTORS_H
00031 #define _RTAI_ASM_I386_VECTORS_H
00032 
00033 #define RTAI_SYS_VECTOR     0xF6
00034 
00035 #ifdef __KERNEL__
00036 
00037 #include <linux/version.h>
00038 
00039 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,19)
00040 #include <asm/ipipe.h>
00041 #endif
00042 
00043 #include <rtai_hal_names.h>
00044 #include <rtai_config.h>
00045 
00046 #ifdef CONFIG_X86_LOCAL_APIC
00047 #define RTAI_APIC_HIGH_VECTOR  HAL_APIC_HIGH_VECTOR
00048 #define RTAI_APIC_LOW_VECTOR   HAL_APIC_LOW_VECTOR
00049 #else 
00050 #define RTAI_APIC_HIGH_VECTOR  0xff
00051 #define RTAI_APIC_LOW_VECTOR   0xff
00052 #endif
00053 
00054 #ifdef ipipe_apic_vector_irq 
00055 #define RTAI_APIC_HIGH_IPI     ipipe_apic_vector_irq(RTAI_APIC_HIGH_VECTOR)
00056 #define RTAI_APIC_LOW_IPI      ipipe_apic_vector_irq(RTAI_APIC_LOW_VECTOR)
00057 #define RTAI_SYS_IRQ           ipipe_apic_vector_irq(RTAI_SYS_VECTOR)
00058 #define LOCAL_TIMER_IPI        ipipe_apic_vector_irq(LOCAL_TIMER_VECTOR)
00059 #else
00060 #define RTAI_APIC_HIGH_IPI     (RTAI_APIC_HIGH_VECTOR - FIRST_EXTERNAL_VECTOR)
00061 #define RTAI_APIC_LOW_IPI      (RTAI_APIC_LOW_VECTOR - FIRST_EXTERNAL_VECTOR)
00062 #define RTAI_SYS_IRQ           (RTAI_SYS_VECTOR - FIRST_EXTERNAL_VECTOR)
00063 #define LOCAL_TIMER_IPI        (LOCAL_TIMER_VECTOR - FIRST_EXTERNAL_VECTOR)
00064 #endif
00065 
00066 #if RTAI_APIC_HIGH_VECTOR == RTAI_SYS_VECTOR || RTAI_APIC_LOW_VECTOR == RTAI_SYS_VECTOR
00067 #error *** RTAI_SYS_VECTOR CONFLICTS WITH APIC VECTORS USED BY RTAI ***
00068 #endif
00069 
00070 #endif
00071 
00072 #define __rtai_stringize0(_s_) #_s_
00073 #define __rtai_stringize(_s_)  __rtai_stringize0(_s_)
00074 #define __rtai_trap_call(_t_)  _t_
00075 #define __rtai_do_trap0(_t_)   __rtai_stringize(int $ _t_)
00076 #define __rtai_do_trap(_t_)    __rtai_do_trap0(__rtai_trap_call(_t_))
00077 
00078 #define RTAI_DO_TRAP(v, r, a1, a2)  do { __asm__ __volatile__ ( __rtai_do_trap(v): : "a" (a1), "c" (a2), "d" (&r): "memory"); } while (0)
00079 
00080 #endif