From 99b25f6630887023f7229755982a94e0c0518791 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Tue, 19 Sep 2023 10:36:30 +0200
Subject: [PATCH] Add func_sdp_bdo_cep_hdr_field_sel_dest().

---
 .../libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd    | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd
index 3142ce9dd4..8a855419e5 100644
--- a/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd
+++ b/applications/lofar2/libraries/sdp/src/vhdl/sdp_bdo_pkg.vhd
@@ -53,15 +53,34 @@ package sdp_bdo_pkg is
       (others => (others => '0')),
       (others => (others => '0')), 0, 0, 0 );
 
+  -- Select header destination MAC, IP, UDP field from data path, to support
+  -- BDO multiple destinations register
+  function func_sdp_bdo_cep_hdr_field_sel_dest(sl : std_logic) return std_logic_vector;
+
+  -- Determine actual nof_destinations and actual nof_blocks_per_packet
   function func_sdp_bdo_parse_nof_destinations(nof_destinations : natural) return natural;
   function func_sdp_bdo_nof_blocks_per_packet_look_up_table return t_natural_arr;
+
+  -- Determine nof_beamlets_per_block per destination
   function func_sdp_nof_beamlets_per_block_look_up_table return t_natural_arr;
   function func_sdp_nof_beamlets_per_block_look_up_matrix return t_natural_matrix;
 end package sdp_bdo_pkg;
 
 package body sdp_bdo_pkg is
+  function func_sdp_bdo_cep_hdr_field_sel_dest(sl : std_logic) return std_logic_vector is
+    variable v_sel : std_logic_vector(c_sdp_cep_nof_hdr_fields - 1 downto 0) := c_sdp_cep_hdr_field_sel;
+  begin
+    -- Select header destination MAC, IP, UDP field from data path instead of
+    -- from MM in dp_offload_tx_v3
+    v_sel(38) := sl;  -- eth_dst_mac
+    v_sel(24) := sl;  -- ip_dst_addr
+    v_sel(22) := sl;  -- udp_dst_port
+    return v_sel;
+  end func_sdp_bdo_cep_hdr_field_sel_dest;
+
   function func_sdp_bdo_parse_nof_destinations(nof_destinations : natural) return natural is
   begin
+    -- Parse input nof_destinations value
     if nof_destinations = 0 then
       return 1;
     elsif nof_destinations > c_sdp_bdo_nof_destinations_max then
-- 
GitLab