//_________________________________________________________________________ // // Project: Moonlight // Module: Microkernel declarations for user code // Version: 1.0 // File name: mmkernel.h // Author: Enrique Velasco Diaz //_________________________________________________________________________ // // Common helper macros #ifndef max #define max(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef min #define min(a,b) (((a) < (b)) ? (a) : (b)) #endif #define DWORD unsigned //_________________________________________________________________________ // // API prototypes and associated constants void mK_yield(void); //_________________________________________________________________________ // void mK_init(void); void mK_start(void); void mK_end(void); //_________________________________________________________________________ // typedef struct { void *code; // address of process code starting point unsigned stack_size; // size of the stack area unsigned char default_priority; unsigned char current_priority; char *name; // process' symbolic name }TASK_INFO; int mK_create_task(TASK_INFO *settings); #define mKCREATPROC_NOMEM -1 int mK_local_init(void); //_________________________________________________________________________ // int mK_self_pid(void); //_________________________________________________________________________ // int mK_get_task_info(int pid, TASK_INFO *info); #define mKGETINFO_OK 0 #define mKGETINFO_BADPID -1 //_________________________________________________________________________ // int mK_set_task_info(int pid, TASK_INFO *info); #define mKSETINFO_OK 0 #define mKSETINFO_BADPID -1 //_________________________________________________________________________ // void mK_kill_task(void); //_________________________________________________________________________ // void mK_enter_critical(void); void mK_exit_critical(void); //_________________________________________________________________________ // int mK_create_semaphore(int value, int maximum); #define mKCREATSM_NOMEM -1 #define mKCREATSM_BADVALUE -2 #define mKCREATSM_BADCEILING -3 //_________________________________________________________________________ // int mK_wait_semaphore(int semaphore); #define mKWAITSM_SIGNAL 0 #define mKWAITSM_BADNUM -1 //_________________________________________________________________________ // int mK_signal_semaphore(int semaphore); #define mKSIGNALSM_OK 0 #define mKSIGNALSM_BADNUM -1 #define mKSIGNALSM_OVERFLOW -2 //_________________________________________________________________________ // int mK_delete_semaphore(int semaphore); #define mKDELSM_OK 0 #define mKDELSM_BADNUM -1 #define mKDELSM_BUSY -2 //_________________________________________________________________________ // typedef struct { int seconds; int minutes; int hours; int monthday; int month; int year; }mKTIME; void mK_time_of_day(mKTIME *buffer); //_________________________________________________________________________ // unsigned int mK_get_systicks(void); //_________________________________________________________________________ // void *mK_malloc(int size); //_________________________________________________________________________ // int mK_mfree(void *block); #define mKMFREE_OK 0 #define mKMFREE_BADPTR -1 //_________________________________________________________________________ // #define mKLOCAL_MACHINE -1 int mK_non_blocking_send(int machine, int receiver, void *contents, int length); #define mKNBSEND_OK 0 #define mKNBSEND_BADPID -1 #define mKNBSEND_OVERFLOW -2 //_________________________________________________________________________ // int mK_blocking_send(int machine, int receiver, void *message_contents, int message_length, void *reply_contents, int *reply_length); #define mKBKSEND_OK 0 #define mKBKSEND_BADPID -1 #define mKBKSEND_OVERFLOW -2 //_________________________________________________________________________ // int mK_receive(int *machine, int *pid, void *contents, int *length, int *reply_requested, DWORD delay); #define mKRECEIVE_ARRIVAL 0 #define mKRECEIVE_ELAPSED 1 #define mKRECEIVE_NOTHING 2 #define mKWAIT_FOREVER -1 #define mKNOWAIT -2 //_________________________________________________________________________ // int mK_respond(int machine, int receiver, void *contents, int length); #define mKRESPOND_OK 0 #define mKRESPOND_BADPID -1 #define mKRESPOND_BADSTATE -2 //_________________________________________________________________________ // int mK_freeze(int pid); #define mKFREEZE_OK 0 #define mKFREEZE_BADPID -1 //_________________________________________________________________________ // int mK_unfreeze(int pid); #define mKUNFREEZE_OK 0 #define mKUNFREEZE_BADPID -1 #define mKUNFREEZE_NOFROZEN -2 //_________________________________________________________________________ // typedef struct { // general information int how_many; // total number of tasks in the system // task profiler info int times_entered; int time_running; // other status info int process_state; // detailed state #define READY 1 #define RUNNING 2 #define PENDING 3 #define RECEIVING 4 #define EXPECTING 5 #define FROZEN 6 unsigned stack_size; unsigned char default_priority; unsigned char current_priority; char *symbolic_name; }mKTASK_INFO; int mK_get_task_snapshot(int task, mKTASK_INFO *buffer); #define mKGTASKINFO_OK 0 #define mKGTASKINFO_BADPID -1 //_________________________________________________________________________ // typedef struct { short value; short maximum; int *waiting_tasks; // a large enough space must be previously allocated }mKSEM_INFO; int mK_get_semaphore_snapshot(int semaphore, mKSEM_INFO *buffer); #define mKGSEMINFO_OK 0 #define mKGSEMINFO_BADNUM -1 //_________________________________________________________________________ // int mK_profiler_control(int command, int task); #define mKPROF_ON 1 #define mKPROF_OFF 0 #define mKPROF_RESET 2 #define mKPROFCNT_OK 0 #define mKPROFCNT_BADCOMMAND -1 #define mKPROFCNT_BADPID -2 //_________________________________________________________________________ // typedef struct { void *block_address; int block_size; int owner_task; }mKBLOCK_INFO; mKBLOCK_INFO *mK_heap_view(void); //_________________________________________________________________________ //