# HG changeset patch # User aaa # Date 1248677478 -32400 # Node ID 09f33c51a2047afc90cc76acda2e62adc0e4147c # Parent f8769040a5dfd139b40d2ac59472d07976c49b6c rename include/TaskManager/* and add memory diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/CellBufferManager.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/CellHTaskInfo.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/CellTaskListInfo.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/CellTaskManagerImpl.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/PpeScheduler.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/SchedNop2Ready.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/SpeThreads.h --- /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 +#include + +#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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/spe/CellDmaManager.h --- /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 + +#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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Cell/spe/CellScheduler.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Fifo/FifoDmaManager.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/Fifo/FifoTaskManagerImpl.h --- /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 */ diff -r f8769040a5df -r 09f33c51a204 TaskManager/Fifo/MainScheduler.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/include/base.h --- /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 +#include +#include + + +#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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/include/error.h --- /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 +# define __debug(...) do { \ + fprintf(stderr, __VA_ARGS__); \ + } while (0) +#else /* DEBUG */ +# define __debug(...) +#endif + +#ifdef DEBUG +# include +# define __debug_ppe(...) do { \ + printf("[PPE] "); printf(__VA_ARGS__); \ + } while (0) +#else /* DEBUG */ +# define __debug_ppe(...) +#endif + +#ifdef DEBUG +# include +# define __debug_spe(...) do { \ + printf("[SPE] "); printf(__VA_ARGS__); \ + } while (0) +#else /* DEBUG */ +# define __debug_spe(...) +#endif +#endif diff -r f8769040a5df -r 09f33c51a204 TaskManager/include/types.h --- /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 + +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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/memory/MemList.cpp --- /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); +} diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/memory/MemList.h --- /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(); +} diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/memory/MemorySegment.h --- /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; +} diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/BufferManager.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/DmaBuffer.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/HTask.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/HTaskInfo.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/MailManager.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/Random.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/SymTable.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/Task.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/TaskList.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/TaskListInfo.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/TaskManager.h --- /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; + diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/TaskManagerImpl.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/TaskQueue.h --- /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 + +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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/ppe/TaskQueueInfo.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/DmaManager.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/ListData.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/SchedExit.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/SchedMail.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/SchedNop.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/SchedTask.h --- /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 + diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/SchedTaskBase.h --- /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 diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/SchedTaskList.h --- /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 + diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/Scheduler.h --- /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); diff -r f8769040a5df -r 09f33c51a204 TaskManager/kernel/schedule/TaskGroup.h --- /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 diff -r f8769040a5df -r 09f33c51a204 example/MemList/main.cc --- 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; } diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/BufferManager.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellBufferManager.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellDmaManager.h --- 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 - -#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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellHTaskInfo.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellScheduler.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellTaskInfo.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellTaskListInfo.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/CellTaskManagerImpl.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/DmaBuffer.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/DmaManager.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/FifoDmaManager.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/FifoTaskManagerImpl.h --- 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 */ diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/HTask.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/HTaskInfo.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/ListData.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/MailManager.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/MainScheduler.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/PpeScheduler.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/Random.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedExit.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedMail.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedNop.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedNop2Ready.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedTask.h --- 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 - diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedTaskBase.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SchedTaskList.h --- 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 - diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/Scheduler.h --- 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); diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SpeThreads.h --- 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 -#include - -#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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/SymTable.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/Task.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskGroup.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskList.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskListInfo.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskManager.h --- 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; - diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskManagerImpl.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskQueue.h --- 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 - -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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/TaskQueueInfo.h --- 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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/base.h --- 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 -#include -#include - - -#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 diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/error.h --- 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 -# define __debug(...) do { \ - fprintf(stderr, __VA_ARGS__); \ - } while (0) -#else /* DEBUG */ -# define __debug(...) -#endif - -#ifdef DEBUG -# include -# define __debug_ppe(...) do { \ - printf("[PPE] "); printf(__VA_ARGS__); \ - } while (0) -#else /* DEBUG */ -# define __debug_ppe(...) -#endif - -#ifdef DEBUG -# include -# define __debug_spe(...) do { \ - printf("[SPE] "); printf(__VA_ARGS__); \ - } while (0) -#else /* DEBUG */ -# define __debug_spe(...) -#endif -#endif diff -r f8769040a5df -r 09f33c51a204 include/TaskManager/types.h --- 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 - -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