view TaskManager/Fifo/FifoDmaManager.cc @ 14:41ccd4b38184

*** empty log message ***
author gongo
date Fri, 08 Feb 2008 18:00:21 +0900
parents 2356238ebea7
children 7927e00fb8e2
line wrap: on
line source

#include <stdio.h>
#include <string.h>
#include "FifoDmaManager.h"

void
FifoDmaManager::dma_load(void *buf, unsigned int addr, int size, int mask)
{
    if (buf == NULL || (void*)addr == NULL) return;
    memcpy(buf, (void*)addr, size);
}

void
FifoDmaManager::dma_store(void *buf, unsigned int addr, int size, int mask)
{
    if (buf == NULL || (void*)addr == NULL) return;
    memcpy((void*)addr, buf, size);
}

/**
 * mask で設定した DMA 転送の完了を待つ
 */
void
FifoDmaManager::dma_wait(int mask)
{
    //spu_writech(MFC_WrTagMask, 1 << mask);
    //spu_mfcstat(MFC_TAG_UPDATE_ALL);
}

void
FifoDmaManager::mail_write(unsigned int data)
{
    //spu_writech(SPU_WrOutMbox, data);

    mail_sendQueue = append_mailQueue(mail_sendQueue,
				      mailManager->create_mail(data));
}

unsigned int
FifoDmaManager::mail_read(void)
{
    MailQueuePtr q;
    unsigned int ret;

    q = mail_recvQueue;

    if (q == NULL) {
	return 0; // error か 正しい値か判断できないな・・・
    }

    mail_recvQueue = mail_recvQueue->next;

    ret = q->data;
    mailManager->free_mailQueue(q);

    return ret;
}