summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaranjeiro2007-12-14 09:16:55 +0000
committerlaranjeiro2007-12-14 09:16:55 +0000
commit33fa23db16568e2fdd1d141522fccb11fc4d63d2 (patch)
treee636c622ac177a920901689618bb64c1d2d60356
parentba7c9b0929e3f618de2b3334c4a2447a55c0bf0e (diff)
HLE according with CL specification pending 5
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@1145 017c9cb6-072f-447c-8318-d5b54f68fe89
-rw-r--r--hle/hle.h6
-rw-r--r--hle/src/hle.c46
-rw-r--r--hle/test/src/hle_recv_from_arm.c8
3 files changed, 32 insertions, 28 deletions
diff --git a/hle/hle.h b/hle/hle.h
index 1a19ada08b..984b58be84 100644
--- a/hle/hle.h
+++ b/hle/hle.h
@@ -16,11 +16,7 @@
* « long description »
*/
-#define HLE_MSG_TYPE_DATA 0x00
-#define HLE_MSG_TYPE_MME 0x01
-#define HLE_MSG_TYPE_BUFFER_ADD 0x02
-#define HLE_MSG_TYPE_BUFFER_RELEASE 0x03
-
+#include "hal/hle/defs.h"
#include "cl/cl.h"
/** forward declaration */
diff --git a/hle/src/hle.c b/hle/src/hle.c
index a5ca56fe93..60d3c21087 100644
--- a/hle/src/hle.c
+++ b/hle/src/hle.c
@@ -14,6 +14,7 @@
*/
#include "common/std.h"
+#include "hal/hle/defs.h"
#include "hal/hle/ipmbox.h"
#include "hle/hle.h"
#include "cl/cl.h"
@@ -95,7 +96,7 @@ void hle_data_send_done (hle_t *hle, u8 *buffer)
uint word[2];
- word[0] = HLE_MSG_TYPE_BUFFER_RELEASE | (1 << 8);
+ word[0] = HLE_MSG_TYPE_SEND_DONE | (1 << 8);
word[1] = (uint) buffer;
ipmbox_tx (hle->ipmbox, word, 2);
@@ -116,7 +117,7 @@ void hle_data_recv (hle_t *hle, u8 *buffer, uint length)
uint word[2];
- word[0] = HLE_MSG_TYPE_DATA | (1 << 8) | (length << 12);
+ word[0] = HLE_MSG_TYPE_DATA | (1 << 8) | (0 << 12) | (length << 13);
word[1] = (uint) buffer;
ipmbox_tx (hle->ipmbox, word, 2);
@@ -169,7 +170,7 @@ void hle_mme_send_done (hle_t *hle, u8 *buffer)
uint word[2];
- word[0] = HLE_MSG_TYPE_BUFFER_RELEASE | (1 << 8);
+ word[0] = HLE_MSG_TYPE_SEND_DONE | (1 << 8);
word[1] = (uint) buffer;
ipmbox_tx (hle->ipmbox, word, 2);
@@ -190,7 +191,7 @@ void hle_mme_recv (hle_t *hle, u8 *buffer, uint length)
uint word[2];
- word[0] = HLE_MSG_TYPE_MME | (1 << 8) | (length << 12);
+ word[0] = HLE_MSG_TYPE_DATA | (1 << 8) | (1 << 12) | (length << 13);
word[1] = (uint) buffer;
ipmbox_tx (hle->ipmbox, word, 2);
@@ -225,36 +226,43 @@ bool hle_ipmbox_recv (hle_t *ctx, u32 *msg_buffer, uint length)
uint length_processed;
uint msg;
+ uint type;
+
+ uint data_length;
+ uint data_type;
length_processed = 0;
while (length_processed < length)
{
msg = read_u32_from_word ((u8 *) (msg_buffer + length_processed));
length_processed ++;
+ type = msg & 0xFF;
- switch (msg & 0xFF)
+ switch (type)
{
- case HLE_MSG_TYPE_DATA:
- msg = (msg >> 12) & 0x7FF;
- hle_data_send (ctx, (u8 *) (msg_buffer + length_processed),
- msg);
- length_processed ++;
- break;
- case HLE_MSG_TYPE_MME:
- msg = (msg >> 12) & 0x7FF;
- hle_mme_send (ctx, (u8 *) (msg_buffer + length_processed),
- msg);
+ case HLE_MSG_TYPE_DATA /* Data type */:
+ data_type = (msg >> 12) & 0x1; /* data type MME or DATA */
+ data_length = (msg >> 13) & 0x7FF;
+
+ if (data_type == 0) /* Data */
+ hle_data_send (ctx,
+ (u8 *) (msg_buffer + length_processed), data_length);
+ else
+ hle_mme_send (ctx,
+ (u8 *) (msg_buffer + length_processed), data_length);
length_processed ++;
break;
- case HLE_MSG_TYPE_BUFFER_ADD:
- if (msg >> 12 == 0)
+ case HLE_MSG_TYPE_BUFFER_ADD /* Buffer ADD */ :
+ data_type = (msg >> 12) & 0x1; /* buffer type, MME or DATA */
+
+ if (data_type) /* 0 MME buffer, 1 data buffer*/
{
- hle_data_buffer_add (ctx, (u8 *) *(msg_buffer
+ hle_mme_buffer_add (ctx, (u8 *) *(msg_buffer
+ length_processed));
}
else
{
- hle_mme_buffer_add (ctx, (u8 *) *(msg_buffer
+ hle_data_buffer_add (ctx, (u8 *) *(msg_buffer
+ length_processed));
}
length_processed ++;
diff --git a/hle/test/src/hle_recv_from_arm.c b/hle/test/src/hle_recv_from_arm.c
index dfd9f03c33..d0296090b0 100644
--- a/hle/test/src/hle_recv_from_arm.c
+++ b/hle/test/src/hle_recv_from_arm.c
@@ -60,11 +60,11 @@ int main (void)
buff_packet[0] = malloc (2048 * sizeof(u8));
buff_packet[1] = malloc (2048 * sizeof(u8));
- msg = HLE_MSG_TYPE_DATA | (2 << 8) | (packet1_len << 12);
+ msg = HLE_MSG_TYPE_DATA | (1 << 8) | (0 << 12) | (packet1_len << 13);
memcpy (&msgs[0], &msg, sizeof(uint));
memcpy (&msgs[1], &buff_packet[0], sizeof (uint));
- msg = HLE_MSG_TYPE_DATA | (2 << 8) | (packet2_len << 12);
+ msg = HLE_MSG_TYPE_DATA | (1 << 8) | (0 << 12) | (packet2_len << 13);
memcpy (&msgs[2], &msg, sizeof(uint));
memcpy (&msgs[3], &buff_packet[1], sizeof (uint));
@@ -79,10 +79,10 @@ int main (void)
hle_ipmbox_recv(hle, msgs, 4);
- msg = HLE_MSG_TYPE_MME | (2 << 8) | (packet1_len << 12);
+ msg = HLE_MSG_TYPE_DATA | (1 << 8) | (1 << 12) | (packet1_len << 13);
memcpy (&msgs[0], &msg, sizeof(uint));
- msg = HLE_MSG_TYPE_MME | (2 << 8) | (packet2_len << 12);
+ msg = HLE_MSG_TYPE_DATA | (1 << 8) | (1 << 12) | (packet2_len << 13);
memcpy (&msgs[2], &msg, sizeof(uint));
hle_ipmbox_recv(hle, msgs, 4);