diff --git a/src/sys/include/mpi/mpi.h b/src/sys/include/mpi/mpi.h index 65566dd..7d428e9 100644 --- a/src/sys/include/mpi/mpi.h +++ b/src/sys/include/mpi/mpi.h @@ -50,15 +50,19 @@ typedef struct mpiMessage mpiMessage_t; -mpiMbox_t * mpiCreateMbox(char *); -mpiMbox_t * mpiFindMbox(char *); +int mpiCreateMbox(char *); int mpiPostMessage(char *,uInt32,void *); -int mpiFetchMessage(mpiMbox_t *,mpiMessage_t *); +int mpiFetchMessage(char *,mpiMessage_t *); +int mpiSpam(uInt32,void *); +mpiMbox_t * mpiFindMbox(char *); #endif /*** $Log$ + Revision 1.1 2004/05/25 14:07:01 reddawg + Sorry we can't forget the headers files + END ***/ diff --git a/src/sys/include/ubixos/syscalls.h b/src/sys/include/ubixos/syscalls.h index d6efe27..d2f92f5 100644 --- a/src/sys/include/ubixos/syscalls.h +++ b/src/sys/include/ubixos/syscalls.h @@ -61,6 +61,10 @@ void sysGetTime(); void sysStartSDE(); void sysUnlink(); +void sysMpiCreateMbox(); +void sysMpiPostMessage(); +void sysMpiFetchMessage(); +void sysMpiSpam(); typedef void (*functionPTR)(); @@ -114,6 +118,11 @@ sysGetUptime, /** 46 Get Uptime **/ sysGetTime, /** 47 Get Time **/ sysStartSDE, /** 48 start SDE **/ + invalidCall, /** 49 **/ + sysMpiCreateMbox, /** 50 mpiCreateMbox **/ + sysMpiPostMessage, /** 51 mpiPostMessage **/ + sysMpiFetchMessage, /** 52 mpiFetchMessage **/ + sysMpiSpam, /** 53 mpiSpam **/ }; int totalCalls = sizeof(systemCalls)/sizeof(functionPTR); @@ -122,6 +131,9 @@ /*** $Log$ + Revision 1.2 2004/05/21 15:20:00 reddawg + Cleaned up + END ***/ diff --git a/src/sys/mpi/message.c b/src/sys/mpi/message.c index 1d8644f..ab28fdf 100644 --- a/src/sys/mpi/message.c +++ b/src/sys/mpi/message.c @@ -35,14 +35,14 @@ static mpiMbox_t *mboxList = 0x0; static spinLock_t mpiSpinLock = SPIN_LOCK_INITIALIZER; -mpiMbox_t * mpiCreateMbox(char *name) { +int mpiCreateMbox(char *name) { mpiMbox_t *mbox = 0x0; spinLock(&mpiSpinLock); if (mpiFindMbox(name) != 0x0) { spinUnlock(&mpiSpinLock); - return(0x0); + return(-1); } mbox = (mpiMbox_t *)kmalloc(sizeof(mpiMbox_t)); @@ -62,7 +62,7 @@ } spinUnlock(&mpiSpinLock); - return(mbox); + return(0x0); } mpiMbox_t * mpiFindMbox(char *name) { @@ -78,6 +78,32 @@ return(0x0); } +int mpiSpam(uInt32 type,void *data) { + mpiMbox_t *mbox = 0x0; + mpiMessage_t *message = 0x0; + + spinLock(&mpiSpinLock); + + for (mbox = mboxList;mbox;mbox = mbox->next) { + message = (mpiMessage_t *)kmalloc(sizeof(mpiMessage_t)); + + message->type = type; + kmemcpy(message->data,data,512); + message->next = 0x0; + + if (mbox->msg == 0x0) { + mbox->msg = message; + } + else { + mbox->msgLast->next = message; + mbox->msgLast = message; + } + } + + spinUnlock(&mpiSpinLock); + return(0x0); + } + int mpiPostMessage(char *name,uInt32 type,void *data) { mpiMbox_t *mbox = 0x0; mpiMessage_t *message = 0x0; @@ -109,11 +135,19 @@ return(0x0); } -int mpiFetchMessage(mpiMbox_t *mbox,mpiMessage_t *msg) { +int mpiFetchMessage(char *name,mpiMessage_t *msg) { + mpiMbox_t *mbox = 0x0; mpiMessage_t *tmpMsg = 0x0; spinLock(&mpiSpinLock); + mbox = mpiFindMbox(name); + + if (mbox == 0x0) { + spinUnlock(&mpiSpinLock); + return(-1); + } + if (mbox->msg == 0x0) { spinUnlock(&mpiSpinLock); return(-1); @@ -133,6 +167,9 @@ /*** $Log$ + Revision 1.1 2004/05/25 14:03:22 reddawg + First insertion of the MPI into our kernel + END ***/