Based on the original RTAI layer for x86.
Original RTAI/x86 layer implementation: Copyright © 2000 Paolo Mantegazza, Copyright © 2000 Steve Papacharalambous, Copyright © 2000 Stuart Hughes, and others.
RTAI/x86 rewrite over Adeos: Copyright © 2002 Philippe Gerum. Copyright © 2005 Paolo Mantegazza.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139, USA; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Definition in file hal.c.
Include dependency graph for hal.c:

Go to the source code of this file.
Defines | |
| #define | INCLUDED_BY_HAL_C |
| #define | CHECK_STACK_IN_IRQ 0 |
| #define | __RTAI_HAL__ |
| #define | RTAI_NR_IRQS IPIPE_NR_XIRQS |
| #define | rtai_setup_periodic_apic(count, vector) |
| #define | rtai_setup_oneshot_apic(count, vector) |
| #define | __ack_APIC_irq() |
| #define | rtai_irq_desc(irq) (irq_desc[irq].chip) |
| #define | BEGIN_PIC() |
| #define | END_PIC() |
| #define | hal_lock_irq(x, y, z) |
| #define | hal_unlock_irq(x, y) |
| #define | REQUEST_LINUX_IRQ_BROADCAST_TO_APIC_TIMERS() 0 |
| #define | FREE_LINUX_IRQ_BROADCAST_TO_APIC_TIMERS() ; |
| #define | RTAI_SCHED_ISR_LOCK() |
| #define | RTAI_SCHED_ISR_UNLOCK() |
| #define | HAL_TICK_REGS hal_tick_regs[cpuid] |
| #define | HAL_LOCK_LINUX() do { sflags = rt_save_switch_to_real_time(cpuid); } while (0) |
| #define | HAL_UNLOCK_LINUX() do { rtai_cli(); rt_restore_switch_to_linux(sflags, cpuid); } while (0) |
| #define | __STR(x) #x |
| #define | STR(x) __STR(x) |
| #define | SYMBOL_NAME_STR(X) #X |
| #define | SAVE_REG |
| #define | RSTR_REG |
| #define | DEFINE_VECTORED_ISR(name, fun) |
| #define | rtai_critical_sync NULL |
| #define | CHECK_KERCTX() ; |
| #define | HINT_DIAG_MSG(x) |
Functions | |
| MODULE_LICENSE ("GPL") | |
| RTAI_MODULE_PARM (rtai_cpufreq_arg, ulong) | |
| unsigned long | rtai_critical_enter (void(*synch)(void)) |
| void | rtai_critical_exit (unsigned long flags) |
| RTAI_MODULE_PARM (IsolCpusMask, ulong) | |
| int | rt_request_irq (unsigned irq, int(*handler)(unsigned irq, void *cookie), void *cookie, int retmode) |
| int | rt_release_irq (unsigned irq) |
| int | rt_ack_tmr (unsigned int irq) |
| int | rt_ack_uart (unsigned int irq) |
| int | rt_set_irq_ack (unsigned irq, int(*irq_ack)(unsigned int)) |
| void | rt_set_irq_cookie (unsigned irq, void *cookie) |
| void | rt_set_irq_retmode (unsigned irq, int retmode) |
| unsigned | rt_startup_irq (unsigned irq) |
| start and initialize the PIC to accept interrupt request irq. | |
| void | rt_shutdown_irq (unsigned irq) |
| Shut down an IRQ source. | |
| static void | _rt_enable_irq (unsigned irq) |
| void | rt_enable_irq (unsigned irq) |
| Enable an IRQ source. | |
| void | rt_disable_irq (unsigned irq) |
| Disable an IRQ source. | |
| void | rt_mask_and_ack_irq (unsigned irq) |
| Mask and acknowledge and IRQ source. | |
| static void | _rt_end_irq (unsigned irq) |
| void | rt_unmask_irq (unsigned irq) |
| Unmask and IRQ source. | |
| void | rt_ack_irq (unsigned irq) |
| Acknowledge an IRQ source. | |
| void | rt_end_irq (unsigned irq) |
| void | rt_eoi_irq (unsigned irq) |
| int | rt_request_linux_irq (unsigned irq, void *handler, char *name, void *dev_id) |
| Install shared Linux interrupt handler. | |
| int | rt_free_linux_irq (unsigned irq, void *dev_id) |
| Uninstall shared Linux interrupt handler. | |
| void | rt_pend_linux_irq (unsigned irq) |
| Pend an IRQ to Linux. | |
| RTAI_SYSCALL_MODE void | usr_rt_pend_linux_irq (unsigned irq) |
| int | rt_request_srq (unsigned label, void(*k_handler)(void), long long(*u_handler)(unsigned long)) |
| Install a system request handler. | |
| int | rt_free_srq (unsigned srq) |
| Uninstall a system request handler. | |
| void | rt_pend_linux_srq (unsigned srq) |
| Append a Linux IRQ. | |
| irqreturn_t | rtai_broadcast_to_local_timers (int irq, void *dev_id, struct pt_regs *regs) |
| int | rt_assign_irq_to_cpu (int irq, unsigned long cpus_mask) |
| int | rt_reset_irq_to_sym_mode (int irq) |
| void | mcf_settimericr (int timer, int level) |
| int | rt_request_timer (void(*handler)(void), unsigned tick, int unused) |
| Install a timer interrupt handler. | |
| void | rt_free_timer (void) |
| Uninstall a timer interrupt handler. | |
| long long | rdtsc () |
| RT_TRAP_HANDLER | rt_set_trap_handler (RT_TRAP_HANDLER handler) |
| int | rtai_8254_timer_handler (struct pt_regs regs) |
| static int | rtai_hirq_dispatcher (unsigned irq, struct pt_regs *regs) |
| RTAI_MODULE_PARM (PrintFpuTrap, int) | |
| RTAI_MODULE_PARM (PrintFpuInit, int) | |
| static int | rtai_trap_fault (unsigned event, void *evdata) |
| static void | rtai_lsrq_dispatcher (unsigned virq) |
| static long long | rtai_usrq_dispatcher (unsigned long srq, unsigned long label) |
| static int | intercept_syscall_prologue (unsigned long event, struct pt_regs *regs) |
| int | usi_SRQ_call (unsigned long srq, unsigned long args, long long *result, unsigned long lsr) |
| asmlinkage int | rtai_syscall_dispatcher (__volatile struct pt_regs pt) |
| void | rtai_uvec_handler (void) |
| DEFINE_VECTORED_ISR (rtai_uvec_handler, rtai_syscall_dispatcher) | |
| desc_struct | rtai_set_gate_vector (unsigned vector, int type, int dpl, void *handler) |
| void | rtai_cmpxchg_trap_handler (void) |
| __asm__ ("rtai_cmpxchg_trap_handler:\n\t""move #0x2700,%sr\n\t""movel %a1@, %d0\n\t""cmpl %d0,%d2\n\t""bnes 1f\n\t""movel %d3,%a1@\n\t""1:\n\t""rte") | |
| void | rtai_xchg_trap_handler (void) |
| __asm__ ("rtai_xchg_trap_handler:\n\t""move #0x2700,%sr\n\t""movel %a1@, %d0\n\t""movel %d2,%a1@\n\t""rte") | |
| void | rtai_reset_gate_vector (unsigned vector, struct desc_struct e) |
| static void | rtai_install_archdep (void) |
| static void | rtai_uninstall_archdep (void) |
| int | rtai_calibrate_8254 (void) |
| void(*)(int) | rt_set_ihook (void(*hookfn)(int)) |
| void | rtai_set_linux_task_priority (struct task_struct *task, int policy, int prio) |
| void | ack_bad_irq (unsigned int irq) |
| int | __rtai_hal_init (void) |
| void | __rtai_hal_exit (void) |
| module_init (__rtai_hal_init) | |
| module_exit (__rtai_hal_exit) | |
| asmlinkage int | rt_printk (const char *fmt,...) |
| asmlinkage int | rt_sync_printk (const char *fmt,...) |
| void * | ll2a (long long ll, char *s) |
| EXPORT_SYMBOL (rtai_realtime_irq) | |
| EXPORT_SYMBOL (rt_request_irq) | |
| EXPORT_SYMBOL (rt_release_irq) | |
| EXPORT_SYMBOL (rt_set_irq_cookie) | |
| EXPORT_SYMBOL (rt_set_irq_retmode) | |
| EXPORT_SYMBOL (rt_startup_irq) | |
| EXPORT_SYMBOL (rt_shutdown_irq) | |
| EXPORT_SYMBOL (rt_enable_irq) | |
| EXPORT_SYMBOL (rt_disable_irq) | |
| EXPORT_SYMBOL (rt_mask_and_ack_irq) | |
| EXPORT_SYMBOL (rt_unmask_irq) | |
| EXPORT_SYMBOL (rt_ack_irq) | |
| EXPORT_SYMBOL (rt_end_irq) | |
| EXPORT_SYMBOL (rt_eoi_irq) | |
| EXPORT_SYMBOL (rt_request_linux_irq) | |
| EXPORT_SYMBOL (rt_free_linux_irq) | |
| EXPORT_SYMBOL (rt_pend_linux_irq) | |
| EXPORT_SYMBOL (usr_rt_pend_linux_irq) | |
| EXPORT_SYMBOL (rt_request_srq) | |
| EXPORT_SYMBOL (rt_free_srq) | |
| EXPORT_SYMBOL (rt_pend_linux_srq) | |
| EXPORT_SYMBOL (rt_assign_irq_to_cpu) | |
| EXPORT_SYMBOL (rt_reset_irq_to_sym_mode) | |
| EXPORT_SYMBOL (rt_request_timer) | |
| EXPORT_SYMBOL (rt_free_timer) | |
| EXPORT_SYMBOL (rdtsc) | |
| EXPORT_SYMBOL (rt_set_trap_handler) | |
| EXPORT_SYMBOL (rt_set_ihook) | |
| EXPORT_SYMBOL (rt_set_irq_ack) | |
| EXPORT_SYMBOL (rtai_calibrate_8254) | |
| EXPORT_SYMBOL (rtai_broadcast_to_local_timers) | |
| EXPORT_SYMBOL (rtai_critical_enter) | |
| EXPORT_SYMBOL (rtai_critical_exit) | |
| EXPORT_SYMBOL (rtai_set_linux_task_priority) | |
| EXPORT_SYMBOL (rtai_linux_context) | |
| EXPORT_SYMBOL (rtai_domain) | |
| EXPORT_SYMBOL (rtai_proc_root) | |
| EXPORT_SYMBOL (rtai_tunables) | |
| EXPORT_SYMBOL (rtai_cpu_lock) | |
| EXPORT_SYMBOL (rtai_cpu_realtime) | |
| EXPORT_SYMBOL (rt_times) | |
| EXPORT_SYMBOL (rt_smp_times) | |
| EXPORT_SYMBOL (rt_printk) | |
| EXPORT_SYMBOL (rt_sync_printk) | |
| EXPORT_SYMBOL (ll2a) | |
| EXPORT_SYMBOL (rtai_set_gate_vector) | |
| EXPORT_SYMBOL (rtai_reset_gate_vector) | |
| EXPORT_SYMBOL (rtai_catch_event) | |
| EXPORT_SYMBOL (rtai_lxrt_dispatcher) | |
| EXPORT_SYMBOL (rt_scheduling) | |
| EXPORT_SYMBOL (rt_linux_hrt_set_mode) | |
| EXPORT_SYMBOL (rt_linux_hrt_next_shot) | |
| void | rt_release_rtc (void) |
| void | rt_request_rtc (long rtc_freq, void *handler) |
| EXPORT_SYMBOL (rt_request_rtc) | |
| EXPORT_SYMBOL (rt_release_rtc) | |
Variables | |
| static unsigned long | rtai_cpufreq_arg = CONFIG_CLOCK_FREQ |
| struct { | |
| volatile int locked | |
| volatile int rqsted | |
| } | rt_scheduling [RTAI_NR_CPUS] |
| static void(*) | rtai_isr_hook (int cpuid) |
| hal_domain_struct | rtai_domain |
| rtai_realtime_irq_s | rtai_realtime_irq [RTAI_NR_IRQS] |
| struct { | |
| unsigned long flags | |
| int count | |
| } | rtai_linux_irq [RTAI_NR_IRQS] |
| struct { | |
| void(* k_handler )(void) | |
| long long(* u_handler )(unsigned long) | |
| unsigned long label | |
| } | rtai_sysreq_table [RTAI_NR_SRQS] |
| static unsigned | rtai_sysreq_virq |
| static unsigned long | rtai_sysreq_map = 1 |
| static unsigned long | rtai_sysreq_pending |
| static unsigned long | rtai_sysreq_running |
| static spinlock_t | rtai_lsrq_lock = SPIN_LOCK_UNLOCKED |
| static volatile int | rtai_sync_level |
| static atomic_t | rtai_sync_count = ATOMIC_INIT(1) |
| static struct desc_struct | rtai_sysvec |
| static struct desc_struct | rtai_cmpxchg_trap_vec |
| static struct desc_struct | rtai_xchg_trap_vec |
| static RT_TRAP_HANDLER | rtai_trap_handler |
| rt_times | rt_times |
| rt_times | rt_smp_times [RTAI_NR_CPUS] |
| rtai_switch_data | rtai_linux_context [RTAI_NR_CPUS] |
| calibration_data | rtai_tunables |
| volatile unsigned long | rtai_cpu_realtime |
| volatile unsigned long | rtai_cpu_lock [2] |
| unsigned long | IsolCpusMask = 0 |
| static int | timer_inuse = 0 |
| unsigned long | io_apic_irqs |
| static int | PrintFpuTrap = 0 |
| static int | PrintFpuInit = 0 |
| long long(*) | rtai_lxrt_dispatcher (unsigned long, unsigned long) |
| static int(*) | sched_intercept_syscall_prologue (struct pt_regs *) |
| void * | _ramvec |
| void * | hal_irq_handler |
| void(*) | rt_linux_hrt_set_mode (int clock_event_mode, void *) |
| int(*) | rt_linux_hrt_next_shot (unsigned long, void *) |
| EXPORT_SYMBOL | ( | rt_release_rtc | ) |
| EXPORT_SYMBOL | ( | rt_request_rtc | ) |
| EXPORT_SYMBOL | ( | rt_linux_hrt_next_shot | ) |
| EXPORT_SYMBOL | ( | rt_linux_hrt_set_mode | ) |
| void(* k_handler)(void) |
| int(*) rt_linux_hrt_next_shot(unsigned long, void *) |
| void(*) rt_linux_hrt_set_mode(int clock_event_mode, void *) |
| long long(* u_handler)(unsigned long) |
1.4.7