/kernel/trunk/arch/amd64/src/ddi/ddi.c |
---|
100,20 → 100,6 |
return 0; |
} |
/** Enable/disable interrupts form syscall |
* |
* @param enable If non-zero, interrupts are enabled, otherwise disabled |
* @param flags RFLAGS register |
*/ |
__native ddi_int_control_arch(__native enable, __native *flags) |
{ |
if (enable) |
*flags |= RFLAGS_IF; |
else |
*flags &= ~RFLAGS_IF; |
return 0; |
} |
/** Install I/O Permission bitmap. |
* |
* Current task's I/O permission bitmap, if any, is installed |
/kernel/trunk/arch/amd64/src/asm_utils.S |
---|
244,11 → 244,7 |
sti |
movq %r9, %rcx # Exchange last parameter as a third |
cmp $2, %r8 # Is this SYS_INT_CONTROL |
je sys_int_ctrl |
call syscall_handler |
sys_end: |
cli # We will be touching stack pointer |
popq %r11 |
255,13 → 251,8 |
popq %rcx |
movq 0(%rsp), %rsp |
sysretq |
sys_int_ctrl: |
mov %rsp, %rsi # Pointer to flags |
call ddi_int_control |
jmp sys_end |
.data |
.global interrupt_handler_size |
/kernel/trunk/arch/mips32/src/start.S |
---|
253,15 → 253,10 |
sw $t2,SS_STATUS($sp) |
mtc0 $t0, $status |
li $t4, 2 # SYS_INT_CONTROL |
beq $t4, $v0, sysc_int_control |
nop |
# CALL Syscall handler |
jal syscall_handler |
sw $v0, SS_ARG4($sp) # save v0 - arg4 to stack |
sysc_exit: |
# restore status |
mfc0 $t0, $status |
lw $t1,SS_STATUS($sp) |
281,14 → 276,7 |
lw $sp,SS_SP($sp) # restore sp |
eret |
sysc_int_control: |
jal ddi_int_control |
addi $a1, $sp, SS_STATUS |
j sysc_exit |
nop |
tlb_refill_handler: |
KERNEL_STACK_TO_K0 |
sub $k0, REGISTER_SPACE |
/kernel/trunk/arch/mips32/src/ddi/ddi.c |
---|
48,17 → 48,3 |
{ |
return 0; |
} |
/** Enable/disable interrupts for syscall |
* |
* @param enable If non-zero, interrupts are enabled, otherwise disabled |
* @param flags CP0 status register |
*/ |
__native ddi_int_control_arch(__native enable, __native *flags) |
{ |
if (enable) |
*flags |= cp0_status_ie_enabled_bit; |
else |
*flags &= ~cp0_status_ie_enabled_bit; |
return 0; |
} |
/kernel/trunk/arch/ia32/src/asm.S |
---|
86,7 → 86,7 |
# The handlers setup data segment registers |
# and call exc_dispatch(). |
# |
#define INTERRUPT_ALIGN 128 |
#define INTERRUPT_ALIGN 64 |
.macro handler i n |
.ifeq \i-0x30 # Syscall handler |
108,11 → 108,8 |
movw %ax,%es |
sti |
cmp $2, %edi # Is this SYS_INT_CONTROL? |
je sys_int_ctrl |
call syscall_handler # syscall_handler(ax,cx,dx,si,di) |
sysc_end: |
cli |
addl $20, %esp # clean-up of parameters |
123,12 → 120,6 |
CLEAR_NT_FLAG |
iret |
sys_int_ctrl: # Interrupt control |
mov %esp, %eax |
add $44, %eax |
mov %eax, 4(%esp) # Pointer to flags - 2nd argument |
call ddi_int_control |
jmp sysc_end |
.else |
/* |
* This macro distinguishes between two versions of ia32 exceptions. |
/kernel/trunk/arch/ia32/src/ddi/ddi.c |
---|
101,20 → 101,6 |
return 0; |
} |
/** Enable/disable interrupts for syscall |
* |
* @param enable If non-zero, interrupts are enabled, otherwise disabled |
* @param flags EFLAGS flags register |
*/ |
__native ddi_int_control_arch(__native enable, __native *flags) |
{ |
if (enable) |
*flags |= EFLAGS_IF; |
else |
*flags &= ~EFLAGS_IF; |
return 0; |
} |
/** Install I/O Permission bitmap. |
* |
* Current task's I/O permission bitmap, if any, is installed |