dol: initial dol commit
[jump.git] / dol / src / dol / visitor / cell / lib / common.h
diff --git a/dol/src/dol/visitor/cell/lib/common.h b/dol/src/dol/visitor/cell/lib/common.h
new file mode 100644 (file)
index 0000000..b890fb9
--- /dev/null
@@ -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 <stdint.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#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_
+