Skip to content
Snippets Groups Projects
syscall.c 2.34 KiB
Newer Older
#include <syscall.h>
#include <context-switch.h>
#include <bwio.h>
int Create (AP* Args) {
Tom Feng's avatar
Tom Feng committed
  //bwprintf(COM2,"Create: Arg location:%d\n\r",Args);
Tom Feng's avatar
Tom Feng committed
  asm volatile ("swi 0\n\t" );
aht2nguy's avatar
aht2nguy committed
//  bwprintf(COM2,"Back to Create\n\r");
Tom Feng's avatar
Tom Feng committed
  register int RetVal asm("r0");
  int Return = RetVal;
  return Return;
Tom Feng's avatar
Tom Feng committed
  int Address = (int )(&MyTid);
  //bwprintf(COM2,"MyTid Address: %d\n\r",Address);
  asm volatile ("swi 1\n\t");
  register int RetVal asm("r0");
  int R = RetVal;
  //bwprintf(COM2,"Back to MyTid, my tid is %d, My Address is %d\n\r",R);
Tom Feng's avatar
Tom Feng committed
  return R;
    asm volatile ("swi 2\n\t");
    register int RetVal asm("r0");
    return RetVal;
Tom Feng's avatar
Tom Feng committed
  //bwprintf(COM2,"USR: Pass()\n\r");
  asm volatile ("swi 3\n\t");
Tom Feng's avatar
Tom Feng committed
  //bwprintf(COM2,"Before SWI exit\n\r");
  asm volatile ("swi 4\n\t");
}
aht2nguy's avatar
aht2nguy committed

int ActualSend(AP* Args){
   asm volatile ("swi 5\n\t");
   register int RetVal asm("r0");
   int R = RetVal;
   return R;
}

// tid is that of the one its sending to
aht2nguy's avatar
aht2nguy committed
int Send (int TaskID, void* Msg, int MsgLen, void* Reply, int ReplyLen) {
  AP Args;
  Args.arg0 = (void *)(TaskID);
Tom Feng's avatar
Tom Feng committed
  Args.arg1 = Msg;
  bwprintf(COM2,"Send_USR: Msg: %d\n\r",Msg);
  Args.arg2 = (void *)(MsgLen);
Tom Feng's avatar
Tom Feng committed
  Args.arg3 = Reply;
  Args.arg4 = (void *)(ReplyLen);

Tom Feng's avatar
Tom Feng committed
  int MyID = MyTid();
  bwprintf(COM2,"Send: Task %d send MsgLen %d\n\r",TaskID,MsgLen);
  int Return = ActualSend(&Args);
  
  return Return;
}

int ActualReceive(AP* Args){
  asm volatile ("swi 6\n\t");
antnh6@gmail.com's avatar
antnh6@gmail.com committed
  register int RetVal asm("r0");
  int Return = RetVal;
  return Return;
aht2nguy's avatar
aht2nguy committed
}

int Receive (int TaskID, void* Msg, int MsgLen) {
  AP Args;
  Args.arg0 = (void *)(TaskID);
  Args.arg1 = (void *)(Msg);
  Args.arg2 = (void *)(MsgLen);
  int Return = ActualReceive(&Args);
  return Return;
}
int ActualReplay(AP* Args){
  asm volatile ("swi 7\n\t");
antnh6@gmail.com's avatar
antnh6@gmail.com committed
  register int RetVal asm("r0");
  int Return = RetVal;
  return Return;
aht2nguy's avatar
aht2nguy committed
}

/* 
The calling task and the sender return at the same logical time. If they are of the same priority the sender runs first.
*/
aht2nguy's avatar
aht2nguy committed
int Reply (int TaskID, void* Reply, int ReplyLen) {
  AP Args;
  Args.arg0 = (void *)(TaskID);
  Args.arg1 = (void *)(Reply);
  Args.arg2 = (void *)(ReplyLen);

  int Return = ActualReplay(&Args);
antnh6@gmail.com's avatar
antnh6@gmail.com committed
  return Return;
aht2nguy's avatar
aht2nguy committed
}
Tom Feng's avatar
Tom Feng committed

int RecordNameServer(AP* Args){
  asm volatile("swi 8\n\t");
  register int RetVal asm("r0");
  int Return = RetVal;
  return Return;
}