X-Git-Url: http://sraa.de/git/?a=blobdiff_plain;f=dol%2Fsrc%2Fdol%2Fvisitor%2Fcell%2Flib%2Fcommon.h;fp=dol%2Fsrc%2Fdol%2Fvisitor%2Fcell%2Flib%2Fcommon.h;h=b890fb99e588fa13fe2c126d8264f1cac105bf89;hb=8c411cf24ed0eb889191aaeafd8fa1e69081df42;hp=0000000000000000000000000000000000000000;hpb=dea7a4fb1ed110d3ce6e6d9255103d724bd66c0e;p=jump.git diff --git a/dol/src/dol/visitor/cell/lib/common.h b/dol/src/dol/visitor/cell/lib/common.h new file mode 100644 index 0000000..b890fb9 --- /dev/null +++ b/dol/src/dol/visitor/cell/lib/common.h @@ -0,0 +1,91 @@ +/**************************************************************** + * COMMON.H + * Creator: lschor, 2008-10-30 + * Description: Specifies some structs and Constants for the CBE-DOL-Implementation + * + * Revision: + * - 2008-10-30: Created + */ + +#ifndef _COMMON_H_ +#define _COMMON_H_ + +#include +#include +#include + +#include "dol.h" +#include "constant.h" + +#define SPE_READ_DEMAND 0 +#define SPE_READ_COMPLETE 1 +#define SPE_COMPLETE 2 + +// Context for one process --> 384 bit +typedef struct{ + uint64_t port_id; + uint64_t port_queue_id; + + uint64_t processName; // Address for the name of the process + uint64_t processNameLen; // Len of the process Name + + uint32_t number_of_ports; + uint32_t is_detached; + uint32_t padd[2]; // dummy - for alignment --> It always has to be a multiple of 128 bit! +} process_context; + +// Context for one SPU --> This is send to him! +typedef struct{ + uint64_t procContents; + uint64_t procContentsLen; + + uint64_t procContentsAll; + uint64_t queueFromSPU; + uint64_t queueOnSPU; + + uint64_t fifoTails; + + uint64_t ea_base; // Base address of the context + uint32_t padd[2]; // dummy - for alignment --> It always has to be a multiple of 128 bit! +} spu_context; + + +// Create a message to send the queue offset +// 8 bit: queue number +// 24 bit: offset of the LS +#define CREATEQUEUEMESSAGE(_queue, _offset) \ + ((_queue << 24) | (_offset)) + +#define QUEUEMSGQUEUE(_message) \ + ((_message >> 24) & 0xFF) + +#define QUEUEMSGOFFSET(_message) \ + ((_message >> 0) & 0xFFFFFF) + + +// Create the message we like to send, format: +// 4 bit: code (total 16 possibilities) +// 9 bit: queue (total 512 possibilities) +// 19 bit: len +#define CREATEFASTMESSAGE(_code, _queue, _len) \ + ((_code << 28) | (_queue << 19) | (_len)) + +// Get the code from a message +#define GETFASTCODE(_message) \ + ((_message >> 28) & 0xF) + +// Get the queue from a message +#define GETFASTQUEUE(_message) \ + ((_message >> 19) & 0x1FF) + +// Get the len from a message +#define GETFASTLEN(_message) \ + ((_message >> 0) & 0x7FFFF) + +#define MSG_OK 19 + +// Round a number ot the right DMA number --> Is used for DMA transfers +uint32_t roundDMA(uint32_t number); + +#endif // _COMMON_H_ +