Added sendnb and senda, removed echo and _ipcnew.s.

This commit is contained in:
Philip Homburg 2007-04-23 12:11:03 +00:00
parent 35c3f52d99
commit e9899f3c86
3 changed files with 20 additions and 83 deletions

View File

@ -7,7 +7,6 @@ LIBRARIES=libc
libc_FILES=" \ libc_FILES=" \
__sigreturn.s \ __sigreturn.s \
_ipc.s \ _ipc.s \
_ipcnew.s \
brksize.s" brksize.s"
STARTFILES="\ STARTFILES="\

View File

@ -1,23 +1,24 @@
.sect .text; .sect .rom; .sect .data; .sect .bss .sect .text; .sect .rom; .sect .data; .sect .bss
.define __echo, __notify, __send, __receive, __sendrec .define __notify, __send, __senda, __sendnb, __receive, __sendrec
! See src/kernel/ipc.h for C definitions ! See src/kernel/ipc.h for C definitions
SEND = 1 SEND = 1
RECEIVE = 2 RECEIVE = 2
SENDREC = 3 SENDREC = 3
NOTIFY = 4 NOTIFY = 4
ECHO = 8 SENDNB = 5
SENDA = 16
SYSVEC = 33 ! trap to kernel SYSVEC = 33 ! trap to kernel
SRC_DST = 8 ! source/ destination process SRC_DST = 8 ! source/ destination process
ECHO_MESS = 8 ! echo doesn't have SRC_DST MSGTAB = 8 ! message table
MESSAGE = 12 ! message pointer MESSAGE = 12 ! message pointer
TABCOUNT = 12 ! number of entries in message table
!*========================================================================* !*========================================================================*
! IPC assembly routines * ! IPC assembly routines *
!*========================================================================* !*========================================================================*
! all message passing routines save ebp, but destroy eax and ecx. ! all message passing routines save ebp, but destroy eax and ecx.
.define __echo, __notify, __send, __receive, __sendrec
.sect .text .sect .text
__send: __send:
push ebp push ebp
@ -66,14 +67,26 @@ __notify:
pop ebp pop ebp
ret ret
__echo: __sendnb:
push ebp push ebp
mov ebp, esp mov ebp, esp
push ebx push ebx
mov ebx, ECHO_MESS(ebp) ! ebx = message pointer mov eax, SRC_DST(ebp) ! eax = dest-src
mov ecx, ECHO ! _echo(srcdest, ptr) mov ebx, MESSAGE(ebp) ! ebx = message pointer
mov ecx, SENDNB ! _sendnb(dest, ptr)
int SYSVEC ! trap to the kernel int SYSVEC ! trap to the kernel
pop ebx pop ebx
pop ebp pop ebp
ret ret
__senda:
push ebp
mov ebp, esp
push ebx
mov eax, TABCOUNT(ebp) ! eax = count
mov ebx, MSGTAB(ebp) ! ebx = table
mov ecx, SENDA ! _senda(table, count)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret

View File

@ -1,75 +0,0 @@
.sect .text; .sect .rom; .sect .data; .sect .bss
.define __ipc_request, __ipc_reply, __ipc_notify, __ipc_receive
! See src/kernel/ipc.h for C definitions.
IPC_REQUEST = 16 ! each gets a distinct bit
IPC_REPLY = 32
IPC_NOTIFY = 64
IPC_RECEIVE = 128
SYSVEC = 33 ! trap to kernel
! Offsets of arguments relative to stack pointer.
SRC_DST = 8 ! source/ destination process
SEND_MSG = 12 ! message pointer for sending
EVENT_SET = 12 ! notification event set
RECV_MSG = 16 ! message pointer for receiving
!*========================================================================*
! IPC assembly routines *
!*========================================================================*
! all message passing routines save ebp, but destroy eax, ecx, and edx.
.define __ipc_request, __ipc_reply, __ipc_notify, __ipc_receive
.sect .text
__ipc_request:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = destination
mov ebx, SEND_MSG(ebp) ! ebx = message pointer
mov ecx, IPC_REQUEST ! _ipc_request(dst, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__ipc_reply:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = destination
mov ebx, SEND_MSG(ebp) ! ebx = message pointer
mov ecx, IPC_REPLY ! _ipc_reply(dst, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__ipc_receive:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! eax = source
mov edx, EVENT_SET(ebp) ! ebx = event set
mov ebx, RCV_MSG(ebp) ! ebx = message pointer
mov ecx, IPC_RECEIVE ! _ipc_receive(src, events, ptr)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret
__ipc_notify:
push ebp
mov ebp, esp
push ebx
mov eax, SRC_DST(ebp) ! ebx = destination
mov edx, EVENT_SET(ebp) ! edx = event set
mov ecx, IPC_NOTIFY ! _ipc_notify(dst, events)
int SYSVEC ! trap to the kernel
pop ebx
pop ebp
ret