diff TaskManager/kernel/schedule/SchedTask.cc @ 634:0558abba673c

SimpleTask start
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 18 Nov 2009 17:29:14 +0900
parents 8843edf37c0e
children 8cc609285bbe
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/SchedTask.cc	Wed Nov 18 14:47:23 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.cc	Wed Nov 18 17:29:14 2009 +0900
@@ -27,7 +27,7 @@
    最初の一回は SchedTaskList:: next から呼ばれる。
    この段階では、SchedTask object は、まだ作られてない。
  */
-void
+static void
 loadSchedTask(Scheduler *scheduler,TaskPtr task)
 {
 // fprintf(stderr,"loadSchedTask %d\n",task->command);
@@ -39,8 +39,10 @@
 {
     list        = NULL;
     task        = NULL;
+#ifndef SIMPLE_TASK
     inListData  = NULL;
     outListData = NULL;
+#endif
     readbuf     = NULL;
     writebuf    = NULL;
     scheduler   = NULL;
@@ -67,8 +69,10 @@
 {
     list        = _list;
     task        = _task;
+#ifndef SIMPLE_TASK
     inListData  = &_task->inData;
     outListData = &_task->outData;
+#endif
     scheduler   = sc;
     cur_index   = index;
 
@@ -88,7 +92,14 @@
 	// load next task
 	loadSchedTask(scheduler, &list->tasks[cur_index]);
     }
-
+#ifdef SIMPLE_TASK
+    writebuf = scheduler->allocate(task->w_size);
+    // 読むデータが一つもなければ無視
+    if (task->r_size == 0) return;
+    // load Input Data
+    readbuf = scheduler->allocate(task->r_size);
+    scheduler->dma_load(readbuf, task->rbuf,task->r_size, DMA_READ);
+#else
     writebuf = scheduler->allocate(outListData->size);
 
     // 読むデータが一つもなければ無視
@@ -97,6 +108,7 @@
     // load Input Data
     readbuf = scheduler->allocate(inListData->size);
     scheduler->dma_loadList(inListData, readbuf, DMA_READ);
+#endif
 
 
 }
@@ -113,9 +125,15 @@
     free(readbuf);
 
     // 書き込む領域がなければ無視
+#ifdef SIMPLE_TASK
     if (outListData->length > 0) {
         scheduler->dma_storeList(outListData, writebuf, DMA_WRITE);
     }
+#else
+    if (task->w_size > 0) {
+	scheduler->dma_store(writebuf, task->wbuf,task->w_size, DMA_READ);
+    }
+#endif
 }
 
 void
@@ -151,8 +169,7 @@
             return new SchedNop2Ready(scheduler);
         } else {
 	    // 新しいリストに取り掛かる
-            return createSchedTaskList(nextList, scheduler,
-                                       0);
+            return createSchedTaskList(nextList, scheduler, 0);
         }
     }
 }
@@ -238,7 +255,11 @@
 memaddr
 SchedTask::get_param(int index)
 {
+#ifdef SIMPLE_TASK
+    return param[index];
+#else
     return task->param[index];
+#endif
 }
 
 
@@ -316,11 +337,19 @@
 }
 
 
-HTaskPtr SchedTask::create_task(int cmd)
+HTaskPtr
+SchedTask::create_task(int cmd)
 {
     return scheduler->create_task(cmd);
 }
 
+HTaskPtr 
+SchedTask::create_task(int cmd, memaddr r, long rs, memaddr w, long ws)
+{
+    return scheduler->create_task(cmd,r,rs,w,ws);
+}
+
+
 void SchedTask::set_task_depend(HTaskPtr master, HTaskPtr slave)
 {
     scheduler->set_task_depend(master, slave);