dol: initial dol commit
[jump.git] / dol / src / dol / visitor / cell / lib / common.h
1 /****************************************************************
2  *      COMMON.H
3  *      Creator: lschor, 2008-10-30
4  *      Description: Specifies some structs and Constants for the CBE-DOL-Implementation
5  *
6  *      Revision:
7  *      - 2008-10-30: Created
8  */
9
10 #ifndef _COMMON_H_
11 #define _COMMON_H_
12
13 #include <stdint.h>
14 #include <stdio.h>
15 #include <ctype.h>
16
17 #include "dol.h"
18 #include "constant.h"
19
20 #define SPE_READ_DEMAND 0
21 #define SPE_READ_COMPLETE 1
22 #define SPE_COMPLETE 2
23
24 // Context for one process --> 384 bit
25 typedef struct{
26         uint64_t port_id;
27         uint64_t port_queue_id;
28
29         uint64_t processName;   // Address for the name of the process
30         uint64_t processNameLen;  // Len of the process Name
31
32         uint32_t number_of_ports;
33         uint32_t is_detached;
34         uint32_t padd[2]; // dummy - for alignment --> It always has to be a multiple of 128 bit!
35 } process_context;
36
37 // Context for one SPU --> This is send to him!
38 typedef struct{
39         uint64_t procContents;
40         uint64_t procContentsLen;
41
42         uint64_t procContentsAll;
43         uint64_t queueFromSPU;
44         uint64_t queueOnSPU;
45
46         uint64_t fifoTails;
47
48         uint64_t ea_base; // Base address of the context
49         uint32_t padd[2]; // dummy - for alignment --> It always has to be a multiple of 128 bit!
50 } spu_context;
51
52
53 // Create a message to send the queue offset
54 // 8 bit: queue number
55 // 24 bit: offset of the LS
56 #define CREATEQUEUEMESSAGE(_queue, _offset) \
57     ((_queue << 24) | (_offset))
58
59 #define QUEUEMSGQUEUE(_message) \
60         ((_message >> 24) & 0xFF)
61
62 #define QUEUEMSGOFFSET(_message) \
63         ((_message >> 0) & 0xFFFFFF)
64
65
66 // Create the message we like to send, format:
67 // 4 bit: code (total 16 possibilities)
68 // 9 bit: queue (total 512 possibilities)
69 // 19 bit: len
70 #define CREATEFASTMESSAGE(_code, _queue, _len) \
71         ((_code << 28)  | (_queue << 19) | (_len))
72
73 // Get the code from a message
74 #define GETFASTCODE(_message) \
75         ((_message >> 28) & 0xF)
76
77 // Get the queue from a message
78 #define GETFASTQUEUE(_message) \
79         ((_message >> 19) & 0x1FF)
80
81 // Get the len from a message
82 #define GETFASTLEN(_message) \
83         ((_message >> 0) & 0x7FFFF)
84
85 #define MSG_OK 19
86
87 // Round a number ot the right DMA number --> Is used for DMA transfers
88 uint32_t roundDMA(uint32_t number);
89
90 #endif // _COMMON_H_
91