/**************************************************************************************
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;
}