# rtai_oldnames.h

    00001 /*
    00002  *   ARTI -- RTAI-compatible Adeos-based Real-Time Interface. Based on
    00003  *   the original RTAI layer for x86. This file provides user-visible
    00004  *   definitions for compatibility purpose with the legacy RTHAL. Must
    00005  *   be included from rtai_hal.h only.
    00006  *
    00007  *   Original RTAI/x86 layer implementation:
    00008  *   Copyright (C) 2000 Paolo Mantegazza,
    00009  *   Copyright (C) 2000 Steve Papacharalambous,
    00010  *   Copyright (C) 2000 Stuart Hughes,
    00011  *   and others.
    00012  *
    00013  *   RTAI/x86 rewrite over Adeos:
    00014  *   Copyright (C) 2002 Philippe Gerum.
    00015  *
    00016  *   This program is free software; you can redistribute it and/or modify
    00017  *   it under the terms of the GNU General Public License as published by
    00018  *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
    00019  *   USA; either version 2 of the License, or (at your option) any later
    00020  *   version.
    00021  *
    00022  *   This program is distributed in the hope that it will be useful,
    00023  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00024  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00025  *   GNU General Public License for more details.
    00026  *
    00027  *   You should have received a copy of the GNU General Public License
    00028  *   along with this program; if not, write to the Free Software
    00029  *   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    00030  */
    00031
    00032 #ifndef _RTAI_ASM_I386_OLDNAMES_H
    00033 #define _RTAI_ASM_I386_OLDNAMES_H
    00034
    00035 #ifdef __KERNEL__
    00036
    00037 #define IFLAG                        RTAI_IFLAG
    00038 #define hard_cli()                   rtai_cli()
    00039 #define hard_sti()                   rtai_sti()
    00040 #define hard_save_flags_and_cli(x)   rtai_local_irq_save(x)
    00041 #define hard_restore_flags(x)        rtai_local_irq_restore(x)
    00042 #define hard_save_flags(x)           rtai_local_irq_flags(x)
    00043 #define hard_cpu_id                  adeos_processor_id
    00044
    00045 #endif /* __KERNEL__ */
    00046
    00047 #ifndef __RTAI_HAL__
    00048
    00049 #define tuned           rtai_tunables
    00050 #define NR_RT_CPUS      RTAI_NR_CPUS
    00051 #define RT_TIME_END     RTAI_TIME_LIMIT
    00052
    00053 #define CPU_FREQ        RTAI_CPU_FREQ
    00054 #define TIMER_8254_IRQ  RTAI_TIMER_8254_IRQ
    00055 #define FREQ_8254       RTAI_FREQ_8254
    00056 #define LATENCY_8254    RTAI_LATENCY_8254
    00057 #define SETUP_TIME_8254 RTAI_SETUP_TIME_8254
    00058
    00059 #define FREQ_APIC       RTAI_FREQ_APIC
    00060 #define LATENCY_APIC    RTAI_LATENCY_APIC
    00061 #define SETUP_TIME_APIC RTAI_SETUP_TIME_APIC
    00062
    00063 #define CALIBRATED_APIC_FREQ  RTAI_CALIBRATED_APIC_FREQ
    00064 #define CALIBRATED_CPU_FREQ   RTAI_CALIBRATED_CPU_FREQ
    00065
    00066 #ifdef __KERNEL__
    00067
    00068 #undef  rdtsc
    00069 #define rdtsc()     rtai_rdtsc()
    00070 #define rd_CPU_ts() rtai_rdtsc()
    00071
    00072 #define rt_set_rtai_trap_handler  rt_set_trap_handler
    00073 #define rt_mount_rtai   rt_mount
    00074 #define rt_umount_rtai  rt_umount
    00075 #define calibrate_8254  rtai_calibrate_8254
    00076
    00077 #define ulldiv(a,b,c)   rtai_ulldiv(a,b,c)
    00078 #define imuldiv(a,b,c)  rtai_imuldiv(a,b,c)
    00079 #define llimd(a,b,c)    rtai_llimd(a,b,c)
    00080 #define u64div32(a,b,c) rtai_u64div32c(a,b,c)
    00081
    00082 #define RTAI_NR_TRAPS         ADEOS_NR_FAULTS
    00083
    00084 #ifndef __cplusplus
    00085
    00086 #include <linux/irq.h>
    00087 #include <asm/desc.h>
    00088
    00089 extern struct desc_struct idt_table[];
    00090
    00091 static inline struct desc_struct rt_set_full_intr_vect (unsigned vector,
    00092                                                         int type,
    00093                                                         int dpl,
    00094                                                         void (*handler)(void)) {
    00095     struct desc_struct e = idt_table[vector];
    00096     idt_table[vector].a = (__KERNEL_CS << 16) | ((unsigned)handler & 0x0000FFFF);
    00097     idt_table[vector].b = ((unsigned)handler & 0xFFFF0000) | (0x8000 + (dpl << 13) + (type << 8));
    00098     return e;
    00099 }
    00100
    00101 static inline void rt_reset_full_intr_vect(unsigned vector,
    00102                                            struct desc_struct e) {
    00103     idt_table[vector] = e;
    00104 }
    00105
    00106 static inline int rt_request_cpu_own_irq (unsigned irq, void (*handler)(void)) {
    00107
    00108     return rt_request_irq(irq, (rt_irq_handler_t)handler, NULL, 0);
    00109 }
    00110
    00111 static inline int rt_free_cpu_own_irq (unsigned irq) {
    00112
    00113     return rt_release_irq(irq);
    00114 }
    00115
    00116 static inline void *get_intr_handler (unsigned vector) {
    00117
    00118     return (void *)((idt_table[vector].b & 0xFFFF0000) |
    00119                     (idt_table[vector].a & 0x0000FFFF));
    00120 }
    00121
    00122 static inline void set_intr_vect (unsigned vector,
    00123                                   void (*handler)(void)) {
    00124
    00125     idt_table[vector].a = (idt_table[vector].a & 0xFFFF0000) |
    00126         ((unsigned)handler & 0x0000FFFF);
    00127     idt_table[vector].b = ((unsigned)handler & 0xFFFF0000) |
    00128         (idt_table[vector].b & 0x0000FFFF);
    00129 }
    00130
    00131 static inline void *rt_set_intr_handler (unsigned vector,
    00132                                          void (*handler)(void)) {
    00133
    00134     void (*saved_handler)(void) = get_intr_handler(vector);
    00135     set_intr_vect(vector, handler);
    00136     return saved_handler;
    00137 }
    00138
    00139 static inline void rt_reset_intr_handler (unsigned vector,
    00140                                           void (*handler)(void)) {
    00141     set_intr_vect(vector, handler);
    00142 }
    00143
    00144 static inline unsigned long get_cr2 (void) {
    00145
    00146     unsigned long address;
    00147     __asm__("movl %%cr2,%0":"=r" (address));
    00148     return address;
    00149 }
    00150
    00151 #endif /* __KERNEL__ */
    00152
    00153 #endif /* !__cplusplus */
    00154
    00155 #endif /* !__RTAI_HAL__ */
    00156
    00157 #endif /* !_RTAI_ASM_I386_OLDNAMES_H */