minix/lib/i386/rts/_ipc.s

119 lines
2.6 KiB
ArmAsm
Raw Normal View History

2005-04-21 16:53:53 +02:00
.sect .text; .sect .rom; .sect .data; .sect .bss
.define __echo, __alert, __send, __nb_send, __receive, __nb_receive, __sendrec, __notify
2005-04-21 16:53:53 +02:00
! See src/kernel/ipc.h for C definitions
ECHO = 0
2005-04-21 16:53:53 +02:00
SEND = 1
RECEIVE = 2
SENDREC = 3 + 32 ! flags 0x20 to request fresh answer
NOTIFY = 4
ALERT = 5
NB_SEND = 1 + 16 ! flags 0x10 to prevent blocking
NB_RECEIVE = 2 + 16 ! flags 0x10 to prevent blocking
SYSVEC = 33 ! trap to kernel
2005-04-21 16:53:53 +02:00
SRC_DST = 8 ! source/ destination process
ECHO_MESS = 8 ! doesn't have SRC_DST
MESSAGE = 12 ! message pointer
2005-04-21 16:53:53 +02:00
!*========================================================================*
! IPC assembly routines *
2005-04-21 16:53:53 +02:00
!*========================================================================*
! all message passing routines save ebp, but destroy eax and ecx.
.define __echo, __alert, __send, __nb_send, __receive, __nb_receive, __sendrec, __notify
2005-04-21 16:53:53 +02:00
.sect .text
__send:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = dest-src
2005-04-21 16:53:53 +02:00
mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, SEND ! _send(dest, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__nb_send:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = dest-src
2005-04-21 16:53:53 +02:00
mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, NB_SEND ! _nb_send(dest, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__receive:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = dest-src
2005-04-21 16:53:53 +02:00
mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, RECEIVE ! _receive(src, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__nb_receive:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = dest-src
2005-04-21 16:53:53 +02:00
mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, NB_RECEIVE ! _nb_receive(src, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__sendrec:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = dest-src
2005-04-21 16:53:53 +02:00
mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, SENDREC ! _sendrec(srcdest, ptr)
2005-04-21 16:53:53 +02:00
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__notify:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = dest-src
mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, NOTIFY ! _notify(srcdest, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__alert:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! ebx = destination
mov ecx, ALERT ! _echo(srcdest, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__echo:
push ebp
mov ebp, esp
push ebx
mov ebx, ECHO_MESS(ebp) ! ebx = message pointer
mov ecx, ECHO ! _echo(srcdest, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret