summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaranjeiro2008-07-09 16:13:55 +0000
committerlaranjeiro2008-07-09 16:13:55 +0000
commitd26eca5a84e2b6428e68bc3d6fcb86f069c2345b (patch)
tree65cc6c35b3b22836076cc3431f4d1b30510f0b4e
parenta009b87299f83e6e086ee5a64a931adb4eed14c5 (diff)
test_general/hard/bridgedma:
* Added a RX test. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@2582 017c9cb6-072f-447c-8318-d5b54f68fe89
-rw-r--r--cesar/hal/phy/bridgedma.h1
-rw-r--r--cesar/hal/phy/inc/bridgedma_regs.h61
-rw-r--r--cesar/hal/phy/src/bridgedma.c2
-rw-r--r--cesar/test_general/hard/bridgedma/Makefile31
-rw-r--r--cesar/test_general/hard/bridgedma/common-Makefile32
-rw-r--r--cesar/test_general/hard/bridgedma/host-config1
-rw-r--r--cesar/test_general/hard/bridgedma/host-ecos.ecc.sh5
-rw-r--r--cesar/test_general/hard/bridgedma/inc/bridgedma-regs.h22
-rw-r--r--cesar/test_general/hard/bridgedma/sparc-Config1
-rw-r--r--cesar/test_general/hard/bridgedma/sparc-ecos.ecc.sh (renamed from cesar/test_general/hard/bridgedma/ecos.ecc.sh)0
-rw-r--r--cesar/test_general/hard/bridgedma/src/bridgedma-it.c27
-rw-r--r--cesar/test_general/hard/bridgedma/src/bridgedma-rx-one-frame.c360
12 files changed, 494 insertions, 49 deletions
diff --git a/cesar/hal/phy/bridgedma.h b/cesar/hal/phy/bridgedma.h
index 7702fa1433..5e34fbc0d7 100644
--- a/cesar/hal/phy/bridgedma.h
+++ b/cesar/hal/phy/bridgedma.h
@@ -140,6 +140,7 @@ void
phy_bridgedma_start (phy_bridgedma_t *ctx, phy_bridgedma_job_t *job_first,
phy_bridgedma_job_t *job_last);
+
END_DECLS
#endif /* hal_phy_bridgedma_h */
diff --git a/cesar/hal/phy/inc/bridgedma_regs.h b/cesar/hal/phy/inc/bridgedma_regs.h
index 6dfdf0efd7..8dc9a44d6c 100644
--- a/cesar/hal/phy/inc/bridgedma_regs.h
+++ b/cesar/hal/phy/inc/bridgedma_regs.h
@@ -12,19 +12,76 @@
* \brief Bridgedma Registers.
* \ingroup hal_phy
*
+ * See bridgedma specifications on Maria.
*/
+/** Bridge DMA base address. */
#define PHY_BRIDGEDMA_BASE 0xB0000000
+/** Config control register. */
#define PHY_BRIDGEDMA_CONTROL (PHY_BRIDGEDMA_BASE)
-#define PHY_BRIDGEDMA_JOB_PTR (PHY_BRIDGEDMA_BASE + 0x8)
+#define PHY_BRIDGEDMA_CONTROL__STATUS 0, 0
+#define PHY_BRIDGEDMA_CONTROL__HPROT 7, 4
-#define PHY_BRIDGEDMA_CURR_JOB_PTR (PHY_BRIDGEDMA_BASE + 0xC)
+/** Status Error. */
+#define PHY_BRIDGEDMA_STATUS_ERROR (PHY_BRIDGEDMA_BASE + 0x4)
+/** Job descriptor pointer. */
+#define PHY_BRIDGEDMA_JOBD_PTR (PHY_BRIDGEDMA_BASE + 0x8)
+
+/** Current Job descriptor being processed by the bridgedma. */
+#define PHY_BRIDGEDMA_CURR_JOBD_PTR (PHY_BRIDGEDMA_BASE + 0xC)
+
+/** Current PB descriptor being processed. */
+#define PHY_BRIDGEDMA_CURR_PB_DESC (PHY_BRIDGEDMA_BASE + 0x10)
+
+/** Current CRC substitution. */
+#define PHY_BRIDGEDMA_CRC_SUBSTITUTION (PHY_BRIDGEDMA_BASE + 0x14)
+
+/** Next job descriptor to be processed. */
+#define PHY_BRIDGEDMA_JOBD_NEXT_PTR (PHY_BRIDGEDMA_BASE + 0x20)
+
+/** The job descriptor buffer address. */
+#define PHY_BRIDGEDMA_JOB_BUFF_ADD (PHY_BRIDGEDMA_BASE + 0x24)
+
+/** The job descriptor length. */
#define PHY_BRIDGEDMA_JOB_LENGTH (PHY_BRIDGEDMA_BASE + 0x28)
+#define PHY_BRIDGEDMA_JOB_LENGTH__LENGTH 27, 16
+#define PHY_BRIDGEDMA_JOB_LENGTH__HEADER_LEN 3, 0
+
+/** The job first PB descriptor. */
+#define PHY_BRIDGEDMA_JOB_FIRST_PB_DESC (PHY_BRIDGEDMA_BASE + 0x2C)
+
+/** The first PB conf. */
+#define PHY_BRIDGEDMA_PB_CONF (PHY_BRIDGEDMA_BASE + 0x30)
+
+#define PHY_BRIDGEDMA_PB_CONF__LENGTH 27, 16
+#define PHY_BRIDGEDMA_PB_CONF__OFFSET 11, 0
+
+/** Job configuration. */
+#define PHY_BRIDGEDMA_JOB_CONF (PHY_BRIDGEDMA_BASE + 0x34)
+
+#define PHY_BRIDGEDMA_JOB_CONF__MASK 31, 10
+#define PHY_BRIDGEDMA_JOB_CONF__IT 6, 6
+#define PHY_BRIDGEDMA_JOB_CONF__APPEND_ZERO 5, 5
+#define PHY_BRIDGEDMA_JOB_CONF__CRC_STORE 4, 4
+#define PHY_BRIDGEDMA_JOB_CONF__CRC_RESET 3, 3
+#define PHY_BRIDGEDMA_JOB_CONF__CRC_MODE 2, 2
+#define PHY_BRIDGEDMA_JOB_CONF__DIRECTION 1, 1
+#define PHY_BRIDGEDMA_JOB_CONF__LAST 0, 0
+
+/** Job Header. */
#define PHY_BRIDGEDMA_JOB_HEADER_3210 (PHY_BRIDGEDMA_BASE + 0x38)
+
+/** Job second header. */
#define PHY_BRIDGEDMA_JOB_HEADER_7654 (PHY_BRIDGEDMA_BASE + 0x3C)
+/** Job PB next pointer. */
+#define PHY_BRIDGEDMA_PB_NEXT_PTR (PHY_BRIDGEDMA_BASE + 0x40)
+
+/** Job PB buffer. */
+#define PHY_BRIDGEDMA_PB_BUF_ADD (PHY_BRIDGEDMA_BASE + 0x44)
+
#endif /* hal_phy_inc_bridgedma_regs_h */
diff --git a/cesar/hal/phy/src/bridgedma.c b/cesar/hal/phy/src/bridgedma.c
index aa2093024f..e46abc830b 100644
--- a/cesar/hal/phy/src/bridgedma.c
+++ b/cesar/hal/phy/src/bridgedma.c
@@ -147,7 +147,7 @@ phy_bridgedma_start (phy_bridgedma_t *ctx, phy_bridgedma_job_t *job_first,
dbg_assert (job_last);
control = (u32*) PHY_BRIDGEDMA_CONTROL;
- job_current = (u32 *)PHY_BRIDGEDMA_CURR_JOB_PTR;
+ job_current = (u32 *)PHY_BRIDGEDMA_CURR_JOBD_PTR;
arch_reorder_barrier ();
ctx->job_last->next = job_first;
diff --git a/cesar/test_general/hard/bridgedma/Makefile b/cesar/test_general/hard/bridgedma/Makefile
index 799e71150e..e8f27a9ab3 100644
--- a/cesar/test_general/hard/bridgedma/Makefile
+++ b/cesar/test_general/hard/bridgedma/Makefile
@@ -1,28 +1,11 @@
-BASE = ../../..
+all: sparc host
-ECOS = y
-TARGET = sparc
+sparc : Makefile
+ make -f common-Makefile TARGET=sparc VARIANT=sparc
-TARGET_PROGRAMS = bridgedma_init bridgedma-it bridgedma-tx bridgedma_tx_one_frame
-bridgedma_init_SOURCES = bridgedma_init.c
-bridgedma_init_MODULES = lib hal/phy
+host: Makefile
+ make -f common-Makefile VARIANT=host
-bridgedma-tx_SOURCES = bridgedma-tx-test.c
-bridgedma-tx_MODULES = lib hal/phy
-
-bridgedma-it_SOURCES = bridgedma-it.c
-bridgedma-it_MODULES = lib hal/phy
-
-bridgedma_tx_one_frame_SOURCES = bridgedma-tx-one-frame.c
-bridgedma_tx_one_frame_MODULES = lib hal/phy
-
-include $(BASE)/common/make/top.mk
-
-all: $(TARGET_PROGRAMS:%=obj/%.lst) $(TARGET_PROGRAMS:%=obj/%.hex)
-
-%.lst: %.elf
- $(CROSS_COMPILE_sparc)objdump -DSt $< > $@
-
-%.hex: %.elf
- $(CROSS_COMPILE_sparc)objcopy -SO ihex $< $@
+clean:
+ rm -rf obj
diff --git a/cesar/test_general/hard/bridgedma/common-Makefile b/cesar/test_general/hard/bridgedma/common-Makefile
new file mode 100644
index 0000000000..7123610248
--- /dev/null
+++ b/cesar/test_general/hard/bridgedma/common-Makefile
@@ -0,0 +1,32 @@
+BASE = ../../..
+
+ECOS = y
+
+TARGET_PROGRAMS = bridgedma_init bridgedma-it bridgedma-tx bridgedma_tx_one_frame \
+ bridgedma_rx_one_frame
+
+bridgedma_init_SOURCES = bridgedma_init.c bridgedma-regs.c
+bridgedma_init_MODULES = lib hal/phy
+
+bridgedma-tx_SOURCES = bridgedma-tx-test.c bridgedma-regs.c
+bridgedma-tx_MODULES = lib hal/phy
+
+bridgedma-it_SOURCES = bridgedma-it.c bridgedma-regs.c
+bridgedma-it_MODULES = lib hal/phy
+
+bridgedma_tx_one_frame_SOURCES = bridgedma-tx-one-frame.c bridgedma-regs.c
+bridgedma_tx_one_frame_MODULES = lib hal/phy
+
+bridgedma_rx_one_frame_SOURCES = bridgedma-rx-one-frame.c bridgedma-regs.c
+bridgedma_rx_one_frame_MODULES = lib hal/phy
+
+include $(BASE)/common/make/top.mk
+
+all: $(TARGET_PROGRAMS:%=obj/$(VARIANT)/%.lst) $(TARGET_PROGRAMS:%=obj/$(VARIANT)/%.hex)
+
+%.lst: %.elf
+ $(CROSS_COMPILE_sparc)objdump -DSt $< > $@
+
+%.hex: %.elf
+ $(CROSS_COMPILE_sparc)objcopy -SO ihex $< $@
+
diff --git a/cesar/test_general/hard/bridgedma/host-config b/cesar/test_general/hard/bridgedma/host-config
new file mode 100644
index 0000000000..e056cc06de
--- /dev/null
+++ b/cesar/test_general/hard/bridgedma/host-config
@@ -0,0 +1 @@
+CONFIG_BRIDGEDMA_SOFT=y
diff --git a/cesar/test_general/hard/bridgedma/host-ecos.ecc.sh b/cesar/test_general/hard/bridgedma/host-ecos.ecc.sh
new file mode 100644
index 0000000000..2443d0e40f
--- /dev/null
+++ b/cesar/test_general/hard/bridgedma/host-ecos.ecc.sh
@@ -0,0 +1,5 @@
+config=${1:-ecos-gen.ecc}
+ecosconfig --config=$config new linux default
+cat >> $config <<'EOF'
+EOF
+ecosconfig --config=$config check
diff --git a/cesar/test_general/hard/bridgedma/inc/bridgedma-regs.h b/cesar/test_general/hard/bridgedma/inc/bridgedma-regs.h
new file mode 100644
index 0000000000..dace32f502
--- /dev/null
+++ b/cesar/test_general/hard/bridgedma/inc/bridgedma-regs.h
@@ -0,0 +1,22 @@
+#ifndef inc_bridgedma_regs_h
+#define inc_bridgedma_regs_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file inc/bridgedma-regs.h
+ * \brief « brief description »
+ * \ingroup « module »
+ *
+ * « long description »
+ */
+
+/** Print the bridge DMA status. */
+void
+phy_bridgedma_regs_state (void);
+
+#endif /* inc_bridgedma_regs_h */
diff --git a/cesar/test_general/hard/bridgedma/sparc-Config b/cesar/test_general/hard/bridgedma/sparc-Config
new file mode 100644
index 0000000000..ac4ec4fc2a
--- /dev/null
+++ b/cesar/test_general/hard/bridgedma/sparc-Config
@@ -0,0 +1 @@
+CONFIG_BRIDGEDMA_SOFT=n
diff --git a/cesar/test_general/hard/bridgedma/ecos.ecc.sh b/cesar/test_general/hard/bridgedma/sparc-ecos.ecc.sh
index db2208c6cc..db2208c6cc 100644
--- a/cesar/test_general/hard/bridgedma/ecos.ecc.sh
+++ b/cesar/test_general/hard/bridgedma/sparc-ecos.ecc.sh
diff --git a/cesar/test_general/hard/bridgedma/src/bridgedma-it.c b/cesar/test_general/hard/bridgedma/src/bridgedma-it.c
index 70f87b41e5..1f536e25cf 100644
--- a/cesar/test_general/hard/bridgedma/src/bridgedma-it.c
+++ b/cesar/test_general/hard/bridgedma/src/bridgedma-it.c
@@ -28,6 +28,8 @@
#include <cyg/infra/diag.h>
#include "hal/arch/arch.h"
+#include "inc/bridgedma-regs.h"
+
#define TEST_BRIDGEDMA_PB_NB 5
#define TEST_BRIDGEDMA_JOB_OFFSET 128
@@ -40,27 +42,6 @@ static uint it_recv = false;
static phy_bridgedma_job_t job1;
static u8 frame_buffer [2048];
-void
-bridgedma_verify_registers (void)
-{
-#ifdef __sparc__
- arch_reorder_barrier ();
- // Verify the register corresponding to the MF header1.
- volatile uint *job_header_3210 = (uint *) PHY_BRIDGEDMA_JOB_HEADER_3210;
- volatile uint *job_header_7654 = (uint *) PHY_BRIDGEDMA_JOB_HEADER_7654;
-
- volatile uint *control = (uint *) PHY_BRIDGEDMA_CONTROL;
- volatile uint *job_len = (uint *) PHY_BRIDGEDMA_JOB_LENGTH;
- arch_reorder_barrier ();
-
- diag_printf ("JOB HEADER BRIDGEDMA_3210 : %x\n", *job_header_3210);
- diag_printf ("JOB HEADER BRIDGEDMA_7654 : %x\n", *job_header_7654);
- diag_printf ("Control : %x\n", *control);
- diag_printf ("Job length : %x\n", *job_len);
-#endif
-}
-
-
/* WARNING: callback are not possible to test inside UNIT TEST */
bool _bridgedma_segmentation_cb(void *data, u32 status)
{
@@ -144,7 +125,9 @@ void
test_thread_process (cyg_addrword_t data)
{
bridgedma_segmentation_test_case ();
- bridgedma_verify_registers ();
+
+ phy_bridgedma_regs_state ();
+
if (it_recv == false)
{
diag_printf ("gonna sleep\n");
diff --git a/cesar/test_general/hard/bridgedma/src/bridgedma-rx-one-frame.c b/cesar/test_general/hard/bridgedma/src/bridgedma-rx-one-frame.c
new file mode 100644
index 0000000000..8309e2ba4b
--- /dev/null
+++ b/cesar/test_general/hard/bridgedma/src/bridgedma-rx-one-frame.c
@@ -0,0 +1,360 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file src/bridgedma-rx-one-frame.c
+ * \brief Get a Frame from PB to buffer.
+ * \ingroup test_general_hard
+ *
+ */
+#include <cyg/kernel/kapi.h>
+#include <cyg/hal/hal_arch.h>
+#include <string.h>
+#include <stdio.h>
+#include <cyg/infra/diag.h>
+
+#include "common/std.h"
+#include "common/defs/ethernet.h"
+
+#include "mac/common/pb.h"
+
+#include "lib/bitstream.h"
+#include "lib/test.h"
+#include "lib/read_word.h"
+#include "lib/swap.h"
+
+#include "hal/phy/bridgedma.h"
+#include "hal/phy/inc/bridgedma_regs.h"
+
+/** Thread context. */
+cyg_thread my_test_thread;
+cyg_handle_t my_test_thread_handle;
+u8 my_test_thread_stack [CYGNUM_HAL_STACK_SIZE_TYPICAL];
+/* end of thread context. */
+
+static u8 frame_buffer [2048];
+static u8 cmp_buffer[2048];
+static phy_bridgedma_job_t job;
+static bool it_recv = false;
+static test_t test;
+static pb_t *pb_first;
+static pb_t *pb_last;
+static uint mf_header1;
+static uint mf_header2;
+
+/* Job configuration. */
+static uint TEST_BRIDGEDMA_JOB_OFFSET;
+static uint TEST_BRIDGEDMA_JOB_LENGTH;
+static uint TEST_BRIDGEDMA_JOB_PB_QTE;
+
+
+/* WARNING: callback are not possible to test inside UNIT TEST */
+bool _bridgedma_segmentation_cb(void *data, u32 status)
+{
+ it_recv = true;
+
+ return true;
+}
+
+/* WARNING: callback are not possible to test inside UNIT TEST */
+void _bridgedma_deffered_cb(void *data)
+{
+}
+
+
+void
+bridgedma_test (void)
+{
+ phy_bridgedma_t *bridgedma;
+ uint ats = 0x12345678;
+ uint i;
+ uint frame_buffer_offset;
+ bitstream_t bitstream;
+
+ /* Create the PBs. */
+ pb_first = (pb_t *) blk_alloc_desc_range (TEST_BRIDGEDMA_JOB_PB_QTE,
+ (blk_t **) &pb_last);
+
+ job.next = NULL;
+ job.data_addr = frame_buffer;
+ job.header_len = 6;
+ job.data_len = TEST_BRIDGEDMA_JOB_LENGTH;
+ job.first_pb_desc = (blk_t *)pb_first;
+ job.first_pb_offset = TEST_BRIDGEDMA_JOB_OFFSET;
+ job.segment_len = 512;
+ job.direction = 1;
+ job.crc_reset = 1;
+ job.crc_store = 1;
+ job.job_it = 1;
+ job.eth_buffer_mask = 0x1fffff0; /* 2048 bytes mask */
+ job.mf_header1 = 0xFFFFFFFF;
+ job.mf_header2 = 0xFFFFFFFF;
+
+ /* Payload + ATS */
+ mf_header1 = (((job.data_len + 4 - 1) << 2) | 0x02) | (ats << 16);
+ mf_header2 = (ats >> 16);
+
+
+ /* Fill the frame. */
+ for (i = 0; i < 2048; i++)
+ {
+ frame_buffer[i] = (u8) i;
+ cmp_buffer[i] = (u8) i;
+ }
+
+ pb_last->next = NULL;
+
+ /* Fill the PBs. */
+ pb_first->header.ssn = 0;
+ pb_first->header.mfbf = true;
+ pb_first->header.mfbo = TEST_BRIDGEDMA_JOB_OFFSET;
+
+ bitstream_init (&bitstream, pb_first->data + TEST_BRIDGEDMA_JOB_OFFSET,
+ BLK_SIZE - TEST_BRIDGEDMA_JOB_OFFSET,
+ BITSTREAM_WRITE);
+ bitstream_access_buf (&bitstream, &mf_header1, 4);
+ bitstream_access_buf (&bitstream, &mf_header2, 2);
+ bitstream_access_buf (&bitstream, frame_buffer,
+ BLK_SIZE - 6 - TEST_BRIDGEDMA_JOB_OFFSET);
+ bitstream_finalise (&bitstream);
+ frame_buffer_offset = BLK_SIZE - TEST_BRIDGEDMA_JOB_OFFSET - 6;
+
+ pb_first->next->header.ssn = 1;
+ bitstream_init (&bitstream, pb_first->next->data,
+ BLK_SIZE,
+ BITSTREAM_WRITE);
+
+ bitstream_access_buf (&bitstream, frame_buffer + frame_buffer_offset,
+ BLK_SIZE);
+ bitstream_finalise (&bitstream);
+ frame_buffer_offset += BLK_SIZE;
+
+ pb_first->next->next->header.ssn = 2;
+ bitstream_init (&bitstream, pb_first->next->next->data,
+ BLK_SIZE,
+ BITSTREAM_WRITE);
+ bitstream_access_buf (&bitstream, frame_buffer + frame_buffer_offset,
+ BLK_SIZE);
+ bitstream_finalise (&bitstream);
+ frame_buffer_offset += BLK_SIZE;
+
+ pb_last->header.ssn = 3;
+ bitstream_init (&bitstream, pb_first->next->next->next->data,
+ BLK_SIZE,
+ BITSTREAM_WRITE);
+ bitstream_access_buf (&bitstream, frame_buffer + frame_buffer_offset,
+ TEST_BRIDGEDMA_JOB_LENGTH - frame_buffer_offset);
+ bitstream_access_buf (&bitstream, frame_buffer + frame_buffer_offset,
+ TEST_BRIDGEDMA_JOB_LENGTH - frame_buffer_offset);
+ bitstream_finalise (&bitstream);
+
+ /* Store the PBs in the job. */
+ job.first_pb_desc = (blk_t *) pb_first;
+
+ /* Reset the frame buffer. */
+ memset (frame_buffer, 0, 2048);
+
+ /* Initialise the bridgedma. */
+ bridgedma = phy_bridgedma_init(NULL, _bridgedma_segmentation_cb,
+ _bridgedma_deffered_cb);
+
+ cyg_thread_delay (1);
+
+ phy_bridgedma_start (bridgedma, &job, &job);
+}
+
+void
+bridgedma_verify_reception (void)
+{
+ uint i;
+ bool result;
+ test_case_begin (test, "RX - Frame reception");
+
+
+#ifdef __sparc__
+ uint data;
+ // Verify the register corresponding to the MF header1.
+ volatile u32 *job_header_3210 = (u32 *) PHY_BRIDGEDMA_JOB_HEADER_3210;
+ volatile u32 *job_header_7654 = (u32 *) PHY_BRIDGEDMA_JOB_HEADER_7654;
+ volatile u32 *control = (u32 *) PHY_BRIDGEDMA_CONTROL;
+ volatile u32 *job_len = (u32 *) PHY_BRIDGEDMA_JOB_LENGTH;
+ volatile u32 *jobd_current = (u32 *) PHY_BRIDGEDMA_JOBD_PTR;
+ volatile u32 *pb_conf = (u32 *) PHY_BRIDGEDMA_PB_CONF;
+ volatile u32 *first_pb = (u32 *) PHY_BRIDGEDMA_JOB_FIRST_PB_DESC;
+ volatile u32 *job_buf_addr = (u32 *) PHY_BRIDGEDMA_JOB_BUFF_ADD;
+
+ test_begin (test, "Verify registers")
+ {
+ test_fail_if (*job_header_3210 != job.mf_header1);
+ test_fail_if (*job_header_7654 != job.mf_header2);
+
+ data = *control;
+ test_fail_if (BF_GET (PHY_BRIDGEDMA_CONTROL__STATUS, data) != 0);
+
+ test_fail_if (*jobd_current != 0);
+
+ data = *pb_conf;
+ test_fail_if (BF_GET (PHY_BRIDGEDMA_PB_CONF__OFFSET, data) !=
+ TEST_BRIDGEDMA_JOB_OFFSET);
+ test_fail_if (BF_GET (PHY_BRIDGEDMA_PB_CONF__LENGTH, data) !=
+ BLK_SIZE);
+
+ data = *job_len;
+ test_fail_if (BF_GET (PHY_BRIDGEDMA_JOB_LENGTH__LENGTH, data) != job.data_len);
+ }
+ test_end;
+
+
+ diag_printf ("******************* Debug *********************\n");
+ diag_printf ("[JOBD current] bridge : %x \t Cesar :%p\n", *jobd_current, &job);
+
+ data = *job_len;
+ diag_printf ("[JOBD length] bridge : %x \t Cesar :%x\n",
+ BF_GET(PHY_BRIDGEDMA_JOB_LENGTH__LENGTH, data), job.data_len);
+ diag_printf ("[JOBD header length] bridge : %x \t Cesar :%x\n",
+ BF_GET(PHY_BRIDGEDMA_JOB_LENGTH__HEADER_LEN, data),
+ job.header_len);
+ diag_printf ("[JOBD header_3210] bridge : %x \t Cesar : %x\n",
+ *job_header_3210, job.mf_header1);
+ diag_printf ("[JOBD header_7654] bridge : %x \t Cesar : %x\n",
+ *job_header_7654, job.mf_header2);
+ diag_printf ("[JOB BUFF ADDR] bridge : %x \t Cesar : %p\n", *job_buf_addr,
+ frame_buffer);
+
+ data = *pb_conf;
+ diag_printf ("[PB Conf length] bridge : %x \t Cesar : %x\n",
+ BF_GET (PHY_BRIDGEDMA_PB_CONF__LENGTH, data), job.segment_len);
+ diag_printf ("[PB Conf offset] bridge : %x \t Cesar : %x\n",
+ BF_GET (PHY_BRIDGEDMA_PB_CONF__OFFSET, data), job.first_pb_offset);
+
+ diag_printf ("[First PB] bridged : %x \t Cesar : %p\n", *first_pb,
+ pb_first);
+
+ diag_printf ("**************P** END Debug *******************\n");
+#endif
+
+ test_begin (test, "Verify PB data")
+ {
+ uint offset = TEST_BRIDGEDMA_JOB_OFFSET + job.header_len;
+ pb_t *pb_current = pb_first;
+ uint end_length;
+
+ // PB 1.
+ test_fail_if (memcmp (cmp_buffer, pb_current->data + offset,
+ BLK_SIZE - offset) != 0, "Wrong data in PB 1");
+
+ // PB2.
+ offset = BLK_SIZE - offset;
+ pb_current = pb_current->next;
+
+ test_fail_if (memcmp (cmp_buffer + offset, pb_current->data, BLK_SIZE) != 0,
+ "Wrong data in PB 2");
+
+ // PB3.
+ offset += BLK_SIZE;
+ pb_current = pb_current->next;
+
+ test_fail_if (memcmp (cmp_buffer + offset, pb_current->data, BLK_SIZE) != 0,
+ "Wrong data in PB 3");
+
+ // PB4.
+ offset += BLK_SIZE;
+ end_length = TEST_BRIDGEDMA_JOB_LENGTH - 2*BLK_SIZE
+ - (BLK_SIZE - TEST_BRIDGEDMA_JOB_OFFSET + job.header_len);
+ pb_current = pb_current->next;
+
+ test_fail_if (memcmp (cmp_buffer + offset, pb_current->data, end_length) != 0,
+ "Wrong data in PB 4");
+
+ test_fail_if (read_u32_from_word (pb_first->data +
+ TEST_BRIDGEDMA_JOB_OFFSET) !=
+ job.mf_header1);
+ }
+ test_end;
+
+ result = memcmp (cmp_buffer, frame_buffer, TEST_BRIDGEDMA_JOB_LENGTH);
+ test_begin (test, "Verifying entry buffer with output buffer")
+ {
+ test_fail_if ( result != 0, "Output differ from input");
+ }
+ test_end;
+
+ if (result)
+ {
+ diag_printf ("************* CMP Buffer *************\n");
+ for (i = 0; i < (TEST_BRIDGEDMA_JOB_LENGTH + 2) / 4; i++)
+ {
+ diag_printf ("%8x ", read_u32_from_word ((u8 *)(((u32 *)cmp_buffer) + i)));
+ if ((i % 8) == 0)
+ diag_printf ("\n");
+ }
+ diag_printf ("\n");
+ diag_printf ("************* CMP Buffer *************\n");
+
+
+ diag_printf ("************* Frame Buffer *************\n");
+ for (i = 0; i < (TEST_BRIDGEDMA_JOB_LENGTH + 2) / 4; i++)
+ {
+ diag_printf ("%8x ", swap32(read_u32_from_word ((u8 *)(((u32 *)frame_buffer) + i))));
+ if ((i % 8) == 0)
+ diag_printf ("\n");
+ }
+ diag_printf ("\n");
+ diag_printf ("************* Frame Buffer *************\n");
+ }
+
+
+ /** release resources. */
+ blk_release_desc_range ((blk_t *) pb_first, (blk_t *) pb_last);
+}
+
+void
+test_thread_process (cyg_addrword_t data)
+{
+ uint i;
+
+ for (i = 0; i < 4; i++)
+ {
+ TEST_BRIDGEDMA_JOB_OFFSET = 128 + i;
+ TEST_BRIDGEDMA_JOB_LENGTH = ETH_PACKET_MAX_SIZE;
+
+ TEST_BRIDGEDMA_JOB_PB_QTE =
+ ((TEST_BRIDGEDMA_JOB_LENGTH + TEST_BRIDGEDMA_JOB_OFFSET) / BLK_SIZE + 1);
+
+
+ bridgedma_test ();
+
+ cyg_thread_delay(2);
+ bridgedma_verify_reception ();
+
+ test_result (test);
+ }
+#ifndef __sparc__
+ HAL_PLATFORM_EXIT (test_nb_failed (test) == 0 ? 0 : 1);
+#endif
+}
+
+
+int
+main (void)
+{
+ test_init (test, 0, NULL);
+
+ // Create the thread.
+ cyg_thread_create( 9,
+ &test_thread_process,
+ (cyg_addrword_t) &test,
+ "TEST_THREAD",
+ my_test_thread_stack,
+ CYGNUM_HAL_STACK_SIZE_TYPICAL,
+ &my_test_thread_handle,
+ &my_test_thread);
+ cyg_thread_resume (my_test_thread_handle);
+
+ return 0;
+}
+