Newer
Older
ubixos / src / sys / kernel / exec.c
@reddawg reddawg on 11 May 2002 1 KB Woot Woot
/**************************************************************************************
 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;
  }