Added sendnb and senda, removed echo and _ipcnew.s.
This commit is contained in:
parent
35c3f52d99
commit
e9899f3c86
@ -7,7 +7,6 @@ LIBRARIES=libc
|
||||
libc_FILES=" \
|
||||
__sigreturn.s \
|
||||
_ipc.s \
|
||||
_ipcnew.s \
|
||||
brksize.s"
|
||||
|
||||
STARTFILES="\
|
||||
|
||||
@ -1,23 +1,24 @@
|
||||
.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
|
||||
SEND = 1
|
||||
RECEIVE = 2
|
||||
SENDREC = 3
|
||||
NOTIFY = 4
|
||||
ECHO = 8
|
||||
SENDNB = 5
|
||||
SENDA = 16
|
||||
SYSVEC = 33 ! trap to kernel
|
||||
|
||||
SRC_DST = 8 ! source/ destination process
|
||||
ECHO_MESS = 8 ! echo doesn't have SRC_DST
|
||||
MSGTAB = 8 ! message table
|
||||
MESSAGE = 12 ! message pointer
|
||||
TABCOUNT = 12 ! number of entries in message table
|
||||
|
||||
!*========================================================================*
|
||||
! IPC assembly routines *
|
||||
!*========================================================================*
|
||||
! all message passing routines save ebp, but destroy eax and ecx.
|
||||
.define __echo, __notify, __send, __receive, __sendrec
|
||||
.sect .text
|
||||
__send:
|
||||
push ebp
|
||||
@ -66,14 +67,26 @@ __notify:
|
||||
pop ebp
|
||||
ret
|
||||
|
||||
__echo:
|
||||
__sendnb:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ebx
|
||||
mov ebx, ECHO_MESS(ebp) ! ebx = message pointer
|
||||
mov ecx, ECHO ! _echo(srcdest, ptr)
|
||||
mov eax, SRC_DST(ebp) ! eax = dest-src
|
||||
mov ebx, MESSAGE(ebp) ! ebx = message pointer
|
||||
mov ecx, SENDNB ! _sendnb(dest, ptr)
|
||||
int SYSVEC ! trap to the kernel
|
||||
pop ebx
|
||||
pop ebp
|
||||
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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user