X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fmessages.c;h=b9d7a6fd189352604197ea73747451454c661d5c;hb=HEAD;hp=b70e07887cde114fa010a47ad7da3f347b7f8d16;hpb=a802f97ea5cbfd37ff7958cb34bdc9ff4b092c33;p=tpg%2Facess2.git diff --git a/Kernel/messages.c b/Kernel/messages.c deleted file mode 100644 index b70e0788..00000000 --- a/Kernel/messages.c +++ /dev/null @@ -1,128 +0,0 @@ -/* - * AcessOS Microkernel Version - * messages.c - */ -#define DEBUG 1 -#include -#include -#include -#include - -// === IMPORTS === -extern tShortSpinlock glThreadListLock; - -// === CODE === -/** - * \fn int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) - * \brief Send an IPC message - * \param Err Pointer to the errno variable - * \param Dest Destination Thread - * \param Length Length of the message - * \param Data Message data - */ -int Proc_SendMessage(Uint *Err, Uint Dest, int Length, void *Data) -{ - tThread *thread; - tMsg *msg; - - ENTER("pErr iDest iLength pData", Err, Dest, Length, Data); - - if(Length <= 0 || !Data) { - *Err = -EINVAL; - LEAVE_RET('i', -1); - } - - // Get thread - thread = Threads_GetThread( Dest ); - - // Error check - if(!thread) LEAVE_RET('i', -1); - - // Get Spinlock - SHORTLOCK( &thread->IsLocked ); - - // Check if thread is still alive - if(thread->Status == THREAD_STAT_DEAD) { - SHORTREL( &thread->IsLocked ); - LEAVE_RET('i', -1); - } - - // Create message - msg = malloc( sizeof(tMsg)+Length ); - msg->Next = NULL; - msg->Source = Proc_GetCurThread()->TID; - msg->Length = Length; - memcpy(msg->Data, Data, Length); - - // If there are already messages - if(thread->LastMessage) { - thread->LastMessage->Next = msg; - thread->LastMessage = msg; - } else { - thread->Messages = msg; - thread->LastMessage = msg; - } - - SHORTREL(&thread->IsLocked); - - SHORTLOCK(&glThreadListLock); - LOG("Waking %p (%i %s)", thread, thread->TID, thread->ThreadName); - Threads_Wake( thread ); - SHORTREL(&glThreadListLock); - - LEAVE_RET('i', 0); -} - -/** - * \fn int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) - * \brief Gets a message - * \param Err Pointer to \a errno - * \param Source Where to put the source TID - * \param Buffer Buffer to place the message data (set to NULL to just get message length) - */ -int Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer) -{ - int ret; - void *tmp; - tThread *cur = Proc_GetCurThread(); - - // Check if queue has any items - if(!cur->Messages) { - return 0; - } - - SHORTLOCK( &cur->IsLocked ); - - if(Source) - *Source = cur->Messages->Source; - - // Get message length - if( !Buffer ) { - ret = cur->Messages->Length; - SHORTREL( &cur->IsLocked ); - return ret; - } - - // Get message - if(Buffer != GETMSG_IGNORE) - { - if( !CheckMem( Buffer, cur->Messages->Length ) ) - { - *Err = -EINVAL; - SHORTREL( &cur->IsLocked ); - return -1; - } - memcpy(Buffer, cur->Messages->Data, cur->Messages->Length); - } - ret = cur->Messages->Length; - - // Remove from list - tmp = cur->Messages; - cur->Messages = cur->Messages->Next; - - SHORTREL( &cur->IsLocked ); - - free(tmp); // Free outside of lock - - return ret; -}