Skip to content
Snippets Groups Projects
types.h 2.02 KiB
#ifndef TYPES_H
#define TYPES_H

#define MAX_NUM_PRIORITY 8
#define MAX_NUM_TD 60

#define KERNEL_STACK (0xFFFFFFFF - 0x200000)
#define STACK_SIZE 0x80000 // 512 KB
#define USER_STACK_TOP (0x1E00000)

#define NULL 0

#define NAMESERVER_ID 6
#define NS_MESSAGE_MAX_LENGTH 16

#define NAME_LENGTH_MAX 16

#define HASH_SIZE

typedef enum NameServerMessageType {
    WhoIs,
    RegisterAs
} NSMsgType;

typedef struct NameServerRequest {
    char Msg[NS_MESSAGE_MAX_LENGTH];
    NSMsgType MsgType;
} NSReq;

typedef struct ArgumentPack{
  void * arg0;
  void * arg1;
  void * arg2;
  void * arg3;
}AP;


typedef enum taskstate {
    Active, 
    Ready, 
    Blocked,
    Init,
    Zombie,
    SendBlocked,
    ReceiveBlocked,
    ReplyBlocked
} State;

typedef enum prioritylvl {
    Prio0,
    Prio1,
    Prio2,
    Prio3,
    Prio4,
    Prio5,
    Prio6,
    Prio7
} PrioLvl;

struct taskDescriptor {

  int* sp; //sp_usr
  int* lr; // lr_svc
  int spsr; //user's cpsr
  int RetVal; // passing kernel's return value to user
  AP* Args; //argument that user gives kernel
  int TaskID;
  int ParentID;
  State TaskState;
  PrioLvl TaskPriority;
  struct taskDescriptor* NextFree;
  struct taskDescriptor* NextInPQ;
};

typedef struct taskDescriptor TD;

typedef struct
{
  TD* Head;
  TD* Tail;
  int Length;
} TDPQ;

typedef struct kernel {
    TD* Active;
    TDPQ ArrayPQ[MAX_NUM_PRIORITY];
    TD Tasks[MAX_NUM_TD];
     //index is TaskID; value of 1 = alive
    // a free list of pointers to free TDs. This might take the form of bits set in a couple of words. WHAT?
    // a structure for keeping the request currently being serviced, including its arguments.
    TD* FirstOfFreeList;
    TD* LastOfFreeList;
    int NumTDsAvail;
  int NameServerID;
} KernelStruct;

typedef enum syscall {
    SYS_Create,
    SYS_MyTid,
    SYS_ParentTid,
    SYS_Pass,
    SYS_Exit,
    SYS_Send,
    SYS_Receive,
    SYS_Reply,
    SYS_RecordNS,
    SYS_WHOIS,
    SYS_REGAS,
} Syscall;

typedef struct hash_table{
  int *TidSequence;
  char **NameSequence;
  int size;
}HT;

#endif