137 auto& tx_mux_stat =
m_readout.getNode(
"tx_path.tx_mux.csr.stat");
138 auto err = tx_mux_stat.getNode(
"err").read();
139 auto eth_rdy = tx_mux_stat.getNode(
"eth_rdy").read();
140 auto src_rdy = tx_mux_stat.getNode(
"src_rdy").read();
141 auto udp_rdy = tx_mux_stat.getNode(
"udp_rdy").read();
142 tx_mux_stat.getClient().dispatch();
144 bool is_error = (err || !eth_rdy || !src_rdy || !udp_rdy);
146 if ( do_throw && is_error ) {
147 throw LinkInError(
ERS_HERE, link, err, eth_rdy, src_rdy, udp_rdy);
159 auto& tx_mux_ctrl =
m_readout.getNode(
"tx_path.tx_mux.csr.ctrl");
162 auto tx_en = tx_mux_ctrl.getNode(
"tx_en").read();
163 auto buf_en = tx_mux_ctrl.getNode(
"en_buf").read();
164 auto ctrl_en = tx_mux_ctrl.getNode(
"en").read();
171 tx_mux_ctrl.getNode(
"en").write(0x1);
172 tx_mux_ctrl.getClient().dispatch();
175 tx_mux_ctrl.getNode(
"tx_en").write(0x1);
176 tx_mux_ctrl.getClient().dispatch();
179 tx_mux_ctrl.getNode(
"en_buf").write(0x1);
180 tx_mux_ctrl.getClient().dispatch();
186 tx_mux_ctrl.getNode(
"en_buf").write(0x0);
187 tx_mux_ctrl.getClient().dispatch();
190 tx_mux_ctrl.getNode(
"tx_en").write(0x0);
191 tx_mux_ctrl.getClient().dispatch();
194 tx_mux_ctrl.getNode(
"en").write(0x0);
195 tx_mux_ctrl.getClient().dispatch();
220HermesCoreController::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) {
223 throw LinkDoesNotExist(
ERS_HERE, link);
229 const auto& udp_ctrl =
m_readout.getNode(
"tx_path.udp_core.udp_core_control");
232 udp_ctrl.getNode(
"src_addr_ctrl.use_external").write(0);
235 udp_ctrl.getNode(
"src_addr_ctrl.src_mac_addr_lower").write(src_mac & 0xffffffff);
236 udp_ctrl.getNode(
"src_addr_ctrl.src_mac_addr_upper").write((src_mac >> 32) & 0xffff);
239 udp_ctrl.getNode(
"src_addr_ctrl.src_ip_addr").write(src_ip);
242 udp_ctrl.getNode(
"ctrl.dst_mac_addr_lower").write(dst_mac & 0xffffffff);
243 udp_ctrl.getNode(
"ctrl.dst_mac_addr_upper").write((dst_mac >> 32) & 0xffff);
246 udp_ctrl.getNode(
"ctrl.dst_ip_addr").write(dst_ip);
249 udp_ctrl.getNode(
"src_addr_ctrl.src_port").write(src_port);
250 udp_ctrl.getNode(
"ctrl.dst_port").write(dst_port);
253 udp_ctrl.getNode(
"ctrl.filter_control").write(filters);
254 udp_ctrl.getClient().dispatch();
313 const auto& mux_stats =
m_readout.getNode(
"tx_path.tx_mux.csr.stat");
314 auto err = mux_stats.getNode(
"err").read();
315 auto eth_rdy = mux_stats.getNode(
"eth_rdy").read();
316 auto src_rdy = mux_stats.getNode(
"src_rdy").read();
317 auto udp_rdy = mux_stats.getNode(
"udp_rdy").read();
318 mux_stats.getClient().dispatch();
320 const auto& udp_ctrl =
m_readout.getNode(fmt::format(
"tx_path.udp_core.udp_core_control"));
321 const auto& rx_stats = udp_ctrl.getNode(
"rx_packet_counters");
323 auto rx_arp_count = rx_stats.getNode(
"arp_count").read();
324 auto rx_ping_count = rx_stats.getNode(
"ping_count").read();
325 auto rx_udp_count = rx_stats.getNode(
"udp_count").read();
326 rx_stats.getClient().dispatch();
328 const auto& tx_stats = udp_ctrl.getNode(
"tx_packet_counters");
330 auto tx_arp_count = tx_stats.getNode(
"arp_count").read();
331 auto tx_ping_count = tx_stats.getNode(
"ping_count").read();
332 auto tx_udp_count = tx_stats.getNode(
"udp_count").read();
333 tx_stats.getClient().dispatch();
336 info.set_err(err.value());
337 info.set_eth_rdy(eth_rdy.value());
338 info.set_src_rdy(src_rdy.value());
339 info.set_udp_rdy(udp_rdy.value());
341 info.set_rcvd_arp_count(rx_arp_count.value());
342 info.set_rcvd_ping_count(rx_ping_count.value());
343 info.set_rcvd_udp_count(rx_udp_count.value());
345 info.set_sent_arp_count(tx_arp_count.value());
346 info.set_sent_ping_count(tx_ping_count.value());
347 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)