/************************************************************************************** Copyright (c) 2002 The UbixOS Project $Id$ **************************************************************************************/ #include <ubixos/exec.h> #include <ubixos/schedule.h> #include <vmm/paging.h> void execThread(void (* tproc)(void),int stack,char *descr) { int pid = 0; pid = findTask(); taskList[pid].tss.back_link = 0x0; taskList[pid].tss.esp0 = stack; taskList[pid].tss.ss0 = 0x10; taskList[pid].tss.esp1 = 0x0; taskList[pid].tss.ss1 = 0x10; taskList[pid].tss.esp2 = 0x0; taskList[pid].tss.ss2 = 0x10; taskList[pid].tss.cr3 = (unsigned int)pageDirectory; taskList[pid].tss.eip = (unsigned int)tproc; taskList[pid].tss.eflags = 0x206; taskList[pid].tss.esp = stack; taskList[pid].tss.ebp = stack; taskList[pid].tss.esi = 0x0; taskList[pid].tss.edi = 0x0; taskList[pid].tss.es = 0x10; taskList[pid].tss.cs = 0x08; taskList[pid].tss.ss = 0x10; taskList[pid].tss.ds = 0x10; taskList[pid].tss.fs = 0x10; taskList[pid].tss.gs = 0x10; taskList[pid].tss.ldt = 0x18; taskList[pid].tss.trace_bitmap = 0x80000000; taskList[pid].status = RUNABLE; }