From bd16ce1e93d198e034d98775aff78b830a4c2a42 Mon Sep 17 00:00:00 2001 From: Maciej Lipinski <maciej.lipinski@cern.ch> Date: Sun, 12 Feb 2017 21:55:14 -0600 Subject: [PATCH] [tb/wrpc] added comments to the new wrc_main_sim file --- wrc_main_sim.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/wrc_main_sim.c b/wrc_main_sim.c index 825881498..419aa99d9 100644 --- a/wrc_main_sim.c +++ b/wrc_main_sim.c @@ -1,4 +1,4 @@ -/* +/* **************************************************************************** * This work is part of the White Rabbit project * * Copyright (C) 2017 CERN (www.cern.ch) @@ -6,6 +6,20 @@ * Author: Maciej Lipinski <maciej.lipinski@cern.ch> * * Released according to the GNU GPL, version 2 or any later version. + * + * **************************************************************************** + * Description: + * This file provides the main() function that replaces the main function of + * wrc_main.c file when WRPC is compiled for testbench. This is done by + * configuring WRPC using make menuconfig: + * a) by using the default wrpc_sim_defconfig, i.e. "make wrpc_sim_defconfig", or + * b) by chosing in make menuconfig the following opton: + * "Build simple software for test of WR PTP Core in simulatin" + * + * When compiled for testbench simulation, the main() function of this file is + * used. This file includes all the tests needed for different testbenches + * (so far only one...) + * **************************************************************************** */ #include <stdio.h> @@ -20,8 +34,23 @@ void wrc_run_task(struct wrc_task *t); +/* + * This is a variable that is meant to be set by testbench through memory-manipulation. + * + * To allow this, there are still some elements missing: + * - the test_number variable needs to be at a known address, this is already done + * for other variables (for VLANs?), so the same needs to be done for this + * - testbench needs to be modified appropriately + * + * The idea behind is that different tests for different testbenches are compiled in + * this file, and the proper test is loaded based on this variable. Each testbench + * sets the proper testbench number at th startup + */ static int test_number = 0; +/* + * Basic initialization required for simulation + */ static void wrc_sim_initialize(void) { uint8_t mac_addr[6]; @@ -29,6 +58,7 @@ static void wrc_sim_initialize(void) sdb_find_devices(); timer_init(1); + //Source MAC used by WRPC's Endpoint mac_addr[0] = 0xDE; mac_addr[1] = 0xAD; mac_addr[2] = 0xBE; @@ -44,6 +74,23 @@ static void wrc_sim_initialize(void) spll_very_init(); } /* + * This is a test used by: + * - WRPC testbench located in "testbench/wrc_core" folder of the wr-cores repository + * (git://ohwr.org/hdl-core-lib/wr-cores.git) + * + * This test: + * - sends min-size frames of PTP EtherType (0x88f7) and Dst MAC (01:1B:19:00:00:00) + * with embedded sequence number and flags providing information about the previously + * received frame + * - checkes whether the transmitted frames are successfully received back in a proper + * sequence (it is supposed that the testbench loops back the frames) + * - embeds in the next frame flag and return value regarding the previously received + * frames, i.e.: + * # the flags say: + * 0xAA: this is the first frame (no previous frames) + * 0xBB: previous frame was successfully received + * 0xE*: something was wrong with the previously received frame + * # return value - it is the value returned by the reception funcation * */ int wrpc_test_1(void) @@ -71,7 +118,7 @@ int wrpc_test_1(void) for(j=0; j<80; ++j) { tx_payload[j] = 0xC7;//j; } - //address and EtherType + //MAC address and EtherType of PTP memcpy(tx_hdr.dstmac, "\x01\x1B\x19\x00\x00\x00", 6); tx_hdr.ethtype = htons(0x88f7); -- GitLab