view TaskManager/Cell/spe/CellScheduler.cc @ 240:f8182c7058b5

fix
author k098586@localhost.localdomain
date Fri, 29 May 2009 15:45:09 +0900
parents fc314f28b66e
children f8006660a45c 81b25e5d5379
line wrap: on
line source

#include <stdio.h>
#include <malloc.h>
#include "CellScheduler.h"
#include "CellDmaManager.h"
#include "error.h"

// ユーザプログラムで定義
// なんだけど、それは微妙じゃね?
extern void task_init(void);

void
CellScheduler::init_impl(void)
{
    connector = new CellDmaManager;

    mainMemNum = 0;

    task_init();
}

void*
CellScheduler::allocate(int size)
{
    return memalign(DEFAULT_ALIGNMENT, size);
}

/**
 * メインメモリ領域を allocate する。
 * allocate した領域のアドレスは mainMem_get で取得するが、
 * mainMem_get を実行できるのは
 * Renew Task (タスク内で create した Task) から。
 * alloc してすぐ get しても、アドレス何も入ってないです。
 */
void
CellScheduler::mainMem_alloc(int id, int size)
{
    mainMemList[id] = NULL;

    mainMemNum++;
    mail_write(MY_SPE_COMMAND_MALLOC);
    mail_write(id);
    mail_write(size);
}

void
CellScheduler::mainMem_wait(void)
{
    uint32 id;
    uint32 addr;

    while (mainMemNum > 0) {
	id = mail_read();
	addr = mail_read();

	mainMemList[id] = (void*)addr;
	mainMemNum--;
    }    
}