Lines Matching +full:global +full:- +full:regs
2 * Low-level system-call handling, trap handlers and context-switching
4 * Copyright (C) 2008-2009 Michal Simek <[email protected]>
5 * Copyright (C) 2008-2009 PetaLogix
25 #include <asm/asm-offsets.h>
41 .global syscall_debug_table
160 /* Define how to call high-level functions. With MMU, virtual mode must be
161 * enabled when calling the high-level function. Clobbers R11.
189 swi r11, r1, PT_R11; /* save clobbered regs after rval */\
223 lwi r11, r1, PT_R11; /* restore clobbered regs after rval */\
263 /* Kernel-mode state save. */ \
264 /* Reload kernel stack-ptr. */ \
268 /* addik r1, r1, -PT_SIZE; */ \
269 addik r1, r1, CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - PT_SIZE; \
273 1: /* User-mode state save. */ \
280 /* addik r1, r1, -PT_SIZE; */ \
281 addik r1, r1, THREAD_SIZE + CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - PT_SIZE; \
285 swi r0, r1, PT_MODE; /* Was in user-mode. */ \
295 addik r1, r1, -PT_SIZE
313 addik r1, r1, -PT_SIZE
336 * Syscall number in r12, args in r5-r10
353 addik r1, r1, -PT_SIZE; /* Make room on the stack. */
358 swi r0, r1, PT_MODE; /* Was in user-mode. */
367 /* where the trap should return need -8 to adjust for rtsd r15, 8*/
382 addik r3, r0, -ENOSYS
402 addi r11, r12, -__NR_syscalls;
406 add r12, r12, r12; /* convert num -> ptr */
423 /* where the trap should return need -8 to adjust for rtsd r15, 8 */
424 addi r15, r0, ret_from_trap-8
430 addi r3, r0, -ENOSYS;
433 /* We re-enable BIP bit before state restore */
469 addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */
482 lwi r1, r1, PT_R1 - PT_SIZE;/* Restore user stack pointer. */
493 TRAP_return: /* Make global symbol for debugging */
515 addk r5, r0, r19 /* ... and argument - in r19 */
530 addik r17, r17, -4
532 /* PC, before IRQ/trap - this is one instruction above */
537 /* where the trap should return need -8 to adjust for rtsd r15, 8 */
538 addik r15, r0, ret_from_exc - 8
543 addik r5, r1, 0 /* parameter struct pt_regs * regs */
568 /* PC, before IRQ/trap - this is one instruction above */
571 /* where the trap should return need -8 to adjust for rtsd r15, 8 */
572 addik r15, r0, ret_from_exc-8
576 addik r7, r1, 0 /* parameter struct pt_regs * regs */
591 * void do_page_fault(struct pt_regs *regs,
595 /* data and intruction trap - which is choose is resolved int fault.c */
598 /* PC, before IRQ/trap - this is one instruction above */
601 /* where the trap should return need -8 to adjust for rtsd r15, 8 */
602 addik r15, r0, ret_from_exc-8
606 addik r5, r1, 0 /* parameter struct pt_regs * regs */
610 /* PC, before IRQ/trap - this is one instruction above */
613 /* where the trap should return need -8 to adjust for rtsd r15, 8 */
614 addik r15, r0, ret_from_exc-8
618 addik r5, r1, 0 /* parameter struct pt_regs * regs */
647 * points (for instance, call-saved registers (because the normal
648 * C-compiler calling sequence in the kernel makes sure they're
649 * preserved), and call-clobbered registers in the case of
654 addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */
668 lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer. */
679 EXC_return: /* Make global symbol for debugging */
690 * The stack-pointer (r1) should have already been saved to the memory
703 /* Kernel-mode state save. */
707 /* MS: Make room on the stack -> activation record */
708 addik r1, r1, -PT_SIZE;
711 swi r1, r1, PT_MODE; /* 0 - user mode, 1 - kernel mode */
713 /* User-mode state save. */
721 addik r1, r1, -PT_SIZE;
753 addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */
767 lwi r1, r1, PT_R1 - PT_SIZE;
792 IRQ_return: /* MS: Make global symbol for debugging */
841 addik r3, r3, -1
846 /* return from reset need -8 to adjust for rtsd r15, 8 */
847 addik r15, r0, ret_from_reset - 8
854 /* MS: Restore all regs */
873 addik r1, r1, -PT_SIZE - 36
920 addik r3, r3, -1
924 /* return from break need -8 to adjust for rtsd r15, 8 */
925 addik r15, r0, ret_from_break - 8
930 /* flush the d-cache */
935 * To make sure microblaze i-cache is in a proper state
936 * invalidate the i-cache.
962 /* MS: Kernel-mode state save - kgdb */
963 lwi r1, r0, TOPHYS(PER_CPU(ENTRY_SP)); /* Reload kernel stack-ptr*/
966 addik r1, r1, CONFIG_KERNEL_BASE_ADDR - CONFIG_KERNEL_START - PT_SIZE;
968 /* save all regs to pt_reg structure */
982 addik r11, r1, CONFIG_KERNEL_START - CONFIG_KERNEL_BASE_ADDR + PT_SIZE;
984 /* MS: r31 - current pointer isn't changed */
996 /* MS: User-mode state save - gdb */
1003 addik r1, r1, -PT_SIZE; /* Make room on the stack. */
1006 swi r0, r1, PT_MODE; /* Was in user-mode. */
1022 /* MS: Return to user space - gdb */
1039 addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */
1048 /* MS: Restore all regs */
1051 lwi r1, r1, PT_R1 - PT_SIZE; /* Restore user stack pointer */
1052 DBTRAP_return_user: /* MS: Make global symbol for debugging */
1056 /* MS: Return to kernel state - kgdb */
1059 /* MS: Restore all regs */
1065 DBTRAP_return_kernel: /* MS: Make global symbol for debugging */
1089 /* save non-volatile registers */
1112 /* update r31, the current-give me pointer to task which will be next */
1121 /* non-volatile registers */
1155 .global xmb_inject_err
1161 addik r1, r1, -PT_SIZE
1191 .global xmb_manager_dev
1192 .global xmb_manager_baseaddr
1193 .global xmb_manager_crval
1194 .global xmb_manager_callback
1195 .global xmb_manager_reset_callback
1196 .global xmb_manager_stackpointer
1219 .global xmb_manager_register
1283 syscall_table_size=(.-sys_call_table)
1302 .global microblaze_trap_handlers