Mercurial > hg > Members > kono > Cerium
view TaskManager/kernel/spe/SpeManager.cc @ 31:6a77b5e755ab
*** empty log message ***
author | gongo |
---|---|
date | Tue, 12 Feb 2008 13:56:54 +0900 |
parents | 3d377547cf6d |
children |
line wrap: on
line source
#include <stdio.h> #include <new> // 絶対 Fix me // memalign のためにこんなことに・・・ // ここもオブジェクトでやるべきだよなー #ifdef CELL # include <malloc.h> #else # include <stdlib.h> # include <string.h> #endif #include "SpeManager.h" #include "SpeNop.h" #include "error.h" SpeManager::SpeManager(void) { } void SpeManager::init(void) { int i; /** * memalign だと、なぜか同じアドレスしか帰ってこないあげく * task3->exec のところで、 _start に飛んで最初からになって * だけどループしなくて止まるとかよくわからん * * new すりゃあ大丈夫っぽい。が、アライメント云々で * 最悪でも readBuf や writeBuf は memalign でしたいんだけどどうして? * * 追記 * アライメントを128じゃなくて16にしたら通った。 * ppe側も128にしてるんだけどなー * 128にしたせいで、どっかサイズずれた? */ for (i = 0; i < 2; i++) { #ifdef CELL listBuf[i] = (TaskListPtr)memalign(DEFAULT_ALIGNMENT, sizeof(TaskList)); readBuf[i] = memalign(DEFAULT_ALIGNMENT, 4*1024); writeBuf[i] = memalign(DEFAULT_ALIGNMENT, 4*1024); #else listBuf[i] = (TaskListPtr)malloc(sizeof(TaskList)); readBuf[i] = malloc(16*1024); writeBuf[i] = malloc(16*1024); #endif } listBufFlg = 0; readBufFlg = 0; writeBufFlg = 0; task1 = new SpeNop(); task2 = new SpeNop(); task3 = new SpeNop(); } void SpeManager::set_connect(DmaManager* cn) { connector = cn; } void SpeManager::run(void) { SpeTaskBase* taskTmp; // main loop do { __debug("----------\n"); task3->write(); task2->exec(); task1->read(); taskTmp = task3; task3 = task2; task2 = task1; task1 = task1->next(this, taskTmp); } while (task1); delete task3; delete task2; } void SpeManager::finish(void) { free(listBuf[0]); free(listBuf[1]); free(readBuf[0]); free(readBuf[1]); free(writeBuf[0]); free(writeBuf[1]); } TaskListPtr SpeManager::get_curListBuf(void) { listBufFlg ^= 1; return listBuf[listBufFlg]; } void* SpeManager::get_curReadBuf(void) { readBufFlg ^= 1; return readBuf[readBufFlg]; } void* SpeManager::get_curWriteBuf(void) { writeBufFlg ^= 1; return writeBuf[writeBufFlg]; }