view TaskManager/kernel/schedule/SchedTaskList.cc @ 970:33630c6ff445

change pipeline and TaskArray fast
author Yutaka Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Thu, 26 Aug 2010 20:38:06 +0900
parents 4c12f679a0fa
children d093d601fc14
line wrap: on
line source

#include <stdlib.h>
#include <string.h>
#include "SchedTaskList.h"
#include "SchedTask.h"
#include "SysFunc.h"
#include "SchedTaskArray.h"
#include "SchedTaskArrayLoad.h"
#include "SchedNop2Ready.h"
#include "DmaManager.h"
#include "error.h"

/**
 * SchedTaskList を返す
 *
 * @param[in] next_list 次の実行する TaskList のアドレス
 * @param[in] next_list がメインメモリのアドレスか、
 *            SPE で生成されたアドレスかのフラグ
 *            SPE で生成されている場合、DMA の必要は無い
 *            0: メインメモリ, 1: SPE
 */

SchedTaskList::SchedTaskList(memaddr addr, Scheduler *sched)
{
    // next() で生成された時に、Task List read を始める
    params_addr = addr;
    scheduler = sched;
    cur_index = 0;
    list = scheduler->get_curListBuf();
    scheduler->dma_load(list, params_addr,
                        sizeof(TaskList), DMA_READ_TASKLIST);

}


void
SchedTaskList::read()
{
    // next() で TaskListの中身を見られてしまうので、
    // ここで DMA 待ちを行う
    __debug("[SchedTaskList:%s]\n", __FUNCTION__);
    scheduler->dma_wait(DMA_READ_TASKLIST);
}

void
SchedTaskList::exec() {
}

void
SchedTaskList::write()
{
}

/**
 *    next は、SchedTask のものが使われる。
 *    それで正しく動くはず。
 *
 *    next() が呼ばれた時点で、TaskList のloadが終了しているように工夫する。
 *
 */

/* end */