X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Fcell%2Flib%2Fspu_mfcio_ext.h;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Fcell%2Flib%2Fspu_mfcio_ext.h;h=d85f1e8a361190ccaa25cd4f00db07effd101946;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/cell/lib/spu_mfcio_ext.h b/dol/src/dol/visitor/cell/lib/spu_mfcio_ext.h new file mode 100644 index 0000000..d85f1e8 --- /dev/null +++ b/dol/src/dol/visitor/cell/lib/spu_mfcio_ext.h @@ -0,0 +1,173 @@ +// -------------------------------------------------------------- +// (C)Copyright 2007, +// International Business Machines Corporation, +// All Rights Reserved. +// -------------------------------------------------------------- + +#ifndef _spu_mfcio_ext_h_ +#define _spu_mfcio_ext_h_ + +#include +#include +#include + +#include +#include + +static uint32_t msg[4]__attribute__ ((aligned (16))); + +// ========================================================================== +// Definitions +// ========================================================================== +#define SPU_IN_MBOX_OFFSET 0x0C // offset of mailbox status register from control area base +#define SPU_IN_MBOX_OFFSET_SLOT 0x3 // 16B alignment of mailbox status register = (SPU_MBOX_STAT_OFFSET&0xF)>>2 +#define SPU_MBOX_STAT_OFFSET 0x14 // offset of mailbox status register from control area base +#define SPU_MBOX_STAT_OFFSET_SLOT 0x1 // 16B alignment of mailbox status register = (SPU_MBOX_STAT_OFFSET&0xF)>>2 + +#define SPU_SIG_NOTIFY_OFFSET 0x0C // offset of signal notify 1 or 2 registera from signal notify 1 or 2 areas base +#define SPU_SIG_NOTIFY_OFFSET_SLOT 0x3 // 16B alignment of signal notify 1 or 2 register = (SPU_SIG_NOTIFY_OFFSET&0xF)>>2 + +// ========================================================================== +// Functions definitions +// ========================================================================== + +inline int status_mbox(uint64_t ea_mfc, uint32_t tag_id); +inline int status_in_mbox(uint64_t ea_mfc, uint32_t tag_id); +inline int status_out_mbox(uint64_t ea_mfc, uint32_t tag_id); +inline int status_outintr_mbox(uint64_t ea_mfc, uint32_t tag_id); + +int write_in_mbox(uint32_t data, uint64_t ea_mfc, uint32_t tag_id); +int write_signal1(uint32_t data, uint64_t ea_mfc, uint32_t tag_id); +int write_signal2(uint32_t data, uint64_t ea_mfc, uint32_t tag_id); + +// returns the value of mailbox status register of remote SPE +inline int status_mbox(uint64_t ea_mfc, uint32_t tag_id) +{ + uint32_t status[4], idx; + uint64_t ea_stat_mbox = ea_mfc + SPU_MBOX_STAT_OFFSET; + + //printf(">16, (status[idx]&0x0000ff00)>>8, (status[idx]&0x000000ff) ); + //printf(">8; + + //printf(">16; + + //printf("