changeset 366:09f33c51a204

rename include/TaskManager/* and add memory
author aaa
date Mon, 27 Jul 2009 15:51:18 +0900
parents f8769040a5df
children c7a4818cdfcb
files TaskManager/Cell/CellBufferManager.h TaskManager/Cell/CellHTaskInfo.h TaskManager/Cell/CellTaskListInfo.h TaskManager/Cell/CellTaskManagerImpl.h TaskManager/Cell/PpeScheduler.h TaskManager/Cell/SchedNop2Ready.h TaskManager/Cell/SpeThreads.h TaskManager/Cell/spe/CellDmaManager.h TaskManager/Cell/spe/CellScheduler.h TaskManager/Fifo/FifoDmaManager.h TaskManager/Fifo/FifoTaskManagerImpl.h TaskManager/Fifo/MainScheduler.h TaskManager/include/base.h TaskManager/include/error.h TaskManager/include/types.h TaskManager/kernel/memory/MemList.cpp TaskManager/kernel/memory/MemList.h TaskManager/kernel/memory/MemorySegment.h TaskManager/kernel/ppe/BufferManager.h TaskManager/kernel/ppe/DmaBuffer.h TaskManager/kernel/ppe/HTask.h TaskManager/kernel/ppe/HTaskInfo.h TaskManager/kernel/ppe/MailManager.h TaskManager/kernel/ppe/Random.h TaskManager/kernel/ppe/SymTable.h TaskManager/kernel/ppe/Task.h TaskManager/kernel/ppe/TaskList.h TaskManager/kernel/ppe/TaskListInfo.h TaskManager/kernel/ppe/TaskManager.h TaskManager/kernel/ppe/TaskManagerImpl.h TaskManager/kernel/ppe/TaskQueue.h TaskManager/kernel/ppe/TaskQueueInfo.h TaskManager/kernel/schedule/DmaManager.h TaskManager/kernel/schedule/ListData.h TaskManager/kernel/schedule/SchedExit.h TaskManager/kernel/schedule/SchedMail.h TaskManager/kernel/schedule/SchedNop.h TaskManager/kernel/schedule/SchedTask.h TaskManager/kernel/schedule/SchedTaskBase.h TaskManager/kernel/schedule/SchedTaskList.h TaskManager/kernel/schedule/Scheduler.h TaskManager/kernel/schedule/TaskGroup.h example/MemList/main.cc include/TaskManager/BufferManager.h include/TaskManager/CellBufferManager.h include/TaskManager/CellDmaManager.h include/TaskManager/CellHTaskInfo.h include/TaskManager/CellScheduler.h include/TaskManager/CellTaskInfo.h include/TaskManager/CellTaskListInfo.h include/TaskManager/CellTaskManagerImpl.h include/TaskManager/DmaBuffer.h include/TaskManager/DmaManager.h include/TaskManager/FifoDmaManager.h include/TaskManager/FifoTaskManagerImpl.h include/TaskManager/HTask.h include/TaskManager/HTaskInfo.h include/TaskManager/ListData.h include/TaskManager/MailManager.h include/TaskManager/MainScheduler.h include/TaskManager/PpeScheduler.h include/TaskManager/Random.h include/TaskManager/SchedExit.h include/TaskManager/SchedMail.h include/TaskManager/SchedNop.h include/TaskManager/SchedNop2Ready.h include/TaskManager/SchedTask.h include/TaskManager/SchedTaskBase.h include/TaskManager/SchedTaskList.h include/TaskManager/Scheduler.h include/TaskManager/SpeThreads.h include/TaskManager/SymTable.h include/TaskManager/Task.h include/TaskManager/TaskGroup.h include/TaskManager/TaskList.h include/TaskManager/TaskListInfo.h include/TaskManager/TaskManager.h include/TaskManager/TaskManagerImpl.h include/TaskManager/TaskQueue.h include/TaskManager/TaskQueueInfo.h include/TaskManager/base.h include/TaskManager/error.h include/TaskManager/types.h
diffstat 83 files changed, 1526 insertions(+), 1470 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/CellBufferManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,16 @@
+#ifndef INCLUDED_CELL_BUFFER_MANAGER
+#define INCLUDED_CELL_BUFFER_MANAGER
+
+#include "base.h"
+#include "BufferManager.h"
+
+class CellBufferManager : public BufferManager {
+public:
+    CellBufferManager(int num) :BufferManager(num){}
+
+    BASE_NEW_DELETE(CellBufferManager);
+
+    void init(void);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/CellHTaskInfo.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,12 @@
+#ifndef INCLUDED_CELL_HTASK_INFO
+#define INCLUDED_CELL_HTASK_INFO
+
+#include "HTaskInfo.h"
+
+class CellHTaskInfo : public HTaskInfo {
+public:
+    /* functions */
+    int extend_pool(int num);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/CellTaskListInfo.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,12 @@
+#ifndef INCLUDED_CELL_TASK_LIST_INFO
+#define INCLUDED_CELL_TASK_LIST_INFO
+
+#include "TaskListInfo.h"
+
+class CellTaskListInfo : public TaskListInfo {
+public:
+    /* functions */
+    int extend_pool(int num);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/CellTaskManagerImpl.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,45 @@
+#ifndef INCLUDED_CELL_TASK_MANAGER_IMPL
+#define INCLUDED_CELL_TASK_MANAGER_IMPL
+
+#include "TaskManagerImpl.h"
+#include "FifoTaskManagerImpl.h"
+#include "SpeThreads.h"
+
+class CellTaskManagerImpl : public TaskManagerImpl {
+public:
+    /* constructor */
+    CellTaskManagerImpl(int num = 1) : TaskManagerImpl(num) {}
+    ~CellTaskManagerImpl(void);
+
+    /* variables */
+    TaskListPtr *speTaskList;
+    TaskListPtr *speTaskList_bg;
+
+    SpeThreads *speThreads;
+    int *flag_sendTaskList;
+    FifoTaskManagerImpl *ppeManager;
+
+    /* functions */
+    // system
+    void init(void);
+    void run(void);
+    TaskListPtr mail_check(MailQueuePtr mail_list);
+    void set_runTaskList(void);
+    void append_activeTask(HTaskPtr);
+
+    // user
+    int add_data(ListDataPtr, uint32, int);
+    void* allocate(int size);
+
+private:
+    void send_taskList(int id);
+};
+
+#ifdef Cerium_malloc
+#undef Cerium_malloc
+#endif
+
+#define Cerium_malloc(dest, align, size) \
+    posix_memalign((void**)(dest), (align), (size))
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/PpeScheduler.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,11 @@
+#ifndef INCLUDED_PPE_SCHEDULER
+#define INCLUDED_PPE_SCHEDULER
+
+#include "MainScheduler.h"
+
+class PpeScheduler : public MainScheduler {
+public:
+    void *allocate(int size);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/SchedNop2Ready.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,31 @@
+#ifndef INCLUDED_SCHED_NOP2READY
+#define INCLUDED_SCHED_NOP2READY
+
+#include "base.h"
+#include "Scheduler.h"
+#include "SchedTaskBase.h"
+#include "SchedNop.h"
+
+#include "error.h"
+
+class SchedNop2Ready : public SchedNop {
+public:
+    /* constructor */
+    SchedNop2Ready(Scheduler*);
+
+    BASE_NEW_DELETE(SchedNop2Ready);
+
+    /* variables */
+    Scheduler* scheduler;
+
+    /* functions */
+    void exec(void);
+    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
+
+#if DEBUG
+    void read(void)  { __debug("[SchedNop2Ready:%s]\n", __FUNCTION__); }
+    void write(void) { __debug("[SchedNop2Ready:%s]\n", __FUNCTION__); }
+#endif
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/SpeThreads.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,38 @@
+#ifndef INCLUDED_SPE_THREADS
+#define INCLUDED_SPE_THREADS
+
+#include <libspe2.h>
+#include <pthread.h>
+
+#define SPE_ELF "spe-main"
+
+typedef struct arg {
+    int speid;
+    spe_context_ptr_t ctx;
+} thread_arg_t;
+
+class SpeThreads {
+public:
+    /* constructor */
+    SpeThreads(int num = 1);
+    ~SpeThreads(void);
+
+    /* functions */
+    void init(void);
+    int get_mail(int speid, int count, unsigned int* ret); // BLOCKING
+    int check_mail(int speid, int count, unsigned int* ret); // NONBLOCK
+    void send_mail(int speid, int num, unsigned int *data); // BLOCKING
+    static void *spe_thread_run(void *arg);
+    static void *frontend_thread_run(void *arg);
+    void add_output_tasklist(int command, unsigned int buff, int alloc_size);
+
+private:
+    /* variables */
+    spe_program_handle_t *spe_handle;
+    spe_context_ptr_t *spe_ctx;
+    pthread_t *threads;
+    thread_arg_t *args;
+    int spe_num;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/spe/CellDmaManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,38 @@
+#ifndef INCLUDED_CELL_DMA_MANAGER
+#define INCLUDED_CELL_DMA_MANAGER
+
+#include "base.h"
+#include "DmaManager.h"
+
+#include <spu_mfcio.h>
+
+#define SPU_PROFILE 1
+
+class CellDmaManager : public DmaManager {
+public:
+    BASE_NEW_DELETE(CellDmaManager);
+
+    typedef struct dma_list {
+	memaddr addr;
+	uint32 size;
+    } DmaList, *DmaListPtr;
+
+    /* variables */
+    unsigned int wait_time, busy_time;
+    unsigned long long global_busy_time, global_wait_time;
+
+    /* functions */
+    void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask);
+    void dma_store(void *buf, memaddr addr, uint32 size, uint32 mask);
+    void dma_wait(uint32 mask) ;
+    void start_dmawait_profile();
+    void end_dmawait_profile();
+    void show_dma_wait(int cpu);
+
+    void mail_write(uint32 data);
+    uint32 mail_read(void);
+    void dma_loadList(ListDataPtr list, void *buff, uint32 mask);
+    void dma_storeList(ListDataPtr, void *buff, uint32 mask);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/spe/CellScheduler.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,21 @@
+#ifndef INCLUDED_CELL_SCHEDULER
+#define INCLUDED_CELL_SCHEDULER
+
+#include "base.h"
+#include "Scheduler.h"
+
+class CellScheduler : public Scheduler {
+public:
+    BASE_NEW_DELETE(CellScheduler);
+
+    void init_impl(void);
+
+    void *allocate(int size);
+    void mainMem_alloc(int id, int size);
+    void mainMem_wait(void);
+
+private:
+    int mainMemNum;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Fifo/FifoDmaManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,30 @@
+#ifndef INCLUDED_FIFO_DMA_MANAGER
+#define INCLUDED_FIFO_DMA_MANAGER
+
+#include "base.h"
+#include "DmaManager.h"
+#include "MailManager.h"
+
+class FifoDmaManager : public DmaManager {
+public:
+    BASE_NEW_DELETE(FifoDmaManager);
+
+    /* variables */
+    MailManager *mailManager;
+    MailQueuePtr mail_recvQueue;
+    MailQueuePtr mail_sendQueue;
+
+    /* functions */
+    void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
+    void dma_store(void *buf, uint32 addr, uint32 size, uint32 mask);
+    void dma_wait(uint32 mask) ;
+
+    void mail_write(uint32 data);
+    uint32 mail_read(void);
+
+    void dma_loadList(ListDataPtr list, void *buff, uint32 mask);
+    void dma_storeList(ListDataPtr, void *buff, uint32 mask);
+    //void* dma_loadList(ListDataPtr list, void *buff, uint32 mask);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Fifo/FifoTaskManagerImpl.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,40 @@
+#ifndef INCLUDED_FIFO_TASK_MANAGER_IMPL
+#define INCLUDED_FIFO_TASK_MANAGER_IMPL
+
+#include "TaskManagerImpl.h"
+#include "MainScheduler.h"
+
+class FifoTaskManagerImpl : public TaskManagerImpl {
+public:
+    /* constructor */
+    FifoTaskManagerImpl(int num = 1) : TaskManagerImpl(num) {}
+    ~FifoTaskManagerImpl(void);
+
+    /* variables */
+    int machineNum;
+    TaskListPtr mainTaskList;
+
+    MailManager *mailManager;
+    MainScheduler *scheduler;
+
+    /* functions */
+    // call by system
+    void init(void);
+    void init(MainScheduler*, BufferManager*);
+    void run(void);
+    void mail_check(MailQueuePtr mail_list);
+    void mail_check(MailQueuePtr mail_list, TaskQueuePtr *waitQueue);
+    TaskListPtr get_runTaskList(void);
+    MailQueuePtr schedule(TaskListPtr);
+
+    // call by user
+    int add_data(ListDataPtr, uint32, int);
+    void* allocate(int size);
+};
+
+#ifndef Cerium_malloc
+#define Cerium_malloc(dest, align, size) \
+    *dest = malloc(size);
+#endif /* Cerium_malloc */
+
+#endif /* INCLUDED_FIFO_TASK_MANAGER_IMPL */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Fifo/MainScheduler.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,20 @@
+#ifndef INCLUDED_MAIN_SCHEDULER
+#define INCLUDED_MAIN_SCHEDULER
+
+#include "Scheduler.h"
+#include "MailManager.h"
+
+class MainScheduler : public Scheduler {
+public:
+    ~MainScheduler(void) {}
+
+    void init_impl(void);
+    void set_mailManager(MailManager *);
+    void send_mailList(MailQueuePtr mail_list);
+    MailQueuePtr recv_mailList(void);
+
+    virtual void *allocate(int size);
+    void mainMem_alloc(int id, int size);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/include/base.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,28 @@
+#ifndef INCLUDED_BASE_H_
+
+#include <new>
+#include <stdlib.h>
+#include <stdio.h>
+
+
+#ifdef __SPU__
+//#if 0
+#  define BASE_NEW_DELETE(T)						\
+    /* override new/detele */                                           \
+    static void* operator new(size_t size) {                            \
+	if ((int)size == 0) {						\
+            size = 1;                                                   \
+	}                                                               \
+									\
+	void *ptr = malloc(size);					\
+	return ptr;							\
+    }                                                                   \
+    static void operator delete(void* rawMemory, size_t size) {         \
+	free(rawMemory);                                                \
+    }                                                                   \
+
+#else
+# define BASE_NEW_DELETE(T)
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/include/error.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,30 @@
+#ifndef CERIUM_ERR
+#define CERIUM_ERR
+
+#ifdef DEBUG
+#  include <stdio.h>
+#  define __debug(...) do { \
+	fprintf(stderr, __VA_ARGS__);		\
+    } while (0)
+#else /* DEBUG */
+#  define __debug(...)
+#endif
+
+#ifdef DEBUG
+#  include <stdio.h>
+#  define __debug_ppe(...) do { \
+	printf("[PPE] "); printf(__VA_ARGS__);	\
+    } while (0)
+#else /* DEBUG */
+#  define __debug_ppe(...)
+#endif
+
+#ifdef DEBUG
+#  include <stdio.h>
+#  define __debug_spe(...) do { \
+	printf("[SPE] "); printf(__VA_ARGS__);	\
+    } while (0)
+#else /* DEBUG */
+#  define __debug_spe(...)
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/include/types.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,60 @@
+#ifndef INCLUDED_TYPES
+#define INCLUDED_TYPES
+
+#include <stdint.h>
+
+typedef uint32_t uint32;
+typedef uint64_t uint64;
+#ifdef SPU
+typedef uint64_t memaddr;
+#else
+#if (sizeof (void*) == 8)
+typedef uint64_t memaddr;
+#else
+typedef uint32_t memaddr;
+#endif
+#endif
+
+#define SPE_ALIGNMENT 16
+#define SPE_ALIGNMENT_FULL 128
+#define SPE_ALIGN __attribute__((aligned(SPE_ALIGNMENT)))
+#define SPE_ALIGN_FULL __attribute__((aligned(SPE_ALIGNMENT_FULL))
+#define ROUND_UP_ALIGN(value, alignment) \
+    (((value) + ((alignment) - 1))&(~((alignment)-1)))
+#define DEFAULT_ALIGNMENT SPE_ALIGNMENT
+//#define DEFAULT_ALIGNMENT SPE_ALIGNMENT_FULL
+
+#define DMA_MAX_SIZE 16384
+
+#define round_up16(value)  ROUND_UP_ALIGN(value, 16)
+#define round_up128(value) ROUND_UP_ALIGN(value, 128)
+
+// ここも typedef しとくか?
+enum {
+// どの方向かで enum 分けるだろjk...
+// PPE -> SPE 
+    MY_SPE_NOP = 0,
+    MY_SPE_COMMAND_EXIT,
+    MY_SPE_COMMAND_GO,
+
+// SPE -> PPE
+    MY_SPE_STATUS_BUSY,
+    MY_SPE_STATUS_READY,
+    MY_SPE_COMMAND_MALLOC,
+};
+
+#define MAX_USE_SPE_NUM 6
+
+typedef enum {
+    CPU_PPE = 0, // default
+    CPU_SPE = 1,
+    SPE_ANY = CPU_SPE,
+    SPE_0 = 2,
+    SPE_1 = 3,
+    SPE_2 = 4,
+    SPE_3 = 5,
+    SPE_4 = 6,
+    SPE_5 = 7,
+} CPU_TYPE;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/memory/MemList.cpp	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,52 @@
+MemList* 
+createMeamList(uint32 size, uint32 count)
+{
+    MemList* mlist = 
+	smanager->locate(sizeof(MemorySegment));
+    return mlist;
+}
+
+void
+addFirst(MemorySegment* e)
+{
+    e->next = this->first;
+    this->first->prev = e;
+    first = e;
+}
+
+void
+addLast(MemorySegment* e)
+{
+    e->prev = this->last;
+    this->last->next = e;
+    last = e;
+}
+
+MemorySegment
+getFirst()
+{
+    return this->first;
+}
+
+MemorySegment
+getLast()
+{
+    return this->last;
+}
+
+boolean
+remove(MemorySegment* e)
+{
+    MemorySegment* p = e;
+    p->prev->next = p->next;
+    p->next->prev = p->prev;
+    p->prev = NULL;
+    p->next = NULL;
+}
+
+void
+moveToFirst(MemorySegment* e)
+{
+    remove(e);
+    addFirst(e);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/memory/MemList.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,12 @@
+class MemList {
+    MemorySegment* first;
+    MemorySegment* last;
+
+    MemList* createMemList(uint32 size, uint32 count);
+    void addFirst(MemorySegment* e);
+    void addLast(MemorySegment* e);
+    MemorySegment* getFirst();
+    MemorySegment* getLast();
+    boolean remove(MemorySegment* e);
+    void moveToFirst(MemorySegment* e); // or use();    
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/memory/MemorySegment.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,7 @@
+class MemorySegment {
+    MemorySegment* next;
+    MemorySegment* prev;
+    uint64 size;
+    uint64 address;
+    uint64 dummy;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/BufferManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,48 @@
+#ifndef INCLUDED_BUFFER_MANAGER
+#define INCLUDED_BUFFER_MANAGER
+
+#include "types.h"
+#include "TaskListInfo.h"
+#include "TaskQueueInfo.h"
+#include "HTaskInfo.h"
+
+/*!
+ *   Task Input/Output buffer manager
+ *
+ */
+
+class BufferManager {
+public:
+    /* constructor */
+    BufferManager(int num = 1);
+    virtual ~BufferManager(void);
+    
+    /* variables */
+    TaskListInfo *taskListImpl;
+    TaskQueueInfo *taskQueueImpl;
+    HTaskInfo *htaskImpl;
+
+    int machineNum;
+
+    /* function */
+    virtual void init(void);
+
+    // TaskList
+    TaskListPtr create_taskList(void);
+    void free_taskList(TaskListPtr);
+    TaskListPtr clear_taskList(TaskListPtr);
+
+    // TaskQueue
+    TaskQueuePtr create_taskQueue(HTaskPtr);
+    void free_taskQueue(TaskQueuePtr);
+
+    // HTask
+    HTaskPtr create_task(int cmd);
+    void free_task(HTaskPtr);
+
+
+    void finish(void);
+private:
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/DmaBuffer.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,23 @@
+#ifndef INCLUDED_DMA_BUFFER
+#define INCLUDED_DMA_BUFFER
+
+#include "base.h"
+
+class DmaBuffer {
+public:
+    /* constructor */
+    DmaBuffer(int size = 4);
+    ~DmaBuffer(void);
+
+    BASE_NEW_DELETE(DmaBuffer);
+
+    /* variables */
+    void *buffer[2];
+    int flag; // variable that select buffer[0 or 1]
+    
+    /* functions */
+    void swap_buffer(void);
+    void get_buffer(void*);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/HTask.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,42 @@
+#ifndef INCLUDED_HTASK
+#define INCLUDED_HTASK
+
+#include "base.h"
+#include "types.h"
+#include "Task.h"
+#include "TaskQueueInfo.h"
+
+class TaskManagerImpl;
+
+/*!
+  @class
+  
+  @brief
+  
+  Cerium の Task で、spawn() でキューに格納されて順次実行される。
+  cpu の指定があれば並列に実行される。
+  特定の Task を待ち合わせる事が可能。
+  Task の入出力は dma などで copy される。
+ */
+
+class HTask : public Task {
+public:
+    BASE_NEW_DELETE(HTask);
+
+    TaskQueuePtr wait_me;  // List of task waiting for me
+    TaskQueuePtr wait_i;   // List of task for which I am waiting
+    void (*post_func)(void *);
+    void *post_arg;
+    CPU_TYPE cpu_type;
+    HTask *next;
+    TaskManagerImpl *mimpl;
+
+    void spawn(void);
+    void wait_for(HTask *);
+    void set_cpu(CPU_TYPE type);
+    void set_post(void (*func)(void *), void *arg);
+};
+
+typedef HTask* HTaskPtr;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/HTaskInfo.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,29 @@
+#ifndef INCLUDED_HTASK_INFO
+#define INCLUDED_HTASK_INFO
+
+#include "HTask.h"
+
+class HTaskInfo {
+public:
+    /* constructor */
+    HTaskInfo(void);
+    virtual ~HTaskInfo(void);
+
+    /* functions */
+    int init(int num);
+    HTaskPtr create(int cmd);
+    void free(HTaskPtr q);
+    virtual int extend_pool(int num);
+
+protected:
+    /* variables */
+    HTaskPtr htaskPool;
+    HTaskPtr freeHTask;
+
+    /* functions */
+    void destroy(void);
+    
+private:
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/MailManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,31 @@
+#ifndef INCLUDED_MAIL_MANAGER
+#define INCLUDED_MAIL_MANAGER
+
+typedef struct mail_queue {
+    unsigned int data;
+    struct mail_queue *next;
+} MailQueue, *MailQueuePtr;
+
+class MailManager {
+public:
+    /* constructor */
+    MailManager(void);
+    ~MailManager(void);
+
+    /* functions */
+    int init(int num);
+    MailQueuePtr create(unsigned int data);
+    void free(MailQueuePtr q);
+    static MailQueuePtr append_mailQueue(MailQueuePtr list, MailQueuePtr q);
+
+private:
+    /* variables */
+    MailQueuePtr mailQueuePool;
+    MailQueuePtr freeMailQueue;
+
+    /* functions */
+    int extend_pool(int num);
+    void destroy(void);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/Random.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,15 @@
+#ifndef INCLUDED_RANDOM
+#define INCLUDED_RANDOM
+
+class Random {
+public:
+    Random(void);
+    Random(unsigned int seed);
+
+    void reset(void);
+    int getData(void);
+};
+
+typedef Random *RandomPtr;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/SymTable.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,27 @@
+#ifndef INCLUDED_SYMTABLE
+#define INCLUDED_SYMTABLE
+
+#define SYM_MAX_SIZE 64
+
+class SymTable {
+public:
+    ~SymTable(void);
+
+    typedef int (*FuncObject)(void *, void*);
+
+    typedef struct sym_table {
+	 char *sym;
+	 FuncObject address;
+    } SymTb, *SymTbPtr;
+
+    SymTbPtr symtb;
+    int symtb_index;
+
+    void init(void);
+    void set_symbol(const char *sym, FuncObject addr);
+    void set_func(int id, FuncObject addr);
+    int get_fd(const char *sym);
+    FuncObject get_address(int fd);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/Task.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,37 @@
+#ifndef INCLUDED_TASK
+#define INCLUDED_TASK
+
+#include "base.h"
+#include "types.h"
+#include "ListData.h"
+
+#define MAX_PARAMS 8
+
+class Task {
+public: // variables
+
+    BASE_NEW_DELETE(Task);
+
+    int command;         // 4 byte
+    ListDataPtr inData;  // 4 byte 64bit であるべき
+    ListDataPtr outData; // 4 byte 64bit であるべき
+    uint32 self;         // 4 byte
+
+    int param_size;        // 4 byte
+    int param[MAX_PARAMS]; // 4*MAX_PARAMS byte
+
+public: // functions
+    int add_inData_t(unsigned int addr, int size);  // unsigned int ではなく 64bit
+    int add_outData_t(unsigned int addr, int size); // unsigned int ではなく 64bit
+    int add_data(ListDataPtr list, unsigned int addr, int size);
+    int add_param(int param);
+
+#define add_inData(addr, size)			\
+    add_inData_t((unsigned int)(addr), (size));
+#define add_outData(addr, size)			\
+    add_outData_t((unsigned int)(addr), (size));
+};
+
+typedef Task* TaskPtr;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskList.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,26 @@
+#ifndef INCLUDED_TASKLIST
+#define INCLUDED_TASKLIST
+
+#include "base.h"
+#include "Task.h"
+
+
+// sizeof(Task)*TASK_MAX_SIZE = 512 byte
+#define TASK_MAX_SIZE 16
+
+class TaskList { // 528byte
+public:
+    BASE_NEW_DELETE(TaskList);
+
+    int length; // 4 byte
+    TaskList *next; // 4 byte
+    Task tasks[TASK_MAX_SIZE]; // 512
+    TaskList *output; // 4 byte
+    int a[1]; // padding
+
+    static TaskList* append(TaskList*, TaskList*);
+};
+
+typedef TaskList* TaskListPtr;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskListInfo.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,31 @@
+#ifndef INCLUDED_TASK_LIST_INFO
+#define INCLUDED_TASK_LIST_INFO
+
+#include "types.h"
+#include "TaskList.h"
+
+class TaskListInfo {
+public:
+    /* constructor */
+    TaskListInfo(void);
+    virtual ~TaskListInfo(void);
+
+    /* functions */
+    int init(int num);
+    TaskListPtr create(void);
+    void free(TaskListPtr list);
+    static TaskListPtr append(TaskListPtr list, TaskListPtr q);
+    virtual int extend_pool(int num);
+
+protected:
+    /* variables */
+    TaskListPtr taskListPool;
+    TaskListPtr freeTaskList;
+
+    /* functions */
+    void destroy(void);
+
+private:
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,37 @@
+#ifndef INCLUDED_TASK_MANAGER
+#define INCLUDED_TASK_MANAGER
+
+#include "TaskManagerImpl.h"
+#include "Random.h"
+
+class TaskManager {
+public:
+    /* constructor */
+    TaskManager(int num = 1); // The number of threads
+    ~TaskManager(void);
+
+    /* variables */
+    TaskManagerImpl *m_impl;    
+    void (*tm_end)(void);
+    RandomPtr gen_random;
+
+    /* user function */
+    HTaskPtr create_task(int cmd);
+    void run(void);
+    void *allocate(int size);
+    void set_TMend(void (*endf)(void));
+    int get_cpuNum(void);
+    int get_random(void);
+
+    /* functions */
+    void init(void);
+    void finish(void);
+
+private:
+    int machineNum;
+};
+
+#endif
+
+extern TaskManager *manager;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,43 @@
+#ifndef INCLUDED_TASK_MANAGER_IMPL
+#define INCLUDED_TASK_MANAGER_IMPL
+
+#include "MailManager.h"
+#include "BufferManager.h"
+#include "ListData.h"
+
+class TaskManagerImpl {
+public:
+    /* constructor */
+    TaskManagerImpl(int num = 1);
+    virtual ~TaskManagerImpl(void) {}
+
+    /* variables */
+    int machineNum;
+    TaskQueuePtr activeTaskQueue;
+    TaskQueuePtr waitTaskQueue;
+    BufferManager *bufferManager;
+
+    /* functions */
+    // system
+    virtual void init(void) = 0;
+    virtual void run(void) = 0;
+    virtual void append_activeTask(HTaskPtr);
+    virtual void append_waitTask(HTaskPtr);
+
+    void check_task_finish(HTaskPtr task);
+    void notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list);
+    TaskQueuePtr remove_taskQueue(TaskQueuePtr list, TaskQueuePtr task);
+    TaskQueuePtr remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task);
+    void remove_taskQueue_all(TaskQueuePtr list);
+    void wakeup_waitTask(void);
+
+    void systask_init(void);
+
+    // user
+    HTaskPtr create_task(int cmd);
+    void set_task_depend(HTaskPtr master, HTaskPtr slave);
+    void spawn_task(HTaskPtr);
+    void set_task_cpu(HTaskPtr, CPU_TYPE);
+    virtual void* allocate(int size) = 0;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskQueue.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,23 @@
+#ifndef INCLUDED_TASK_QUEUE
+#define INCLUDED_TASK_QUEUE
+
+#include "base.h"
+#include "Task.h"
+
+#include <stdio.h>
+
+class TaskQueue {
+public:
+    TaskQueue(TaskPtr q = NULL);
+
+    BASE_NEW_DELETE(TaskQueue);
+
+    TaskPtr task;
+    class TaskQueue *next;
+
+    static TaskQueue* append(TaskQueue* list, TaskQueue* q);
+};
+
+typedef TaskQueue* TaskQueuePtr;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/ppe/TaskQueueInfo.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,27 @@
+#ifndef INCLUDED_TASK_QUEUE_INFO
+#define INCLUDED_TASK_QUEUE_INFO
+
+#include "TaskQueue.h"
+
+class TaskQueueInfo {
+public:
+    /* constructor */
+    TaskQueueInfo(void);
+    ~TaskQueueInfo(void);
+
+    /* functions */
+    int init(int num);
+    TaskQueuePtr create(TaskPtr task);
+    void free(TaskQueuePtr queue);
+    
+private:
+    /* variables */
+    TaskQueuePtr taskQueuePool;
+    TaskQueuePtr freeTaskQueue;
+
+    /* functions */
+    int extend_pool(int num);
+    void destroy(void);  
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/DmaManager.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,37 @@
+#ifndef INCLUDED_DMA_MANAGER
+#define INCLUDED_DMA_MANAGER
+
+#include "base.h"
+#include "ListData.h"
+#include "types.h"
+
+enum dma_tag {
+    DMA_READ  = 25,
+    DMA_WRITE = 27,
+    DMA_READ_IN_LIST  = 29,
+    DMA_READ_OUT_LIST = 30,
+    DMA_READ_TASKLIST = 31,
+};
+
+class DmaManager {
+public:
+    virtual ~DmaManager(void) {};
+
+    BASE_NEW_DELETE(DmaManager);
+
+    // API for DMA transfer
+    virtual void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask) {}
+    virtual void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask) {}
+    virtual void dma_wait(uint32 mask) {}
+    virtual void show_dma_wait(int cpu) {}
+
+    // API for SPU inbound/outbound mailbox
+    virtual void mail_write(uint32 data) {}
+    virtual uint32 mail_read(void) {return 0;}
+    
+    // API for MFC list DMA transfer
+    virtual void dma_loadList(ListDataPtr list, void *,uint32 mask) {}
+    virtual void dma_storeList(ListDataPtr, void *buff, uint32 mask) {}
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/ListData.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,36 @@
+#ifndef INCLUDED_LIST_DATA
+#define INCLUDED_LIST_DATA
+
+#include "base.h"
+
+#define MAX_LIST_DMA_SIZE 8
+
+class ListElement {
+public:
+    BASE_NEW_DELETE(ListElement);
+
+    int size;
+    unsigned int addr;
+};
+
+typedef ListElement* ListElementPtr;
+
+class ListData {
+public:
+    BASE_NEW_DELETE(ListData);
+
+    int length; // The number of data (4)
+    int size;   // Total size of data (4)
+    int a[2]; // for alignment
+    int bound[MAX_LIST_DMA_SIZE]; // (4 * MAX_LIST_DMA_SIZE)
+    ListElement element[MAX_LIST_DMA_SIZE]; // (8 * MAX_LIST_DMA_SIZE)
+
+    void clear(void) {
+	length = 0;
+	size = 0;
+    }
+};
+
+typedef ListData* ListDataPtr;
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/SchedExit.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,16 @@
+#ifndef INCLUDED_SCHED_EXIT
+#define INCLUDED_SCHED_EXIT
+
+#include "base.h"
+#include "Scheduler.h"
+#include "SchedTaskBase.h"
+
+
+class SchedExit : public SchedTaskBase {
+public:
+    BASE_NEW_DELETE(SchedExit);
+    
+    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/SchedMail.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,31 @@
+#ifndef INCLUDED_SCHED_MAIL
+#define INCLUDED_SCHED_MAIL
+
+#include "base.h"
+#include "Scheduler.h"
+#include "SchedTaskBase.h"
+
+#include "error.h"
+
+class SchedMail : public SchedTaskBase{
+public:
+    /* constructor */
+    SchedMail(Scheduler *);
+
+    BASE_NEW_DELETE(SchedMail);
+
+    /* variables */
+    unsigned int params_addr;
+    Scheduler* scheduler;
+
+    /* functions */
+    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
+
+#if DEBUG
+    void read(void)  { __debug("[SchedMail:%s]\n", __FUNCTION__); }
+    void exec(void)  { __debug("[SchedMail:%s]\n", __FUNCTION__); }
+    void write(void) { __debug("[SchedMail:%s]\n", __FUNCTION__); }
+#endif
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/SchedNop.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,18 @@
+#ifndef INCLUDED_SCHED_NOP
+#define INCLUDED_SCHED_NOP
+
+#include "base.h"
+#include "Scheduler.h"
+#include "SchedTaskBase.h"
+
+#include "error.h"
+
+class SchedNop : public SchedTaskBase {
+public:
+    BASE_NEW_DELETE(SchedNop);
+
+    /* functions */
+    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/SchedTask.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,159 @@
+#ifndef INCLUDED_SCHED_TASK
+#define INCLUDED_SCHED_TASK
+
+#include "base.h"
+#include "Scheduler.h"
+#include "SchedTaskBase.h"
+#include "ListData.h"
+#include "TaskGroup.h"
+
+class SchedTask : public SchedTaskBase {
+public:
+    /* constructor */
+    SchedTask();
+    virtual ~SchedTask();
+
+    BASE_NEW_DELETE(SchedTask);
+
+    SchedTask *smanager;
+
+private:
+    /* variables */
+
+    // Task を実行するスケジューラ自身
+    Scheduler *__scheduler;
+
+    // 現在スケジューラが実行している TaskList と、このタスクに対応する Task
+    TaskListPtr __list;
+    TaskPtr __task;
+
+    // read/write 用の ListData
+    ListDataPtr __inListData;
+    ListDataPtr __outListData;
+
+    /**
+     * read データ、write 用のバッファ
+     * readbuf には タスク登録時に設定した入力データが入っている。
+     * writebuf にデータを描き込んでおくと、
+     * タスク登録時に設定した出力先に書き込む
+     */
+    void *__readbuf;
+    void *__writebuf;
+
+    // Task の、Tasklist での位置。(task = &list[cur_index-1])
+    int __cur_index;
+
+    // タスク内で生成されたタスクのグループ
+    TaskGroup *__taskGroup;
+
+    // このタスク内で生成されたタスクの数
+    int __renew_flag;
+
+    // このタスクが SPE 内で生成されたタスクか否か 1: Yes, 0: No
+    int __flag_renewTask;
+
+    // タスクがメインメモリ側で生成されたものか、
+    // SPE で生成されたものかによって、データの扱いが変わってくる。
+    // そのために if (__flag_renewTask) を連発するのはよくないので
+    // 関数ポインタで持っておく
+    void (SchedTask::*ex_init)();
+    void (SchedTask::*ex_read)();
+    void (SchedTask::*ex_exec)();
+    void (SchedTask::*ex_write)();
+    SchedTaskBase* (SchedTask::*ex_next)();
+   
+    /* functions */
+
+    // override
+    void read();
+    void exec();
+    void write();
+    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
+
+    // ここをユーザが継承して
+    // それぞれのタスクに対応した処理を記述する
+    virtual int run(SchedTask* smanager, void* r, void *w) { return 0; }
+    virtual int run(void* r, void *w) { return 0; }
+
+    int (SchedTask::*run_func)(void* r, void *w);
+    int (SchedTask::*run_func1)(SchedTask* smanager, void* r, void *w);
+
+    //---  System API ---
+    SchedTask* get_nextTask(TaskListPtr list);
+    
+    /**
+     * PPE で生成されたタスクに対する
+     * __init__, read,exec,write,next の付属(?)処理
+     */
+    void ex_init_normal();
+    void ex_read_normal();
+    void ex_exec_normal();
+    void ex_write_normal();
+    SchedTaskBase* ex_next_normal();
+
+    /**
+     * SPE で生成されたタスクに対する
+     * __inti__, ead,exec,write,next の付属(?)処理
+     */
+    void ex_init_renew();
+    void ex_read_renew();
+    void ex_exec_renew();
+    void ex_write_renew();
+    SchedTaskBase* ex_next_renew();
+
+public:
+    /* functions */
+
+    void __setRenew();
+    void __init__(TaskListPtr _list, TaskPtr _task, int index,
+		  ListDataPtr rbuf, ListDataPtr wbuf, Scheduler* sc);
+
+    //---  User API ---
+    int get_cpuid();
+
+    void* get_input(void *buff, int index);
+    void* get_output(void *buff, int index);
+    uint32 get_inputAddr(int index);
+    uint32 get_outputAddr(int index);
+    int get_inputSize(int index);
+    int get_outputSize(int index);
+    int get_param(int index);
+
+    TaskPtr create_task(int cmd);
+    void wait_task(TaskPtr waitTask);
+
+    void* global_alloc(int id, int size);
+    void* global_get(int id);
+    void global_free(int id);
+
+    void mainMem_alloc(int id, int size);
+    void mainMem_wait();
+    void* mainMem_get(int id);
+
+    void *allocate(int size);
+
+    void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
+    void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask);
+    void dma_wait(uint32 mask);
+    void show_dma_wait();
+    
+    /*!
+      SPU用の get_input, get_output
+     */
+
+    void* get_input(int index) {
+      return get_input(__readbuf, index);
+    }
+    
+    void* get_output(int index) {
+      return get_output(__writebuf, index);
+    }     
+};
+
+const int SCHED_TASK_NORMAL = 0;
+const int SCHED_TASK_RENEW  = 1;
+
+extern SchedTask* createSchedTask(TaskPtr);
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/SchedTaskBase.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,27 @@
+#ifndef INCLUDED_SCHED_TASK_BASE
+#define INCLUDED_SCHED_TASK_BASE
+
+#include "base.h"
+#include "Scheduler.h"
+
+class Scheduler;
+
+class SchedTaskBase {
+public:
+    /* constructor */
+    SchedTaskBase(void) {}
+    virtual ~SchedTaskBase(void) {}
+
+    BASE_NEW_DELETE(SchedTaskBase);
+
+    // noaction in default
+    virtual void load(void)  {}
+    virtual void read(void)  {}
+    virtual void exec(void)  {}
+    virtual void write(void) {}
+
+    /* functions */
+    virtual SchedTaskBase* next(Scheduler*, SchedTaskBase*) {return 0;}
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/SchedTaskList.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,43 @@
+#ifndef INCLUDED_SCHED_TASKLIST
+#define INCLUDED_SCHED_TASKLIST
+
+#include "base.h"
+#include "Scheduler.h"
+#include "SchedTaskBase.h"
+
+#include "error.h"
+
+class SchedTaskList : public SchedTaskBase {
+public:
+    /* constructor */
+    SchedTaskList(unsigned int addr, Scheduler *sched);
+
+    BASE_NEW_DELETE(SchedTaskList);
+
+    /* variables */
+    unsigned int params_addr;
+    TaskListPtr list;
+    Scheduler *scheduler;
+
+    int flag_renewTaskList;
+
+    /* functions */
+    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
+    
+    /* override functions */
+    void read(void);
+
+#ifdef DEBUG
+    void exec(void)  { __debug("[SchedTaskList:%s]\n", __FUNCTION__); }
+    void write(void) { __debug("[SchedTaskList:%s]\n", __FUNCTION__); }
+#endif
+
+};
+
+const int SCHED_TASKLIST_NORMAL = 0;
+const int SCHED_TASKLIST_RENEW  = 1;
+
+extern SchedTaskList* createSchedTaskList(uint32, Scheduler*, int);
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/Scheduler.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,168 @@
+#ifndef INCLUDED_SCHEDULER
+#define INCLUDED_SCHEDULER
+
+#include "base.h"
+#include "TaskList.h"
+#include "ListData.h"
+#include "DmaManager.h"
+#include "SchedTaskBase.h"
+#include "SchedTaskList.h"
+#include "TaskGroup.h"
+
+
+#define MAX_USER_TASK 32
+#define MAX_SYSTEM_TASK 2
+#define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK
+#define MAX_GLOBAL_AREA 32
+#define MAX_MAINMEM_AREA 32
+
+class SchedTaskBase;
+class SchedTask;
+class SchedTaskList;
+
+class Scheduler {
+public:
+    virtual ~Scheduler(void);
+
+    BASE_NEW_DELETE(Scheduler);
+
+    /* variables */
+    int id;
+
+    // double buffering
+    TaskListPtr buff_taskList[2];
+    ListDataPtr buff_inListData[2];
+    ListDataPtr buff_outListData[2];
+
+    int buffFlag_taskList;
+    int buffFlag_inListData;
+    int buffFlag_outListData;
+
+    /* TaskList 関連 */
+
+    /**
+     * 実行中 TaskList の現在の位置 (list->tasks[index])
+     * 
+     * bakIndex_taskList がある理由
+     * taskList の途中で renew task が作られたとき、
+     * 即座に実行するため、TaskList -> RenewTaskList と移って処理する。
+     * RenewTaskList が終了したとき、再び TaskList に戻ってくるが
+     * Renew Task を生成した所から再スタートするため、
+     * taskList の index を覚えておく (backup)
+     * 同様に TaskList も覚えておく
+     */
+    int bakIndex_taskList;
+    TaskListPtr bak_curTaskList;
+    
+
+    /**
+     * タスク内で生成されたタスクを入れる
+     * Linked List で管理
+     */
+    TaskListPtr renewCur_taskList;
+    TaskListPtr renewTop_taskList;
+
+    /**
+     * 実行中 TaskList が Renew されたものかどうかのフラグ
+     * Renew の場合、ListData は DMA する必要ないとか
+     * いろいろな判定に使えるかもしれん
+     * if (flag == 1) taskList is Renew
+     */
+    int flag_renewTaskList;
+
+    /**
+     * タスク内 (T1) でタスク (Tc = T2, T3, ..) が複数生成された場合、
+     * Tc が全て終わってから、T1 の終了コマンドを PPE に送る。
+     * なので、Tc を process group として記憶しておく。
+     *
+     * Tc が taskGroup のアドレスを持つので
+     * Scheduler が持つ taskGroup 変数は一つだけで(多分)おk
+     */
+    TaskGroupPtr taskGroup;
+
+    /* GlobalMemoryList */
+    void* globalList[MAX_GLOBAL_AREA];
+
+    /* MainMemory Allocate Command List */
+    void* mainMemList[MAX_MAINMEM_AREA];
+
+    // 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);
+
+    DmaManager* connector;
+
+    // Pipeline Stage
+    SchedTaskBase* task1;
+    SchedTaskBase* task2;
+    SchedTaskBase* task3;
+
+    /* functions */
+    void init(void);
+    void run(void);
+    virtual void init_impl(void) {};
+    void finish(void);
+
+    TaskListPtr get_curListBuf(void);
+    ListDataPtr get_curReadBuf(void);
+    ListDataPtr get_curWriteBuf(void);
+    TaskListPtr get_renewListBuf(void);
+
+    void set_backupTaskList(TaskListPtr cur_taskList);
+    void set_backupTaskListIndex(int cur_index);
+    SchedTaskList* get_nextRenewTaskList(void);
+    TaskListPtr get_backupTaskList(void);
+    int get_backupTaskListIndex(void);
+
+    // なんか名前が変だが。。。
+    /* TaskGroup */
+    TaskGroupPtr set_groupTask(uint32 command);
+    void add_groupTask(TaskGroupPtr group, TaskPtr task);
+    void remove_groupTask(TaskGroupPtr group, TaskPtr task);
+    void reload_groupTask(void);
+    uint32 status_groupTask(TaskGroupPtr group);
+
+    /* GlobalMemory */
+    void* global_alloc(int id, int size);
+    void* global_get(int id);
+    void global_free(int id);
+    
+    virtual void *allocate(int size) { return NULL; };
+
+    virtual void mainMem_alloc(int id, int size) {};
+    virtual void mainMem_wait(void) {};
+    void *mainMem_get(int id);
+
+    /* DMA Transfer */
+    void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
+    void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask);
+    void dma_wait(uint32 mask);
+    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);
+    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);
+#endif
+
+
+#define SchedConstructor(str)						\
+    str(void) {}							\
+    BASE_NEW_DELETE(str)						\
+
+#define SchedDefineTask(str)						\
+    SchedTask* createTask_##str(void)					\
+    {									\
+	return new str();						\
+    }
+
+#define SchedExternTask(str)						\
+    extern								\
+    SchedTask* createTask_##str(void);
+
+#define SchedRegisterTask(cmd, str)		\
+    register_task(cmd, createTask_##str);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/schedule/TaskGroup.h	Mon Jul 27 15:51:18 2009 +0900
@@ -0,0 +1,36 @@
+#ifndef INCLUDED_TASK_GROUP
+#define INCLUDED_TASK_GROUP
+
+#include "base.h"
+#include "TaskQueue.h"
+
+class TaskGroup {
+public:
+    TaskGroup(void): group(NULL) {}
+
+    BASE_NEW_DELETE(TaskGroup);
+
+    unsigned int command;
+    TaskQueuePtr group;
+
+    /**
+     * 待つ Task を追加
+     */
+    void add(TaskPtr add_task);
+
+    /**
+     * 終了した Task を group から削除
+     */
+    void remove(TaskPtr delete_task);
+
+    /**
+     * 空 (待つタスクが無い) の時が、この TaskGroup が持つ、
+     * PPE に送るべきコマンドを返す。
+     * まだ待つべきタスクがある場合は 0 を返す
+     */
+    unsigned int status(void);
+};
+
+typedef TaskGroup* TaskGroupPtr;
+
+#endif
--- a/example/MemList/main.cc	Fri Jul 24 18:08:43 2009 +0900
+++ b/example/MemList/main.cc	Mon Jul 27 15:51:18 2009 +0900
@@ -19,15 +19,17 @@
 int
 main(int argc, char *argv[])
 {
-	uint32 size = 128;
-	uint32 count = 64;
-
-	MemList* active = createMemList(size, 0);
-	MemList* freelist = createMemList(size,count);
-
-	// 配列!
-	for () {
-		MemorySegment* e = freelost.getFirst();
-	}		
-	return 0;
+    uint32 size = 128;
+    uint32 count = 64;
+    
+    MemList* active = createMemList(size, 0);
+    MemList* freelist = createMemList(size, count);
+    
+    // 配列!
+    for (int i = 0; i < count; i++) {
+	MemorySegment* e;
+	active->addFirst()
+    }		
+    
+    return 0;
 }
--- a/include/TaskManager/BufferManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#ifndef INCLUDED_BUFFER_MANAGER
-#define INCLUDED_BUFFER_MANAGER
-
-#include "types.h"
-#include "TaskListInfo.h"
-#include "TaskQueueInfo.h"
-#include "HTaskInfo.h"
-
-/*!
- *   Task Input/Output buffer manager
- *
- */
-
-class BufferManager {
-public:
-    /* constructor */
-    BufferManager(int num = 1);
-    virtual ~BufferManager(void);
-    
-    /* variables */
-    TaskListInfo *taskListImpl;
-    TaskQueueInfo *taskQueueImpl;
-    HTaskInfo *htaskImpl;
-
-    int machineNum;
-
-    /* function */
-    virtual void init(void);
-
-    // TaskList
-    TaskListPtr create_taskList(void);
-    void free_taskList(TaskListPtr);
-    TaskListPtr clear_taskList(TaskListPtr);
-
-    // TaskQueue
-    TaskQueuePtr create_taskQueue(HTaskPtr);
-    void free_taskQueue(TaskQueuePtr);
-
-    // HTask
-    HTaskPtr create_task(int cmd);
-    void free_task(HTaskPtr);
-
-
-    void finish(void);
-private:
-};
-
-#endif
--- a/include/TaskManager/CellBufferManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-#ifndef INCLUDED_CELL_BUFFER_MANAGER
-#define INCLUDED_CELL_BUFFER_MANAGER
-
-#include "base.h"
-#include "BufferManager.h"
-
-class CellBufferManager : public BufferManager {
-public:
-    CellBufferManager(int num) :BufferManager(num){}
-
-    BASE_NEW_DELETE(CellBufferManager);
-
-    void init(void);
-};
-
-#endif
--- a/include/TaskManager/CellDmaManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-#ifndef INCLUDED_CELL_DMA_MANAGER
-#define INCLUDED_CELL_DMA_MANAGER
-
-#include "base.h"
-#include "DmaManager.h"
-
-#include <spu_mfcio.h>
-
-#define SPU_PROFILE 1
-
-class CellDmaManager : public DmaManager {
-public:
-    BASE_NEW_DELETE(CellDmaManager);
-
-    typedef struct dma_list {
-	memaddr addr;
-	uint32 size;
-    } DmaList, *DmaListPtr;
-
-    /* variables */
-    unsigned int wait_time, busy_time;
-    unsigned long long global_busy_time, global_wait_time;
-
-    /* functions */
-    void dma_load(void *buf, memaddr addr, uint32 size, uint32 mask);
-    void dma_store(void *buf, memaddr addr, uint32 size, uint32 mask);
-    void dma_wait(uint32 mask) ;
-    void start_dmawait_profile();
-    void end_dmawait_profile();
-    void show_dma_wait(int cpu);
-
-    void mail_write(uint32 data);
-    uint32 mail_read(void);
-    void dma_loadList(ListDataPtr list, void *buff, uint32 mask);
-    void dma_storeList(ListDataPtr, void *buff, uint32 mask);
-};
-
-#endif
--- a/include/TaskManager/CellHTaskInfo.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#ifndef INCLUDED_CELL_HTASK_INFO
-#define INCLUDED_CELL_HTASK_INFO
-
-#include "HTaskInfo.h"
-
-class CellHTaskInfo : public HTaskInfo {
-public:
-    /* functions */
-    int extend_pool(int num);
-};
-
-#endif
--- a/include/TaskManager/CellScheduler.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-#ifndef INCLUDED_CELL_SCHEDULER
-#define INCLUDED_CELL_SCHEDULER
-
-#include "base.h"
-#include "Scheduler.h"
-
-class CellScheduler : public Scheduler {
-public:
-    BASE_NEW_DELETE(CellScheduler);
-
-    void init_impl(void);
-
-    void *allocate(int size);
-    void mainMem_alloc(int id, int size);
-    void mainMem_wait(void);
-
-private:
-    int mainMemNum;
-};
-
-#endif
--- a/include/TaskManager/CellTaskInfo.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-#ifndef INCLUDED_CELL_TASK_INFO
-#define INCLUDED_CELL_TASK_INFO
-
-#include "base.h"
-#include "TaskInfo.h"
-
-class CellTaskInfo : public TaskInfo {
-public:
-    BASE_NEW_DELETE(CellTaskInfo);
-
-    /* function */
-    int extend_pool_taskList(int num);
-    TaskListPtr get_available_taskList(void);
-    void clear_taskList(void);
-};
-
-#endif
--- a/include/TaskManager/CellTaskListInfo.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-#ifndef INCLUDED_CELL_TASK_LIST_INFO
-#define INCLUDED_CELL_TASK_LIST_INFO
-
-#include "TaskListInfo.h"
-
-class CellTaskListInfo : public TaskListInfo {
-public:
-    /* functions */
-    int extend_pool(int num);
-};
-
-#endif
--- a/include/TaskManager/CellTaskManagerImpl.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#ifndef INCLUDED_CELL_TASK_MANAGER_IMPL
-#define INCLUDED_CELL_TASK_MANAGER_IMPL
-
-#include "TaskManagerImpl.h"
-#include "FifoTaskManagerImpl.h"
-#include "SpeThreads.h"
-
-class CellTaskManagerImpl : public TaskManagerImpl {
-public:
-    /* constructor */
-    CellTaskManagerImpl(int num = 1) : TaskManagerImpl(num) {}
-    ~CellTaskManagerImpl(void);
-
-    /* variables */
-    TaskListPtr *speTaskList;
-    TaskListPtr *speTaskList_bg;
-
-    SpeThreads *speThreads;
-    int *flag_sendTaskList;
-    FifoTaskManagerImpl *ppeManager;
-
-    /* functions */
-    // system
-    void init(void);
-    void run(void);
-    TaskListPtr mail_check(MailQueuePtr mail_list);
-    void set_runTaskList(void);
-    void append_activeTask(HTaskPtr);
-
-    // user
-    int add_data(ListDataPtr, uint32, int);
-    void* allocate(int size);
-
-private:
-    void send_taskList(int id);
-};
-
-#ifdef Cerium_malloc
-#undef Cerium_malloc
-#endif
-
-#define Cerium_malloc(dest, align, size) \
-    posix_memalign((void**)(dest), (align), (size))
-
-#endif
--- a/include/TaskManager/DmaBuffer.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-#ifndef INCLUDED_DMA_BUFFER
-#define INCLUDED_DMA_BUFFER
-
-#include "base.h"
-
-class DmaBuffer {
-public:
-    /* constructor */
-    DmaBuffer(int size = 4);
-    ~DmaBuffer(void);
-
-    BASE_NEW_DELETE(DmaBuffer);
-
-    /* variables */
-    void *buffer[2];
-    int flag; // variable that select buffer[0 or 1]
-    
-    /* functions */
-    void swap_buffer(void);
-    void get_buffer(void*);
-};
-
-#endif
--- a/include/TaskManager/DmaManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-#ifndef INCLUDED_DMA_MANAGER
-#define INCLUDED_DMA_MANAGER
-
-#include "base.h"
-#include "ListData.h"
-#include "types.h"
-
-enum dma_tag {
-    DMA_READ  = 25,
-    DMA_WRITE = 27,
-    DMA_READ_IN_LIST  = 29,
-    DMA_READ_OUT_LIST = 30,
-    DMA_READ_TASKLIST = 31,
-};
-
-class DmaManager {
-public:
-    virtual ~DmaManager(void) {};
-
-    BASE_NEW_DELETE(DmaManager);
-
-    // API for DMA transfer
-    virtual void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask) {}
-    virtual void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask) {}
-    virtual void dma_wait(uint32 mask) {}
-    virtual void show_dma_wait(int cpu) {}
-
-    // API for SPU inbound/outbound mailbox
-    virtual void mail_write(uint32 data) {}
-    virtual uint32 mail_read(void) {return 0;}
-    
-    // API for MFC list DMA transfer
-    virtual void dma_loadList(ListDataPtr list, void *,uint32 mask) {}
-    virtual void dma_storeList(ListDataPtr, void *buff, uint32 mask) {}
-};
-
-#endif
--- a/include/TaskManager/FifoDmaManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#ifndef INCLUDED_FIFO_DMA_MANAGER
-#define INCLUDED_FIFO_DMA_MANAGER
-
-#include "base.h"
-#include "DmaManager.h"
-#include "MailManager.h"
-
-class FifoDmaManager : public DmaManager {
-public:
-    BASE_NEW_DELETE(FifoDmaManager);
-
-    /* variables */
-    MailManager *mailManager;
-    MailQueuePtr mail_recvQueue;
-    MailQueuePtr mail_sendQueue;
-
-    /* functions */
-    void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
-    void dma_store(void *buf, uint32 addr, uint32 size, uint32 mask);
-    void dma_wait(uint32 mask) ;
-
-    void mail_write(uint32 data);
-    uint32 mail_read(void);
-
-    void dma_loadList(ListDataPtr list, void *buff, uint32 mask);
-    void dma_storeList(ListDataPtr, void *buff, uint32 mask);
-    //void* dma_loadList(ListDataPtr list, void *buff, uint32 mask);
-};
-
-#endif
--- a/include/TaskManager/FifoTaskManagerImpl.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-#ifndef INCLUDED_FIFO_TASK_MANAGER_IMPL
-#define INCLUDED_FIFO_TASK_MANAGER_IMPL
-
-#include "TaskManagerImpl.h"
-#include "MainScheduler.h"
-
-class FifoTaskManagerImpl : public TaskManagerImpl {
-public:
-    /* constructor */
-    FifoTaskManagerImpl(int num = 1) : TaskManagerImpl(num) {}
-    ~FifoTaskManagerImpl(void);
-
-    /* variables */
-    int machineNum;
-    TaskListPtr mainTaskList;
-
-    MailManager *mailManager;
-    MainScheduler *scheduler;
-
-    /* functions */
-    // call by system
-    void init(void);
-    void init(MainScheduler*, BufferManager*);
-    void run(void);
-    void mail_check(MailQueuePtr mail_list);
-    void mail_check(MailQueuePtr mail_list, TaskQueuePtr *waitQueue);
-    TaskListPtr get_runTaskList(void);
-    MailQueuePtr schedule(TaskListPtr);
-
-    // call by user
-    int add_data(ListDataPtr, uint32, int);
-    void* allocate(int size);
-};
-
-#ifndef Cerium_malloc
-#define Cerium_malloc(dest, align, size) \
-    *dest = malloc(size);
-#endif /* Cerium_malloc */
-
-#endif /* INCLUDED_FIFO_TASK_MANAGER_IMPL */
--- a/include/TaskManager/HTask.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#ifndef INCLUDED_HTASK
-#define INCLUDED_HTASK
-
-#include "base.h"
-#include "types.h"
-#include "Task.h"
-#include "TaskQueueInfo.h"
-
-class TaskManagerImpl;
-
-/*!
-  @class
-  
-  @brief
-  
-  Cerium の Task で、spawn() でキューに格納されて順次実行される。
-  cpu の指定があれば並列に実行される。
-  特定の Task を待ち合わせる事が可能。
-  Task の入出力は dma などで copy される。
- */
-
-class HTask : public Task {
-public:
-    BASE_NEW_DELETE(HTask);
-
-    TaskQueuePtr wait_me;  // List of task waiting for me
-    TaskQueuePtr wait_i;   // List of task for which I am waiting
-    void (*post_func)(void *);
-    void *post_arg;
-    CPU_TYPE cpu_type;
-    HTask *next;
-    TaskManagerImpl *mimpl;
-
-    void spawn(void);
-    void wait_for(HTask *);
-    void set_cpu(CPU_TYPE type);
-    void set_post(void (*func)(void *), void *arg);
-};
-
-typedef HTask* HTaskPtr;
-
-#endif
--- a/include/TaskManager/HTaskInfo.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#ifndef INCLUDED_HTASK_INFO
-#define INCLUDED_HTASK_INFO
-
-#include "HTask.h"
-
-class HTaskInfo {
-public:
-    /* constructor */
-    HTaskInfo(void);
-    virtual ~HTaskInfo(void);
-
-    /* functions */
-    int init(int num);
-    HTaskPtr create(int cmd);
-    void free(HTaskPtr q);
-    virtual int extend_pool(int num);
-
-protected:
-    /* variables */
-    HTaskPtr htaskPool;
-    HTaskPtr freeHTask;
-
-    /* functions */
-    void destroy(void);
-    
-private:
-};
-
-#endif
--- a/include/TaskManager/ListData.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#ifndef INCLUDED_LIST_DATA
-#define INCLUDED_LIST_DATA
-
-#include "base.h"
-
-#define MAX_LIST_DMA_SIZE 8
-
-class ListElement {
-public:
-    BASE_NEW_DELETE(ListElement);
-
-    int size;
-    unsigned int addr;
-};
-
-typedef ListElement* ListElementPtr;
-
-class ListData {
-public:
-    BASE_NEW_DELETE(ListData);
-
-    int length; // The number of data (4)
-    int size;   // Total size of data (4)
-    int a[2]; // for alignment
-    int bound[MAX_LIST_DMA_SIZE]; // (4 * MAX_LIST_DMA_SIZE)
-    ListElement element[MAX_LIST_DMA_SIZE]; // (8 * MAX_LIST_DMA_SIZE)
-
-    void clear(void) {
-	length = 0;
-	size = 0;
-    }
-};
-
-typedef ListData* ListDataPtr;
-
-#endif
--- a/include/TaskManager/MailManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#ifndef INCLUDED_MAIL_MANAGER
-#define INCLUDED_MAIL_MANAGER
-
-typedef struct mail_queue {
-    unsigned int data;
-    struct mail_queue *next;
-} MailQueue, *MailQueuePtr;
-
-class MailManager {
-public:
-    /* constructor */
-    MailManager(void);
-    ~MailManager(void);
-
-    /* functions */
-    int init(int num);
-    MailQueuePtr create(unsigned int data);
-    void free(MailQueuePtr q);
-    static MailQueuePtr append_mailQueue(MailQueuePtr list, MailQueuePtr q);
-
-private:
-    /* variables */
-    MailQueuePtr mailQueuePool;
-    MailQueuePtr freeMailQueue;
-
-    /* functions */
-    int extend_pool(int num);
-    void destroy(void);
-};
-
-#endif
--- a/include/TaskManager/MainScheduler.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#ifndef INCLUDED_MAIN_SCHEDULER
-#define INCLUDED_MAIN_SCHEDULER
-
-#include "Scheduler.h"
-#include "MailManager.h"
-
-class MainScheduler : public Scheduler {
-public:
-    ~MainScheduler(void) {}
-
-    void init_impl(void);
-    void set_mailManager(MailManager *);
-    void send_mailList(MailQueuePtr mail_list);
-    MailQueuePtr recv_mailList(void);
-
-    virtual void *allocate(int size);
-    void mainMem_alloc(int id, int size);
-};
-
-#endif
--- a/include/TaskManager/PpeScheduler.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-#ifndef INCLUDED_PPE_SCHEDULER
-#define INCLUDED_PPE_SCHEDULER
-
-#include "MainScheduler.h"
-
-class PpeScheduler : public MainScheduler {
-public:
-    void *allocate(int size);
-};
-
-#endif
--- a/include/TaskManager/Random.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#ifndef INCLUDED_RANDOM
-#define INCLUDED_RANDOM
-
-class Random {
-public:
-    Random(void);
-    Random(unsigned int seed);
-
-    void reset(void);
-    int getData(void);
-};
-
-typedef Random *RandomPtr;
-
-#endif
--- a/include/TaskManager/SchedExit.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-#ifndef INCLUDED_SCHED_EXIT
-#define INCLUDED_SCHED_EXIT
-
-#include "base.h"
-#include "Scheduler.h"
-#include "SchedTaskBase.h"
-
-
-class SchedExit : public SchedTaskBase {
-public:
-    BASE_NEW_DELETE(SchedExit);
-    
-    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
-};
-
-#endif
--- a/include/TaskManager/SchedMail.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#ifndef INCLUDED_SCHED_MAIL
-#define INCLUDED_SCHED_MAIL
-
-#include "base.h"
-#include "Scheduler.h"
-#include "SchedTaskBase.h"
-
-#include "error.h"
-
-class SchedMail : public SchedTaskBase{
-public:
-    /* constructor */
-    SchedMail(Scheduler *);
-
-    BASE_NEW_DELETE(SchedMail);
-
-    /* variables */
-    unsigned int params_addr;
-    Scheduler* scheduler;
-
-    /* functions */
-    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
-
-#if DEBUG
-    void read(void)  { __debug("[SchedMail:%s]\n", __FUNCTION__); }
-    void exec(void)  { __debug("[SchedMail:%s]\n", __FUNCTION__); }
-    void write(void) { __debug("[SchedMail:%s]\n", __FUNCTION__); }
-#endif
-};
-
-#endif
--- a/include/TaskManager/SchedNop.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-#ifndef INCLUDED_SCHED_NOP
-#define INCLUDED_SCHED_NOP
-
-#include "base.h"
-#include "Scheduler.h"
-#include "SchedTaskBase.h"
-
-#include "error.h"
-
-class SchedNop : public SchedTaskBase {
-public:
-    BASE_NEW_DELETE(SchedNop);
-
-    /* functions */
-    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
-};
-
-#endif
--- a/include/TaskManager/SchedNop2Ready.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#ifndef INCLUDED_SCHED_NOP2READY
-#define INCLUDED_SCHED_NOP2READY
-
-#include "base.h"
-#include "Scheduler.h"
-#include "SchedTaskBase.h"
-#include "SchedNop.h"
-
-#include "error.h"
-
-class SchedNop2Ready : public SchedNop {
-public:
-    /* constructor */
-    SchedNop2Ready(Scheduler*);
-
-    BASE_NEW_DELETE(SchedNop2Ready);
-
-    /* variables */
-    Scheduler* scheduler;
-
-    /* functions */
-    void exec(void);
-    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
-
-#if DEBUG
-    void read(void)  { __debug("[SchedNop2Ready:%s]\n", __FUNCTION__); }
-    void write(void) { __debug("[SchedNop2Ready:%s]\n", __FUNCTION__); }
-#endif
-};
-
-#endif
--- a/include/TaskManager/SchedTask.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-#ifndef INCLUDED_SCHED_TASK
-#define INCLUDED_SCHED_TASK
-
-#include "base.h"
-#include "Scheduler.h"
-#include "SchedTaskBase.h"
-#include "ListData.h"
-#include "TaskGroup.h"
-
-class SchedTask : public SchedTaskBase {
-public:
-    /* constructor */
-    SchedTask();
-    virtual ~SchedTask();
-
-    BASE_NEW_DELETE(SchedTask);
-
-    SchedTask *smanager;
-
-private:
-    /* variables */
-
-    // Task を実行するスケジューラ自身
-    Scheduler *__scheduler;
-
-    // 現在スケジューラが実行している TaskList と、このタスクに対応する Task
-    TaskListPtr __list;
-    TaskPtr __task;
-
-    // read/write 用の ListData
-    ListDataPtr __inListData;
-    ListDataPtr __outListData;
-
-    /**
-     * read データ、write 用のバッファ
-     * readbuf には タスク登録時に設定した入力データが入っている。
-     * writebuf にデータを描き込んでおくと、
-     * タスク登録時に設定した出力先に書き込む
-     */
-    void *__readbuf;
-    void *__writebuf;
-
-    // Task の、Tasklist での位置。(task = &list[cur_index-1])
-    int __cur_index;
-
-    // タスク内で生成されたタスクのグループ
-    TaskGroup *__taskGroup;
-
-    // このタスク内で生成されたタスクの数
-    int __renew_flag;
-
-    // このタスクが SPE 内で生成されたタスクか否か 1: Yes, 0: No
-    int __flag_renewTask;
-
-    // タスクがメインメモリ側で生成されたものか、
-    // SPE で生成されたものかによって、データの扱いが変わってくる。
-    // そのために if (__flag_renewTask) を連発するのはよくないので
-    // 関数ポインタで持っておく
-    void (SchedTask::*ex_init)();
-    void (SchedTask::*ex_read)();
-    void (SchedTask::*ex_exec)();
-    void (SchedTask::*ex_write)();
-    SchedTaskBase* (SchedTask::*ex_next)();
-   
-    /* functions */
-
-    // override
-    void read();
-    void exec();
-    void write();
-    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
-
-    // ここをユーザが継承して
-    // それぞれのタスクに対応した処理を記述する
-    virtual int run(SchedTask* smanager, void* r, void *w) { return 0; }
-    virtual int run(void* r, void *w) { return 0; }
-
-    int (SchedTask::*run_func)(void* r, void *w);
-    int (SchedTask::*run_func1)(SchedTask* smanager, void* r, void *w);
-
-    //---  System API ---
-    SchedTask* get_nextTask(TaskListPtr list);
-    
-    /**
-     * PPE で生成されたタスクに対する
-     * __init__, read,exec,write,next の付属(?)処理
-     */
-    void ex_init_normal();
-    void ex_read_normal();
-    void ex_exec_normal();
-    void ex_write_normal();
-    SchedTaskBase* ex_next_normal();
-
-    /**
-     * SPE で生成されたタスクに対する
-     * __inti__, ead,exec,write,next の付属(?)処理
-     */
-    void ex_init_renew();
-    void ex_read_renew();
-    void ex_exec_renew();
-    void ex_write_renew();
-    SchedTaskBase* ex_next_renew();
-
-public:
-    /* functions */
-
-    void __setRenew();
-    void __init__(TaskListPtr _list, TaskPtr _task, int index,
-		  ListDataPtr rbuf, ListDataPtr wbuf, Scheduler* sc);
-
-    //---  User API ---
-    int get_cpuid();
-
-    void* get_input(void *buff, int index);
-    void* get_output(void *buff, int index);
-    uint32 get_inputAddr(int index);
-    uint32 get_outputAddr(int index);
-    int get_inputSize(int index);
-    int get_outputSize(int index);
-    int get_param(int index);
-
-    TaskPtr create_task(int cmd);
-    void wait_task(TaskPtr waitTask);
-
-    void* global_alloc(int id, int size);
-    void* global_get(int id);
-    void global_free(int id);
-
-    void mainMem_alloc(int id, int size);
-    void mainMem_wait();
-    void* mainMem_get(int id);
-
-    void *allocate(int size);
-
-    void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
-    void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask);
-    void dma_wait(uint32 mask);
-    void show_dma_wait();
-    
-    /*!
-      SPU用の get_input, get_output
-     */
-
-    void* get_input(int index) {
-      return get_input(__readbuf, index);
-    }
-    
-    void* get_output(int index) {
-      return get_output(__writebuf, index);
-    }     
-};
-
-const int SCHED_TASK_NORMAL = 0;
-const int SCHED_TASK_RENEW  = 1;
-
-extern SchedTask* createSchedTask(TaskPtr);
-
-#endif
-
--- a/include/TaskManager/SchedTaskBase.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#ifndef INCLUDED_SCHED_TASK_BASE
-#define INCLUDED_SCHED_TASK_BASE
-
-#include "base.h"
-#include "Scheduler.h"
-
-class Scheduler;
-
-class SchedTaskBase {
-public:
-    /* constructor */
-    SchedTaskBase(void) {}
-    virtual ~SchedTaskBase(void) {}
-
-    BASE_NEW_DELETE(SchedTaskBase);
-
-    // noaction in default
-    virtual void load(void)  {}
-    virtual void read(void)  {}
-    virtual void exec(void)  {}
-    virtual void write(void) {}
-
-    /* functions */
-    virtual SchedTaskBase* next(Scheduler*, SchedTaskBase*) {return 0;}
-};
-
-#endif
--- a/include/TaskManager/SchedTaskList.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#ifndef INCLUDED_SCHED_TASKLIST
-#define INCLUDED_SCHED_TASKLIST
-
-#include "base.h"
-#include "Scheduler.h"
-#include "SchedTaskBase.h"
-
-#include "error.h"
-
-class SchedTaskList : public SchedTaskBase {
-public:
-    /* constructor */
-    SchedTaskList(unsigned int addr, Scheduler *sched);
-
-    BASE_NEW_DELETE(SchedTaskList);
-
-    /* variables */
-    unsigned int params_addr;
-    TaskListPtr list;
-    Scheduler *scheduler;
-
-    int flag_renewTaskList;
-
-    /* functions */
-    SchedTaskBase* next(Scheduler *, SchedTaskBase *);
-    
-    /* override functions */
-    void read(void);
-
-#ifdef DEBUG
-    void exec(void)  { __debug("[SchedTaskList:%s]\n", __FUNCTION__); }
-    void write(void) { __debug("[SchedTaskList:%s]\n", __FUNCTION__); }
-#endif
-
-};
-
-const int SCHED_TASKLIST_NORMAL = 0;
-const int SCHED_TASKLIST_RENEW  = 1;
-
-extern SchedTaskList* createSchedTaskList(uint32, Scheduler*, int);
-
-#endif
-
--- a/include/TaskManager/Scheduler.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-#ifndef INCLUDED_SCHEDULER
-#define INCLUDED_SCHEDULER
-
-#include "base.h"
-#include "TaskList.h"
-#include "ListData.h"
-#include "DmaManager.h"
-#include "SchedTaskBase.h"
-#include "SchedTaskList.h"
-#include "TaskGroup.h"
-
-
-#define MAX_USER_TASK 32
-#define MAX_SYSTEM_TASK 2
-#define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK
-#define MAX_GLOBAL_AREA 32
-#define MAX_MAINMEM_AREA 32
-
-class SchedTaskBase;
-class SchedTask;
-class SchedTaskList;
-
-class Scheduler {
-public:
-    virtual ~Scheduler(void);
-
-    BASE_NEW_DELETE(Scheduler);
-
-    /* variables */
-    int id;
-
-    // double buffering
-    TaskListPtr buff_taskList[2];
-    ListDataPtr buff_inListData[2];
-    ListDataPtr buff_outListData[2];
-
-    int buffFlag_taskList;
-    int buffFlag_inListData;
-    int buffFlag_outListData;
-
-    /* TaskList 関連 */
-
-    /**
-     * 実行中 TaskList の現在の位置 (list->tasks[index])
-     * 
-     * bakIndex_taskList がある理由
-     * taskList の途中で renew task が作られたとき、
-     * 即座に実行するため、TaskList -> RenewTaskList と移って処理する。
-     * RenewTaskList が終了したとき、再び TaskList に戻ってくるが
-     * Renew Task を生成した所から再スタートするため、
-     * taskList の index を覚えておく (backup)
-     * 同様に TaskList も覚えておく
-     */
-    int bakIndex_taskList;
-    TaskListPtr bak_curTaskList;
-    
-
-    /**
-     * タスク内で生成されたタスクを入れる
-     * Linked List で管理
-     */
-    TaskListPtr renewCur_taskList;
-    TaskListPtr renewTop_taskList;
-
-    /**
-     * 実行中 TaskList が Renew されたものかどうかのフラグ
-     * Renew の場合、ListData は DMA する必要ないとか
-     * いろいろな判定に使えるかもしれん
-     * if (flag == 1) taskList is Renew
-     */
-    int flag_renewTaskList;
-
-    /**
-     * タスク内 (T1) でタスク (Tc = T2, T3, ..) が複数生成された場合、
-     * Tc が全て終わってから、T1 の終了コマンドを PPE に送る。
-     * なので、Tc を process group として記憶しておく。
-     *
-     * Tc が taskGroup のアドレスを持つので
-     * Scheduler が持つ taskGroup 変数は一つだけで(多分)おk
-     */
-    TaskGroupPtr taskGroup;
-
-    /* GlobalMemoryList */
-    void* globalList[MAX_GLOBAL_AREA];
-
-    /* MainMemory Allocate Command List */
-    void* mainMemList[MAX_MAINMEM_AREA];
-
-    // 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);
-
-    DmaManager* connector;
-
-    // Pipeline Stage
-    SchedTaskBase* task1;
-    SchedTaskBase* task2;
-    SchedTaskBase* task3;
-
-    /* functions */
-    void init(void);
-    void run(void);
-    virtual void init_impl(void) {};
-    void finish(void);
-
-    TaskListPtr get_curListBuf(void);
-    ListDataPtr get_curReadBuf(void);
-    ListDataPtr get_curWriteBuf(void);
-    TaskListPtr get_renewListBuf(void);
-
-    void set_backupTaskList(TaskListPtr cur_taskList);
-    void set_backupTaskListIndex(int cur_index);
-    SchedTaskList* get_nextRenewTaskList(void);
-    TaskListPtr get_backupTaskList(void);
-    int get_backupTaskListIndex(void);
-
-    // なんか名前が変だが。。。
-    /* TaskGroup */
-    TaskGroupPtr set_groupTask(uint32 command);
-    void add_groupTask(TaskGroupPtr group, TaskPtr task);
-    void remove_groupTask(TaskGroupPtr group, TaskPtr task);
-    void reload_groupTask(void);
-    uint32 status_groupTask(TaskGroupPtr group);
-
-    /* GlobalMemory */
-    void* global_alloc(int id, int size);
-    void* global_get(int id);
-    void global_free(int id);
-    
-    virtual void *allocate(int size) { return NULL; };
-
-    virtual void mainMem_alloc(int id, int size) {};
-    virtual void mainMem_wait(void) {};
-    void *mainMem_get(int id);
-
-    /* DMA Transfer */
-    void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
-    void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask);
-    void dma_wait(uint32 mask);
-    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);
-    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);
-#endif
-
-
-#define SchedConstructor(str)						\
-    str(void) {}							\
-    BASE_NEW_DELETE(str)						\
-
-#define SchedDefineTask(str)						\
-    SchedTask* createTask_##str(void)					\
-    {									\
-	return new str();						\
-    }
-
-#define SchedExternTask(str)						\
-    extern								\
-    SchedTask* createTask_##str(void);
-
-#define SchedRegisterTask(cmd, str)		\
-    register_task(cmd, createTask_##str);
--- a/include/TaskManager/SpeThreads.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-#ifndef INCLUDED_SPE_THREADS
-#define INCLUDED_SPE_THREADS
-
-#include <libspe2.h>
-#include <pthread.h>
-
-#define SPE_ELF "spe-main"
-
-typedef struct arg {
-    int speid;
-    spe_context_ptr_t ctx;
-} thread_arg_t;
-
-class SpeThreads {
-public:
-    /* constructor */
-    SpeThreads(int num = 1);
-    ~SpeThreads(void);
-
-    /* functions */
-    void init(void);
-    int get_mail(int speid, int count, unsigned int* ret); // BLOCKING
-    int check_mail(int speid, int count, unsigned int* ret); // NONBLOCK
-    void send_mail(int speid, int num, unsigned int *data); // BLOCKING
-    static void *spe_thread_run(void *arg);
-    static void *frontend_thread_run(void *arg);
-    void add_output_tasklist(int command, unsigned int buff, int alloc_size);
-
-private:
-    /* variables */
-    spe_program_handle_t *spe_handle;
-    spe_context_ptr_t *spe_ctx;
-    pthread_t *threads;
-    thread_arg_t *args;
-    int spe_num;
-};
-
-#endif
--- a/include/TaskManager/SymTable.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#ifndef INCLUDED_SYMTABLE
-#define INCLUDED_SYMTABLE
-
-#define SYM_MAX_SIZE 64
-
-class SymTable {
-public:
-    ~SymTable(void);
-
-    typedef int (*FuncObject)(void *, void*);
-
-    typedef struct sym_table {
-	 char *sym;
-	 FuncObject address;
-    } SymTb, *SymTbPtr;
-
-    SymTbPtr symtb;
-    int symtb_index;
-
-    void init(void);
-    void set_symbol(const char *sym, FuncObject addr);
-    void set_func(int id, FuncObject addr);
-    int get_fd(const char *sym);
-    FuncObject get_address(int fd);
-};
-
-#endif
--- a/include/TaskManager/Task.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-#ifndef INCLUDED_TASK
-#define INCLUDED_TASK
-
-#include "base.h"
-#include "types.h"
-#include "ListData.h"
-
-#define MAX_PARAMS 8
-
-class Task {
-public: // variables
-
-    BASE_NEW_DELETE(Task);
-
-    int command;         // 4 byte
-    ListDataPtr inData;  // 4 byte 64bit であるべき
-    ListDataPtr outData; // 4 byte 64bit であるべき
-    uint32 self;         // 4 byte
-
-    int param_size;        // 4 byte
-    int param[MAX_PARAMS]; // 4*MAX_PARAMS byte
-
-public: // functions
-    int add_inData_t(unsigned int addr, int size);  // unsigned int ではなく 64bit
-    int add_outData_t(unsigned int addr, int size); // unsigned int ではなく 64bit
-    int add_data(ListDataPtr list, unsigned int addr, int size);
-    int add_param(int param);
-
-#define add_inData(addr, size)			\
-    add_inData_t((unsigned int)(addr), (size));
-#define add_outData(addr, size)			\
-    add_outData_t((unsigned int)(addr), (size));
-};
-
-typedef Task* TaskPtr;
-
-#endif
--- a/include/TaskManager/TaskGroup.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#ifndef INCLUDED_TASK_GROUP
-#define INCLUDED_TASK_GROUP
-
-#include "base.h"
-#include "TaskQueue.h"
-
-class TaskGroup {
-public:
-    TaskGroup(void): group(NULL) {}
-
-    BASE_NEW_DELETE(TaskGroup);
-
-    unsigned int command;
-    TaskQueuePtr group;
-
-    /**
-     * 待つ Task を追加
-     */
-    void add(TaskPtr add_task);
-
-    /**
-     * 終了した Task を group から削除
-     */
-    void remove(TaskPtr delete_task);
-
-    /**
-     * 空 (待つタスクが無い) の時が、この TaskGroup が持つ、
-     * PPE に送るべきコマンドを返す。
-     * まだ待つべきタスクがある場合は 0 を返す
-     */
-    unsigned int status(void);
-};
-
-typedef TaskGroup* TaskGroupPtr;
-
-#endif
--- a/include/TaskManager/TaskList.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-#ifndef INCLUDED_TASKLIST
-#define INCLUDED_TASKLIST
-
-#include "base.h"
-#include "Task.h"
-
-
-// sizeof(Task)*TASK_MAX_SIZE = 512 byte
-#define TASK_MAX_SIZE 16
-
-class TaskList { // 528byte
-public:
-    BASE_NEW_DELETE(TaskList);
-
-    int length; // 4 byte
-    TaskList *next; // 4 byte
-    Task tasks[TASK_MAX_SIZE]; // 512
-    TaskList *output; // 4 byte
-    int a[1]; // padding
-
-    static TaskList* append(TaskList*, TaskList*);
-};
-
-typedef TaskList* TaskListPtr;
-
-#endif
--- a/include/TaskManager/TaskListInfo.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#ifndef INCLUDED_TASK_LIST_INFO
-#define INCLUDED_TASK_LIST_INFO
-
-#include "types.h"
-#include "TaskList.h"
-
-class TaskListInfo {
-public:
-    /* constructor */
-    TaskListInfo(void);
-    virtual ~TaskListInfo(void);
-
-    /* functions */
-    int init(int num);
-    TaskListPtr create(void);
-    void free(TaskListPtr list);
-    static TaskListPtr append(TaskListPtr list, TaskListPtr q);
-    virtual int extend_pool(int num);
-
-protected:
-    /* variables */
-    TaskListPtr taskListPool;
-    TaskListPtr freeTaskList;
-
-    /* functions */
-    void destroy(void);
-
-private:
-};
-
-#endif
--- a/include/TaskManager/TaskManager.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-#ifndef INCLUDED_TASK_MANAGER
-#define INCLUDED_TASK_MANAGER
-
-#include "TaskManagerImpl.h"
-#include "Random.h"
-
-class TaskManager {
-public:
-    /* constructor */
-    TaskManager(int num = 1); // The number of threads
-    ~TaskManager(void);
-
-    /* variables */
-    TaskManagerImpl *m_impl;    
-    void (*tm_end)(void);
-    RandomPtr gen_random;
-
-    /* user function */
-    HTaskPtr create_task(int cmd);
-    void run(void);
-    void *allocate(int size);
-    void set_TMend(void (*endf)(void));
-    int get_cpuNum(void);
-    int get_random(void);
-
-    /* functions */
-    void init(void);
-    void finish(void);
-
-private:
-    int machineNum;
-};
-
-#endif
-
-extern TaskManager *manager;
-
--- a/include/TaskManager/TaskManagerImpl.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#ifndef INCLUDED_TASK_MANAGER_IMPL
-#define INCLUDED_TASK_MANAGER_IMPL
-
-#include "MailManager.h"
-#include "BufferManager.h"
-#include "ListData.h"
-
-class TaskManagerImpl {
-public:
-    /* constructor */
-    TaskManagerImpl(int num = 1);
-    virtual ~TaskManagerImpl(void) {}
-
-    /* variables */
-    int machineNum;
-    TaskQueuePtr activeTaskQueue;
-    TaskQueuePtr waitTaskQueue;
-    BufferManager *bufferManager;
-
-    /* functions */
-    // system
-    virtual void init(void) = 0;
-    virtual void run(void) = 0;
-    virtual void append_activeTask(HTaskPtr);
-    virtual void append_waitTask(HTaskPtr);
-
-    void check_task_finish(HTaskPtr task);
-    void notify_wait_taskQueue(HTaskPtr depend, TaskQueuePtr list);
-    TaskQueuePtr remove_taskQueue(TaskQueuePtr list, TaskQueuePtr task);
-    TaskQueuePtr remove_taskQueue_eq_task(TaskQueuePtr list, HTaskPtr task);
-    void remove_taskQueue_all(TaskQueuePtr list);
-    void wakeup_waitTask(void);
-
-    void systask_init(void);
-
-    // user
-    HTaskPtr create_task(int cmd);
-    void set_task_depend(HTaskPtr master, HTaskPtr slave);
-    void spawn_task(HTaskPtr);
-    void set_task_cpu(HTaskPtr, CPU_TYPE);
-    virtual void* allocate(int size) = 0;
-};
-#endif
--- a/include/TaskManager/TaskQueue.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-#ifndef INCLUDED_TASK_QUEUE
-#define INCLUDED_TASK_QUEUE
-
-#include "base.h"
-#include "Task.h"
-
-#include <stdio.h>
-
-class TaskQueue {
-public:
-    TaskQueue(TaskPtr q = NULL);
-
-    BASE_NEW_DELETE(TaskQueue);
-
-    TaskPtr task;
-    class TaskQueue *next;
-
-    static TaskQueue* append(TaskQueue* list, TaskQueue* q);
-};
-
-typedef TaskQueue* TaskQueuePtr;
-
-#endif
--- a/include/TaskManager/TaskQueueInfo.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#ifndef INCLUDED_TASK_QUEUE_INFO
-#define INCLUDED_TASK_QUEUE_INFO
-
-#include "TaskQueue.h"
-
-class TaskQueueInfo {
-public:
-    /* constructor */
-    TaskQueueInfo(void);
-    ~TaskQueueInfo(void);
-
-    /* functions */
-    int init(int num);
-    TaskQueuePtr create(TaskPtr task);
-    void free(TaskQueuePtr queue);
-    
-private:
-    /* variables */
-    TaskQueuePtr taskQueuePool;
-    TaskQueuePtr freeTaskQueue;
-
-    /* functions */
-    int extend_pool(int num);
-    void destroy(void);  
-};
-
-#endif
--- a/include/TaskManager/base.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-#ifndef INCLUDED_BASE_H_
-
-#include <new>
-#include <stdlib.h>
-#include <stdio.h>
-
-
-#ifdef __SPU__
-//#if 0
-#  define BASE_NEW_DELETE(T)						\
-    /* override new/detele */                                           \
-    static void* operator new(size_t size) {                            \
-	if ((int)size == 0) {						\
-            size = 1;                                                   \
-	}                                                               \
-									\
-	void *ptr = malloc(size);					\
-	return ptr;							\
-    }                                                                   \
-    static void operator delete(void* rawMemory, size_t size) {         \
-	free(rawMemory);                                                \
-    }                                                                   \
-
-#else
-# define BASE_NEW_DELETE(T)
-#endif
-
-#endif
--- a/include/TaskManager/error.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#ifndef CERIUM_ERR
-#define CERIUM_ERR
-
-#ifdef DEBUG
-#  include <stdio.h>
-#  define __debug(...) do { \
-	fprintf(stderr, __VA_ARGS__);		\
-    } while (0)
-#else /* DEBUG */
-#  define __debug(...)
-#endif
-
-#ifdef DEBUG
-#  include <stdio.h>
-#  define __debug_ppe(...) do { \
-	printf("[PPE] "); printf(__VA_ARGS__);	\
-    } while (0)
-#else /* DEBUG */
-#  define __debug_ppe(...)
-#endif
-
-#ifdef DEBUG
-#  include <stdio.h>
-#  define __debug_spe(...) do { \
-	printf("[SPE] "); printf(__VA_ARGS__);	\
-    } while (0)
-#else /* DEBUG */
-#  define __debug_spe(...)
-#endif
-#endif
--- a/include/TaskManager/types.h	Fri Jul 24 18:08:43 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#ifndef INCLUDED_TYPES
-#define INCLUDED_TYPES
-
-#include <stdint.h>
-
-typedef uint32_t uint32;
-typedef uint64_t uint64;
-#ifdef SPU
-typedef uint64_t memaddr;
-#else
-#if (sizeof (void*) == 8)
-typedef uint64_t memaddr;
-#else
-typedef uint32_t memaddr;
-#endif
-#endif
-
-#define SPE_ALIGNMENT 16
-#define SPE_ALIGNMENT_FULL 128
-#define SPE_ALIGN __attribute__((aligned(SPE_ALIGNMENT)))
-#define SPE_ALIGN_FULL __attribute__((aligned(SPE_ALIGNMENT_FULL))
-#define ROUND_UP_ALIGN(value, alignment) \
-    (((value) + ((alignment) - 1))&(~((alignment)-1)))
-#define DEFAULT_ALIGNMENT SPE_ALIGNMENT
-//#define DEFAULT_ALIGNMENT SPE_ALIGNMENT_FULL
-
-#define DMA_MAX_SIZE 16384
-
-#define round_up16(value)  ROUND_UP_ALIGN(value, 16)
-#define round_up128(value) ROUND_UP_ALIGN(value, 128)
-
-// ここも typedef しとくか?
-enum {
-// どの方向かで enum 分けるだろjk...
-// PPE -> SPE 
-    MY_SPE_NOP = 0,
-    MY_SPE_COMMAND_EXIT,
-    MY_SPE_COMMAND_GO,
-
-// SPE -> PPE
-    MY_SPE_STATUS_BUSY,
-    MY_SPE_STATUS_READY,
-    MY_SPE_COMMAND_MALLOC,
-};
-
-#define MAX_USE_SPE_NUM 6
-
-typedef enum {
-    CPU_PPE = 0, // default
-    CPU_SPE = 1,
-    SPE_ANY = CPU_SPE,
-    SPE_0 = 2,
-    SPE_1 = 3,
-    SPE_2 = 4,
-    SPE_3 = 5,
-    SPE_4 = 6,
-    SPE_5 = 7,
-} CPU_TYPE;
-
-#endif