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) |