150 auto& tx_mux_stat =
m_readout.getNode(
"tx_path.tx_mux.csr.stat");
151 auto err = tx_mux_stat.getNode(
"err").read();
152 auto eth_rdy = tx_mux_stat.getNode(
"eth_rdy").read();
153 auto src_rdy = tx_mux_stat.getNode(
"src_rdy").read();
154 auto udp_rdy = tx_mux_stat.getNode(
"udp_rdy").read();
155 tx_mux_stat.getClient().dispatch();
157 bool is_error = (err || !eth_rdy || !src_rdy || !udp_rdy);
159 if ( do_throw && is_error ) {
160 throw LinkInError(
ERS_HERE, link, err, eth_rdy, src_rdy, udp_rdy);
172 auto& tx_mux_ctrl =
m_readout.getNode(
"tx_path.tx_mux.csr.ctrl");
175 auto tx_en = tx_mux_ctrl.getNode(
"tx_en").read();
176 auto buf_en = tx_mux_ctrl.getNode(
"en_buf").read();
177 auto ctrl_en = tx_mux_ctrl.getNode(
"en").read();
184 tx_mux_ctrl.getNode(
"en").write(0x1);
185 tx_mux_ctrl.getClient().dispatch();
188 tx_mux_ctrl.getNode(
"tx_en").write(0x1);
189 tx_mux_ctrl.getClient().dispatch();
192 tx_mux_ctrl.getNode(
"en_buf").write(0x1);
193 tx_mux_ctrl.getClient().dispatch();
199 tx_mux_ctrl.getNode(
"en_buf").write(0x0);
200 tx_mux_ctrl.getClient().dispatch();
203 tx_mux_ctrl.getNode(
"tx_en").write(0x0);
204 tx_mux_ctrl.getClient().dispatch();
207 tx_mux_ctrl.getNode(
"en").write(0x0);
208 tx_mux_ctrl.getClient().dispatch();
233HermesCoreController::config_udp( uint16_t link, uint64_t src_mac, uint32_t src_ip, uint16_t src_port, uint64_t dst_mac, uint32_t dst_ip, uint16_t dst_port, uint32_t filters) {
236 throw LinkDoesNotExist(
ERS_HERE, link);
242 const auto& udp_ctrl =
m_readout.getNode(
"tx_path.udp_core.udp_core_control");
245 udp_ctrl.getNode(
"src_addr_ctrl.use_external").write(0);
248 udp_ctrl.getNode(
"src_addr_ctrl.src_mac_addr_lower").write(src_mac & 0xffffffff);
249 udp_ctrl.getNode(
"src_addr_ctrl.src_mac_addr_upper").write((src_mac >> 32) & 0xffff);
252 udp_ctrl.getNode(
"src_addr_ctrl.src_ip_addr").write(src_ip);
255 udp_ctrl.getNode(
"ctrl.dst_mac_addr_lower").write(dst_mac & 0xffffffff);
256 udp_ctrl.getNode(
"ctrl.dst_mac_addr_upper").write((dst_mac >> 32) & 0xffff);
259 udp_ctrl.getNode(
"ctrl.dst_ip_addr").write(dst_ip);
262 udp_ctrl.getNode(
"src_addr_ctrl.src_port").write(src_port);
263 udp_ctrl.getNode(
"ctrl.dst_port").write(dst_port);
266 udp_ctrl.getNode(
"ctrl.filter_control").write(filters);
267 udp_ctrl.getClient().dispatch();
327 const auto& mux_stats =
m_readout.getNode(
"tx_path.tx_mux.csr.stat");
328 auto err = mux_stats.getNode(
"err").read();
329 auto eth_rdy = mux_stats.getNode(
"eth_rdy").read();
330 auto src_rdy = mux_stats.getNode(
"src_rdy").read();
331 auto udp_rdy = mux_stats.getNode(
"udp_rdy").read();
332 mux_stats.getClient().dispatch();
334 const auto& udp_ctrl =
m_readout.getNode(fmt::format(
"tx_path.udp_core.udp_core_control"));
335 const auto& rx_stats = udp_ctrl.getNode(
"rx_packet_counters");
337 auto rx_arp_count = rx_stats.getNode(
"arp_count").read();
338 auto rx_ping_count = rx_stats.getNode(
"ping_count").read();
339 auto rx_udp_count = rx_stats.getNode(
"udp_count").read();
340 rx_stats.getClient().dispatch();
342 const auto& tx_stats = udp_ctrl.getNode(
"tx_packet_counters");
344 auto tx_arp_count = tx_stats.getNode(
"arp_count").read();
345 auto tx_ping_count = tx_stats.getNode(
"ping_count").read();
346 auto tx_udp_count = tx_stats.getNode(
"udp_count").read();
347 tx_stats.getClient().dispatch();
350 info.set_err(err.value());
351 info.set_eth_rdy(eth_rdy.value());
352 info.set_src_rdy(src_rdy.value());
353 info.set_udp_rdy(udp_rdy.value());
355 info.set_rcvd_arp_count(rx_arp_count.value());
356 info.set_rcvd_ping_count(rx_ping_count.value());
357 info.set_rcvd_udp_count(rx_udp_count.value());
359 info.set_sent_arp_count(tx_arp_count.value());
360 info.set_sent_ping_count(tx_ping_count.value());
361 info.set_sent_udp_count(tx_udp_count.value());
void config_udp(uint16_t link, uint64_t src_mac, uint32_t src_ip, uint16_t src_port, uint64_t dst_mac, uint32_t dst_ip, uint16_t dst_port, uint32_t filters)