diff TaskManager/kernel/schedule/Scheduler.h @ 403:8611780d479f

clean up and add more info on task_list
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 23 Sep 2009 12:04:29 +0900
parents 016d45583994
children cd77224d4224
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/Scheduler.h	Mon Sep 21 20:00:12 2009 +0900
+++ b/TaskManager/kernel/schedule/Scheduler.h	Wed Sep 23 12:04:29 2009 +0900
@@ -21,9 +21,11 @@
 class SchedTask;
 class SchedTaskList;
 
+typedef	SchedTask* (*TaskObjectCreator)(Scheduler *);
+
 class Scheduler {
 public:
-    virtual ~Scheduler(void);
+    virtual ~Scheduler();
 
     BASE_NEW_DELETE(Scheduler);
 
@@ -91,7 +93,11 @@
     // Task Object Table
     //  this is named TaskObject but it is not an object.
     //  It is a pointer to an object creation function
-    typedef SchedTask* (*TaskObject)(void);
+    typedef struct {
+	TaskObjectCreator creator;
+	uint64 location;            // location address in a.out
+	uint32 entry_offset;        // offset for create();
+    } TaskObject, *TaskObjectPtr;
 
     DmaManager* connector;
 
@@ -101,28 +107,28 @@
     SchedTaskBase* task3;
 
     /* functions */
-    void init(void);
-    void run(void);
-    virtual void init_impl(void) {};
-    void finish(void);
+    void init();
+    void run();
+    virtual void init_impl() {};
+    void finish();
 
-    TaskListPtr get_curListBuf(void);
-    ListDataPtr get_curReadBuf(void);
-    ListDataPtr get_curWriteBuf(void);
-    TaskListPtr get_renewListBuf(void);
+    TaskListPtr get_curListBuf();
+    ListDataPtr get_curReadBuf();
+    ListDataPtr get_curWriteBuf();
+    TaskListPtr get_renewListBuf();
 
     void set_backupTaskList(TaskListPtr cur_taskList);
     void set_backupTaskListIndex(int cur_index);
-    SchedTaskList* get_nextRenewTaskList(void);
-    TaskListPtr get_backupTaskList(void);
-    int get_backupTaskListIndex(void);
+    SchedTaskList* get_nextRenewTaskList();
+    TaskListPtr get_backupTaskList();
+    int get_backupTaskListIndex();
 
     // なんか名前が変だが。。。
     /* TaskGroup */
     TaskGroupPtr set_groupTask(uint32 command);
     void add_groupTask(TaskGroupPtr group, TaskPtr task);
     void remove_groupTask(TaskGroupPtr group, TaskPtr task);
-    void reload_groupTask(void);
+    void reload_groupTask();
     uint32 status_groupTask(TaskGroupPtr group);
 
     /* GlobalMemory */
@@ -134,7 +140,7 @@
     virtual void *allocate(int size) { return NULL; };
 
     virtual void mainMem_alloc(int id, int size) {};
-    virtual void mainMem_wait(void) {};
+    virtual void mainMem_wait() {};
     void *mainMem_get(int id);
 
     MemorySegment * get_segment(memaddr addr, MemList *m);
@@ -149,28 +155,32 @@
     void show_dma_wait() { connector->show_dma_wait(id); };
     void show_dma_wait(int id) { connector->show_dma_wait(id); };
     void mail_write(uint32 data);
-    uint32 mail_read(void);
+    uint32 mail_read();
     void dma_loadList(ListDataPtr list, void *, uint32 mask);
     void dma_storeList(ListDataPtr list, void *, uint32 mask);
 };
 
-extern void register_task(int cmd, Scheduler::TaskObject task);
+extern void register_task(int cmd, TaskObjectCreator creator);
+
 #endif
 
 
 #define SchedConstructor(str)                                           \
-    str(void) {}                                                        \
+    str() {}                                                        \
     BASE_NEW_DELETE(str)                                                \
 
 #define SchedDefineTask(str)                                            \
-    SchedTask* createTask_##str(void)                                   \
+    SchedTask* createTask_##str(Scheduler *manager)                   \
     {                                                                   \
         return new str();                                               \
     }
 
 #define SchedExternTask(str)                                            \
     extern                                                              \
-    SchedTask* createTask_##str(void);
+    SchedTask* createTask_##str(Scheduler *manager);
 
 #define SchedRegisterTask(cmd, str)             \
     register_task(cmd, createTask_##str);
+
+
+/* end */