| USRP Hardware Driver and USRP Manual Version: 4.9.0.makepkg-0-g9ec1f582 UHD and USRP Manual |

Loading...
Searching...
No Matches
chdr_types.hpp
Go to the documentation of this file.
1//
2// Copyright 2019 Ettus Research, a National Instruments Brand
3//
4// SPDX-License-Identifier: GPL-3.0-or-later
5//
6
7#pragma once
8
9#include <uhd/rfnoc/rfnoc_types.hpp>
10#include <uhd/types/endianness.hpp>
11#include <uhd/utils/byteswap.hpp>
12#include <boost/format.hpp>
13#include <boost/optional.hpp>
14#include <deque>
15#include <list>
16#include <memory>
17#include <vector>
18
19 namespace uhd { namespace rfnoc { namespace chdr {
20
21 enum packet_type_t {
22 PKT_TYPE_MGMT = 0x0,
23 PKT_TYPE_STRS = 0x1,
24 PKT_TYPE_STRC = 0x2,
25 PKT_TYPE_CTRL = 0x4,
26 PKT_TYPE_DATA_NO_TS = 0x6,
27 PKT_TYPE_DATA_WITH_TS = 0x7,
28};
29
30//----------------------------------------------------
31// CHDR Header
32//----------------------------------------------------
33
34 class chdr_header
35{
36 public: // Functions
37 chdr_header() = default;
38 chdr_header(const chdr_header& rhs) = default;
39 chdr_header(chdr_header&& rhs) = default;
40
42 chdr_header(uint64_t flat_hdr) : _flat_hdr(flat_hdr) {}
43
45 inline uint8_t get_vc() const
46 {
47 return get_field<uint8_t>(_flat_hdr, VC_OFFSET, VC_WIDTH);
48 }
49
51 inline void set_vc(uint8_t vc)
52 {
53 _flat_hdr = set_field(_flat_hdr, vc, VC_OFFSET, VC_WIDTH);
54 }
55
57 inline bool get_eob() const
58 {
59 return get_field<bool>(_flat_hdr, EOB_OFFSET, EOB_WIDTH);
60 }
61
63 inline void set_eob(bool eob)
64 {
65 _flat_hdr = set_field(_flat_hdr, eob, EOB_OFFSET, EOB_WIDTH);
66 }
67
69 inline bool get_eov() const
70 {
71 return get_field<bool>(_flat_hdr, EOV_OFFSET, EOV_WIDTH);
72 }
73
75 inline void set_eov(bool eov)
76 {
77 _flat_hdr = set_field(_flat_hdr, eov, EOV_OFFSET, EOV_WIDTH);
78 }
79
81 inline packet_type_t get_pkt_type() const
82 {
83 return get_field<packet_type_t>(_flat_hdr, PKT_TYPE_OFFSET, PKT_TYPE_WIDTH);
84 }
85
87 inline void set_pkt_type(packet_type_t pkt_type)
88 {
89 _flat_hdr = set_field(_flat_hdr, pkt_type, PKT_TYPE_OFFSET, PKT_TYPE_WIDTH);
90 }
91
93 inline uint8_t get_num_mdata() const
94 {
95 return get_field<uint8_t>(_flat_hdr, NUM_MDATA_OFFSET, NUM_MDATA_WIDTH);
96 }
97
99 inline void set_num_mdata(uint8_t num_mdata)
100 {
101 _flat_hdr = set_field(_flat_hdr, num_mdata, NUM_MDATA_OFFSET, NUM_MDATA_WIDTH);
102 }
103
105 inline uint16_t get_seq_num() const
106 {
107 return get_field<uint16_t>(_flat_hdr, SEQ_NUM_OFFSET, SEQ_NUM_WIDTH);
108 }
109
111 inline void set_seq_num(uint16_t seq_num)
112 {
113 _flat_hdr = set_field(_flat_hdr, seq_num, SEQ_NUM_OFFSET, SEQ_NUM_WIDTH);
114 }
115
117 inline uint16_t get_length() const
118 {
119 return get_field<uint16_t>(_flat_hdr, LENGTH_OFFSET, LENGTH_WIDTH);
120 }
121
123 inline void set_length(uint16_t length)
124 {
125 _flat_hdr = set_field(_flat_hdr, length, LENGTH_OFFSET, LENGTH_WIDTH);
126 }
127
129 inline uint16_t get_dst_epid() const
130 {
131 return get_field<uint16_t>(_flat_hdr, DST_EPID_OFFSET, DST_EPID_WIDTH);
132 }
133
135 inline void set_dst_epid(uint16_t dst_epid)
136 {
137 _flat_hdr = set_field(_flat_hdr, dst_epid, DST_EPID_OFFSET, DST_EPID_WIDTH);
138 }
139
141 inline uint64_t pack() const
142 {
143 return _flat_hdr;
144 }
145
147 inline operator uint64_t() const
148 {
149 return pack();
150 }
151
153 inline bool operator==(const chdr_header& rhs) const
154 {
155 return _flat_hdr == rhs._flat_hdr;
156 }
157
159 inline bool operator!=(const chdr_header& rhs) const
160 {
161 return _flat_hdr != rhs._flat_hdr;
162 }
163
165 inline const chdr_header& operator=(const chdr_header& rhs)
166 {
167 _flat_hdr = rhs._flat_hdr;
168 return *this;
169 }
170
172 inline const chdr_header& operator=(const uint64_t& rhs)
173 {
174 _flat_hdr = rhs;
175 return *this;
176 }
177
179 inline const std::string to_string() const
180 {
181 // The static_casts are because vc and num_mdata are uint8_t -> unsigned char
182 // For some reason, despite the %u meaning unsigned int, boost still formats them
183 // as chars
184 return str(boost::format("chdr_header{vc:%u, eob:%c, eov:%c, pkt_type:%u, "
185 "num_mdata:%u, seq_num:%u, length:%u, dst_epid:%u}\n")
186 % static_cast<uint16_t>(get_vc()) % (get_eob() ? 'Y' : 'N')
187 % (get_eov() ? 'Y' : 'N') % get_pkt_type()
188 % static_cast<uint16_t>(get_num_mdata()) % get_seq_num() % get_length()
189 % get_dst_epid());
190 }
191
192 private:
193 // The flattened representation of the header stored in host order
194 uint64_t _flat_hdr = 0;
195
196 static constexpr size_t VC_WIDTH = 6;
197 static constexpr size_t EOB_WIDTH = 1;
198 static constexpr size_t EOV_WIDTH = 1;
199 static constexpr size_t PKT_TYPE_WIDTH = 3;
200 static constexpr size_t NUM_MDATA_WIDTH = 5;
201 static constexpr size_t SEQ_NUM_WIDTH = 16;
202 static constexpr size_t LENGTH_WIDTH = 16;
203 static constexpr size_t DST_EPID_WIDTH = 16;
204
205 static constexpr size_t VC_OFFSET = 58;
206 static constexpr size_t EOB_OFFSET = 57;
207 static constexpr size_t EOV_OFFSET = 56;
208 static constexpr size_t PKT_TYPE_OFFSET = 53;
209 static constexpr size_t NUM_MDATA_OFFSET = 48;
210 static constexpr size_t SEQ_NUM_OFFSET = 32;
211 static constexpr size_t LENGTH_OFFSET = 16;
212 static constexpr size_t DST_EPID_OFFSET = 0;
213
214 static inline uint64_t mask(const size_t width)
215 {
216 return ((uint64_t(1) << width) - 1);
217 }
218
219 template <typename field_t>
220 static inline field_t get_field(
221 const uint64_t flat_hdr, const size_t offset, const size_t width)
222 {
223 return static_cast<field_t>((flat_hdr >> offset) & mask(width));
224 }
225
226 template <typename field_t>
227 static inline uint64_t set_field(const uint64_t old_val,
228 const field_t field,
229 const size_t offset,
230 const size_t width)
231 {
232 return (old_val & ~(mask(width) << offset))
233 | ((static_cast<uint64_t>(field) & mask(width)) << offset);
234 }
235};
236
237
238//----------------------------------------------------
239// CHDR Control Packet Payload
240//----------------------------------------------------
241
242 enum ctrl_status_t {
243 CMD_OKAY = 0x0,
244 CMD_CMDERR = 0x1,
245 CMD_TSERR = 0x2,
246 CMD_WARNING = 0x3,
247};
248
249 enum ctrl_opcode_t {
250 OP_SLEEP = 0x0,
251 OP_WRITE = 0x1,
252 OP_READ = 0x2,
253 OP_READ_WRITE = 0x3,
254 OP_BLOCK_WRITE = 0x4,
255 OP_BLOCK_READ = 0x5,
256 OP_POLL = 0x6,
257 OP_USER1 = 0xA,
258 OP_USER2 = 0xB,
259 OP_USER3 = 0xC,
260 OP_USER4 = 0xD,
261 OP_USER5 = 0xE,
262 OP_USER6 = 0xF,
263};
264
265 class UHD_API ctrl_payload
266{
267 public: // Members
269 uint16_t dst_port = 0;
271 uint16_t src_port = 0;
273 uint8_t seq_num = 0;
275 boost::optional<uint64_t> timestamp = boost::none;
277 bool is_ack = false;
279 uint16_t src_epid = 0;
281 uint32_t address = 0;
283 std::vector<uint32_t> data_vtr = {0};
285 uint8_t byte_enable = 0xF;
287 ctrl_opcode_t op_code = OP_SLEEP;
289 ctrl_status_t status = CMD_OKAY;
290
291 public: // Functions
292 ctrl_payload() = default;
293 ctrl_payload(const ctrl_payload& rhs) = default;
294 ctrl_payload(ctrl_payload&& rhs) = default;
295
296 ctrl_payload& operator=(const ctrl_payload& rhs) = default;
297
299 void populate_header(chdr_header& header) const;
300
302 size_t serialize(uint64_t* buff,
303 size_t max_size_bytes,
304 const std::function<uint64_t(uint64_t)>& conv_byte_order) const;
305
307 template <endianness_t endianness>
308 size_t serialize(uint64_t* buff, size_t max_size_bytes) const
309 {
310 auto conv_byte_order = [](uint64_t x) -> uint64_t {
311 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::htonx<uint64_t>(x)
312 : uhd::htowx<uint64_t>(x);
313 };
314 return serialize(buff, max_size_bytes, conv_byte_order);
315 }
316
321 void deserialize(const uint64_t* buff,
322 size_t buff_size,
323 const std::function<uint64_t(uint64_t)>& conv_byte_order);
324
328 template <endianness_t endianness>
329 void deserialize(const uint64_t* buff, size_t buff_size)
330 {
331 auto conv_byte_order = [](uint64_t x) -> uint64_t {
332 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::ntohx<uint64_t>(x)
333 : uhd::wtohx<uint64_t>(x);
334 };
335 deserialize(buff, buff_size, conv_byte_order);
336 }
337
339 size_t get_length() const;
340
341 // Return whether or not we have a valid timestamp
342 bool has_timestamp() const
343 {
344 return bool(timestamp);
345 }
346
348 bool operator==(const ctrl_payload& rhs) const;
349
351 inline bool operator!=(const ctrl_payload& rhs) const
352 {
353 return !(*this == rhs);
354 }
355
357 std::string to_string() const;
358
359 private:
360 static constexpr size_t DST_PORT_WIDTH = 10;
361 static constexpr size_t SRC_PORT_WIDTH = 10;
362 static constexpr size_t NUM_DATA_WIDTH = 4;
363 static constexpr size_t SEQ_NUM_WIDTH = 6;
364 static constexpr size_t HAS_TIME_WIDTH = 1;
365 static constexpr size_t IS_ACK_WIDTH = 1;
366 static constexpr size_t SRC_EPID_WIDTH = 16;
367 static constexpr size_t ADDRESS_WIDTH = 20;
368 static constexpr size_t BYTE_ENABLE_WIDTH = 4;
369 static constexpr size_t OPCODE_WIDTH = 4;
370 static constexpr size_t STATUS_WIDTH = 2;
371
372 // Offsets assume 64-bit alignment
373 static constexpr size_t DST_PORT_OFFSET = 0;
374 static constexpr size_t SRC_PORT_OFFSET = 10;
375 static constexpr size_t NUM_DATA_OFFSET = 20;
376 static constexpr size_t SEQ_NUM_OFFSET = 24;
377 static constexpr size_t HAS_TIME_OFFSET = 30;
378 static constexpr size_t IS_ACK_OFFSET = 31;
379 static constexpr size_t SRC_EPID_OFFSET = 32;
380 static constexpr size_t ADDRESS_OFFSET = 0;
381 static constexpr size_t BYTE_ENABLE_OFFSET = 20;
382 static constexpr size_t OPCODE_OFFSET = 24;
383 static constexpr size_t STATUS_OFFSET = 30;
384 static constexpr size_t LO_DATA_OFFSET = 0;
385 static constexpr size_t HI_DATA_OFFSET = 32;
386};
387
388//----------------------------------------------------
389// CHDR Stream Status Packet Payload
390//----------------------------------------------------
391
392 enum strs_status_t {
393 STRS_OKAY = 0x0,
394 STRS_CMDERR = 0x1,
395 STRS_SEQERR = 0x2,
396 STRS_DATAERR = 0x3,
397 STRS_RTERR = 0x4,
398};
399
400 class UHD_API strs_payload
401{
402 public: // Members
404 uint16_t src_epid = 0;
406 strs_status_t status = STRS_OKAY;
408 uint64_t capacity_bytes = 0;
410 uint32_t capacity_pkts = 0;
412 uint64_t xfer_count_bytes = 0;
414 uint64_t xfer_count_pkts = 0;
416 uint16_t buff_info = 0;
418 union {
419 uint64_t info = 0;
420 struct
421 {
422 uint16_t last_control_seq_num : 16;
423 uint16_t expected_seq_num : 16;
424 uint16_t reserved_1 : 12;
425 bool stop_on_seq_error_enabled : 1;
426 bool seq_error_occoured : 1;
427 bool reserved_2 : 1;
428 bool flow_control_due : 1;
429 } status;
430 struct
431 {
432 uint16_t current_seq_num : 16;
433 uint16_t expected_seq_num : 16;
434 uint8_t chdr_packet_type : 3;
435 uint16_t reserved_1 : 9;
436 bool stop_on_seq_error_enabled : 1;
437 bool seq_error_occoured : 1;
438 bool reserved_2 : 1;
439 bool reserved_3 : 1;
440 } sequence_error;
441 struct
442 {
443 uint16_t dest_epid : 16;
444 uint16_t this_epid : 16;
445 uint32_t reserved_1 : 32;
446 } routing_error;
447 } status_info;
448
449 public: // Functions
450 strs_payload() = default;
451 strs_payload(const strs_payload& rhs) = default;
452 strs_payload(strs_payload&& rhs) = default;
453
454 strs_payload& operator=(const strs_payload& rhs) = default;
455
457 void populate_header(chdr_header& header) const;
458
460 size_t serialize(uint64_t* buff,
461 size_t max_size_bytes,
462 const std::function<uint64_t(uint64_t)>& conv_byte_order) const;
463
465 template <endianness_t endianness>
466 size_t serialize(uint64_t* buff, size_t max_size_bytes) const
467 {
468 auto conv_byte_order = [](uint64_t x) -> uint64_t {
469 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::htonx<uint64_t>(x)
470 : uhd::htowx<uint64_t>(x);
471 };
472 return serialize(buff, max_size_bytes, conv_byte_order);
473 }
474
479 void deserialize(const uint64_t* buff,
480 size_t buff_size,
481 const std::function<uint64_t(uint64_t)>& conv_byte_order);
482
486 template <endianness_t endianness>
487 void deserialize(const uint64_t* buff, size_t buff_size)
488 {
489 auto conv_byte_order = [](uint64_t x) -> uint64_t {
490 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::ntohx<uint64_t>(x)
491 : uhd::wtohx<uint64_t>(x);
492 };
493 deserialize(buff, buff_size, conv_byte_order);
494 }
495
497 size_t get_length() const;
498
500 bool operator==(const strs_payload& rhs) const;
501
503 inline bool operator!=(const strs_payload& rhs) const
504 {
505 return !(*this == rhs);
506 }
507
509 std::string to_string() const;
510
511 private:
512 static constexpr size_t SRC_EPID_WIDTH = 16;
513 static constexpr size_t STATUS_WIDTH = 4;
514 static constexpr size_t CAPACITY_BYTES_WIDTH = 40;
515 static constexpr size_t CAPACITY_PKTS_WIDTH = 24;
516 static constexpr size_t XFER_COUNT_PKTS_WIDTH = 40;
517 static constexpr size_t BUFF_INFO_WIDTH = 16;
518 static constexpr size_t STATUS_INFO_WIDTH = 48;
519
520 // Offsets assume 64-bit alignment
521 static constexpr size_t SRC_EPID_OFFSET = 0;
522 static constexpr size_t STATUS_OFFSET = 16;
523 static constexpr size_t CAPACITY_BYTES_OFFSET = 24;
524 static constexpr size_t CAPACITY_PKTS_OFFSET = 0;
525 static constexpr size_t XFER_COUNT_PKTS_OFFSET = 24;
526 static constexpr size_t BUFF_INFO_OFFSET = 0;
527 static constexpr size_t STATUS_INFO_OFFSET = 16;
528};
529
530//----------------------------------------------------
531// CHDR Stream Command Packet Payload
532//----------------------------------------------------
533
534 enum strc_op_code_t {
535 STRC_INIT = 0x0,
536 STRC_PING = 0x1,
537 STRC_RESYNC = 0x2,
538};
539
540 class UHD_API strc_payload
541{
542 public: // Members
544 uint16_t src_epid = 0;
546 strc_op_code_t op_code = STRC_INIT;
548 uint8_t op_data = 0;
550 uint64_t num_pkts = 0;
552 uint64_t num_bytes = 0;
554 static constexpr size_t MAX_PACKET_SIZE = 128;
555
556 public: // Functions
557 strc_payload() = default;
558 strc_payload(const strc_payload& rhs) = default;
559 strc_payload(strc_payload&& rhs) = default;
560
561 strc_payload& operator=(const strc_payload& rhs) = default;
562
564 void populate_header(chdr_header& header) const;
565
567 size_t serialize(uint64_t* buff,
568 size_t max_size_bytes,
569 const std::function<uint64_t(uint64_t)>& conv_byte_order) const;
570
572 template <endianness_t endianness>
573 size_t serialize(uint64_t* buff, size_t max_size_bytes) const
574 {
575 auto conv_byte_order = [](uint64_t x) -> uint64_t {
576 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::htonx<uint64_t>(x)
577 : uhd::htowx<uint64_t>(x);
578 };
579 return serialize(buff, max_size_bytes, conv_byte_order);
580 }
581
586 void deserialize(const uint64_t* buff,
587 size_t buff_size,
588 const std::function<uint64_t(uint64_t)>& conv_byte_order);
589
593 template <endianness_t endianness>
594 void deserialize(const uint64_t* buff, size_t buff_size)
595 {
596 auto conv_byte_order = [](uint64_t x) -> uint64_t {
597 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::ntohx<uint64_t>(x)
598 : uhd::wtohx<uint64_t>(x);
599 };
600 deserialize(buff, buff_size, conv_byte_order);
601 }
602
604 size_t get_length() const;
605
607 bool operator==(const strc_payload& rhs) const;
608
610 inline bool operator!=(const strc_payload& rhs) const
611 {
612 return !(*this == rhs);
613 }
614
616 std::string to_string() const;
617
618 private:
619 static constexpr size_t SRC_EPID_WIDTH = 16;
620 static constexpr size_t OP_CODE_WIDTH = 4;
621 static constexpr size_t OP_DATA_WIDTH = 4;
622 static constexpr size_t NUM_PKTS_WIDTH = 40;
623
624 // Offsets assume 64-bit alignment
625 static constexpr size_t SRC_EPID_OFFSET = 0;
626 static constexpr size_t OP_CODE_OFFSET = 16;
627 static constexpr size_t OP_DATA_OFFSET = 20;
628 static constexpr size_t NUM_PKTS_OFFSET = 24;
629};
630
631//----------------------------------------------------
632// CHDR Management Packet Payload
633//----------------------------------------------------
634
636// An operation consists of an operation code and some
637// payload associated with that operation.
638 class UHD_API mgmt_op_t
639{
640 public:
641 // Operation code
642 // Note that a management packet has 8 bits available for op codes. The
643 // values for these enums are used to construct the packets, so these values
644 // must match the values in rfnoc_chdr_internal_utils.vh.
645 enum op_code_t {
647 MGMT_OP_NOP = 0,
649 MGMT_OP_ADVERTISE = 1,
651 MGMT_OP_SEL_DEST = 2,
653 MGMT_OP_RETURN = 3,
655 MGMT_OP_INFO_REQ = 4,
657 MGMT_OP_INFO_RESP = 5,
659 MGMT_OP_CFG_WR_REQ = 6,
661 MGMT_OP_CFG_RD_REQ = 7,
663 MGMT_OP_CFG_RD_RESP = 8
664 };
665
667 using payload_t = uint64_t;
668
670 struct sel_dest_payload
671 {
672 const uint16_t dest;
673
674 sel_dest_payload(uint16_t dest_) : dest(dest_) {}
675 sel_dest_payload(payload_t payload_) : dest(static_cast<uint16_t>(payload_)) {}
676 operator payload_t() const
677 {
678 return static_cast<payload_t>(dest);
679 }
680 };
681
684 struct cfg_payload
685 {
686 const uint16_t addr;
687 const uint32_t data;
688
689 cfg_payload(uint16_t addr_, uint32_t data_ = 0) : addr(addr_), data(data_) {}
690 cfg_payload(payload_t payload_)
691 : addr(static_cast<uint16_t>(payload_ >> 0))
692 , data(static_cast<uint32_t>(payload_ >> 16))
693 {
694 }
695 operator payload_t() const
696 {
697 return ((static_cast<payload_t>(data) << 16) | static_cast<payload_t>(addr));
698 }
699 };
700
702 struct node_info_payload
703 {
704 const uint16_t device_id;
705 const uint8_t node_type;
706 const uint16_t node_inst;
707 const uint32_t ext_info;
708
709 node_info_payload(uint16_t device_id_,
710 uint8_t node_type_,
711 uint16_t node_inst_,
712 uint32_t ext_info_)
713 : device_id(device_id_)
714 , node_type(node_type_)
715 , node_inst(node_inst_)
716 , ext_info(ext_info_)
717 {
718 }
719 node_info_payload(payload_t payload_)
720 : device_id(static_cast<uint16_t>(payload_ >> 0))
721 , node_type(static_cast<uint8_t>((payload_ >> 16) & 0xF))
722 , node_inst(static_cast<uint16_t>((payload_ >> 20) & 0x3FF))
723 , ext_info(static_cast<uint32_t>((payload_ >> 30) & 0x3FFFF))
724 {
725 }
726 operator payload_t() const
727 {
728 return ((static_cast<payload_t>(device_id) << 0)
729 | (static_cast<payload_t>(node_type & 0xF) << 16)
730 | (static_cast<payload_t>(node_inst & 0x3FF) << 20)
731 | (static_cast<payload_t>(ext_info & 0x3FFFF) << 30));
732 }
733 };
734
735 mgmt_op_t(const op_code_t op_code,
736 const payload_t op_payload = 0,
737 const uint8_t ops_pending = 0)
738 : _op_code(op_code), _op_payload(op_payload), _ops_pending(ops_pending)
739 {
740 }
741
742 mgmt_op_t(const mgmt_op_t& rhs) = default;
743 mgmt_op_t& operator=(const mgmt_op_t& rhs) = default;
744
745
747 // Note that ops_pending is not used by UHD, since it can infer this value
748 // from the ops vector in mgmt_hop_t. It is needed only by the CHDR
749 // dissector.
750 inline uint8_t get_ops_pending() const
751 {
752 return _ops_pending;
753 }
754
756 inline op_code_t get_op_code() const
757 {
758 return _op_code;
759 }
760
762 inline uint64_t get_op_payload() const
763 {
764 return _op_payload;
765 }
766
768 inline bool operator==(const mgmt_op_t& rhs) const
769 {
770 return (_op_code == rhs._op_code) && (_op_payload == rhs._op_payload);
771 }
772
774 std::string to_string() const;
775
776 private:
777 op_code_t _op_code;
778 payload_t _op_payload;
779 uint8_t _ops_pending;
780};
781
783// A hop is a collection for management transactions for
784// a single node.
785 class UHD_API mgmt_hop_t
786{
787 public:
788 mgmt_hop_t() = default;
789 mgmt_hop_t(const mgmt_hop_t& rhs) = default;
790
792 // Operations are added to the hop in FIFO order and executed in FIFO order.
793 inline void add_op(const mgmt_op_t& op)
794 {
795 _ops.push_back(op);
796 }
797
799 inline size_t get_num_ops() const
800 {
801 return _ops.size();
802 }
803
805 inline const mgmt_op_t& get_op(size_t i) const
806 {
807 return _ops.at(i);
808 }
809
811 // The RFNoC Specification section 2.2.6 specifies that for chdr widths
812 // greater than 64, all MSBs are 0, so we pad out the hop based on the width
813 size_t serialize(std::vector<uint64_t>& target,
814 const std::function<uint64_t(uint64_t)>& conv_byte_order,
815 const size_t padding_size) const;
816
818 // The RFNoC Specification section 2.2.6 specifies that for chdr widths
819 // greater than 64, all MSBs are 0, so we remove padding based on the width
820 void deserialize(std::list<uint64_t>& src,
821 const std::function<uint64_t(uint64_t)>& conv_byte_order,
822 const size_t padding_size);
823
825 inline bool operator==(const mgmt_hop_t& rhs) const
826 {
827 return _ops == rhs._ops;
828 }
829
831 std::string to_string() const;
832
833 private:
834 std::vector<mgmt_op_t> _ops;
835};
836
838// A transaction is a collection of hops, where each hop is a collection
839// of management transactions.
840 class UHD_API mgmt_payload
841{
842 public:
843 mgmt_payload() = default;
844 mgmt_payload(const mgmt_payload& rhs) = default;
845 mgmt_payload(mgmt_payload&& rhs) = default;
846
847 mgmt_payload& operator=(const mgmt_payload& rhs) = default;
848
849 inline void set_header(sep_id_t src_epid, uint16_t protover, chdr_w_t chdr_w)
850 {
851 set_src_epid(src_epid);
852 set_chdr_w(chdr_w);
853 set_proto_ver(protover);
854 }
855
857 // Hops are added to the hop in FIFO order and executed in FIFO order.
858 inline void add_hop(const mgmt_hop_t& hop)
859 {
860 _hops.push_back(hop);
861 }
862
864 inline size_t get_num_hops() const
865 {
866 return _hops.size();
867 }
868
870 inline const mgmt_hop_t& get_hop(size_t i) const
871 {
872 return _hops.at(i);
873 }
874
876 inline mgmt_hop_t pop_hop()
877 {
878 auto hop = _hops.front();
879 _hops.pop_front();
880 return hop;
881 }
882
883 inline size_t get_size_bytes() const
884 {
885 size_t num_lines = 1; /* header */
886 for (const auto& hop : _hops) {
887 num_lines += hop.get_num_ops();
888 }
889 return num_lines * (chdr_w_to_bits(_chdr_w) / 8);
890 }
891
893 void populate_header(chdr_header& header) const;
894
896 size_t serialize(uint64_t* buff,
897 size_t max_size_bytes,
898 const std::function<uint64_t(uint64_t)>& conv_byte_order) const;
899
901 template <endianness_t endianness>
902 size_t serialize(uint64_t* buff, size_t max_size_bytes) const
903 {
904 auto conv_byte_order = [](uint64_t x) -> uint64_t {
905 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::htonx<uint64_t>(x)
906 : uhd::htowx<uint64_t>(x);
907 };
908 return serialize(buff, max_size_bytes, conv_byte_order);
909 }
910
915 void deserialize(const uint64_t* buff,
916 size_t buff_size,
917 const std::function<uint64_t(uint64_t)>& conv_byte_order);
918
922 template <endianness_t endianness>
923 void deserialize(const uint64_t* buff, size_t buff_size)
924 {
925 auto conv_byte_order = [](uint64_t x) -> uint64_t {
926 return (endianness == uhd::ENDIANNESS_BIG) ? uhd::ntohx<uint64_t>(x)
927 : uhd::wtohx<uint64_t>(x);
928 };
929 deserialize(buff, buff_size, conv_byte_order);
930 }
931
933 size_t get_length() const;
934
936 std::string to_string() const;
937
939 std::string hops_to_string() const;
940
942 inline sep_id_t get_src_epid() const
943 {
944 return _src_epid;
945 }
946
948 inline void set_src_epid(sep_id_t src_epid)
949 {
950 _src_epid = src_epid;
951 }
952
954 bool operator==(const mgmt_payload& rhs) const;
955
957 inline chdr_w_t get_chdr_w() const
958 {
959 return _chdr_w;
960 }
961
963 inline void set_chdr_w(chdr_w_t chdr_w)
964 {
965 _chdr_w = chdr_w;
966 _padding_size = (chdr_w_to_bits(_chdr_w) / 64) - 1;
967 }
968
970 inline uint16_t get_proto_ver() const
971 {
972 return _protover;
973 }
974
976 inline void set_proto_ver(uint16_t proto_ver)
977 {
978 _protover = proto_ver;
979 }
980
981 private:
982 sep_id_t _src_epid = 0;
983 uint16_t _protover = 0;
984 chdr_w_t _chdr_w = CHDR_W_64;
985 size_t _padding_size = 0;
986 std::deque<mgmt_hop_t> _hops;
987};
988
990 template <typename payload_t>
991 constexpr packet_type_t payload_to_packet_type();
992
993 template <>
994 constexpr packet_type_t payload_to_packet_type<ctrl_payload>()
995{
996 return PKT_TYPE_CTRL;
997}
998
999 template <>
1000 constexpr packet_type_t payload_to_packet_type<mgmt_payload>()
1001{
1002 return PKT_TYPE_MGMT;
1003}
1004
1005 template <>
1006 constexpr packet_type_t payload_to_packet_type<strc_payload>()
1007{
1008 return PKT_TYPE_STRC;
1009}
1010
1011 template <>
1012 constexpr packet_type_t payload_to_packet_type<strs_payload>()
1013{
1014 return PKT_TYPE_STRS;
1015}
1016
1017}}} // namespace uhd::rfnoc::chdr
byteswap.hpp
uhd::rfnoc::chdr::chdr_header
Definition chdr_types.hpp:35
uhd::rfnoc::chdr::chdr_header::set_vc
void set_vc(uint8_t vc)
Set the virtual channel field (6 bits).
Definition chdr_types.hpp:51
uhd::rfnoc::chdr::chdr_header::set_eob
void set_eob(bool eob)
Set the end-of-burst flag (1 bit).
Definition chdr_types.hpp:63
uhd::rfnoc::chdr::chdr_header::get_vc
uint8_t get_vc() const
Get the virtual channel field (6 bits).
Definition chdr_types.hpp:45
uhd::rfnoc::chdr::chdr_header::set_pkt_type
void set_pkt_type(packet_type_t pkt_type)
Set the packet type field (3 bits).
Definition chdr_types.hpp:87
uhd::rfnoc::chdr::chdr_header::to_string
const std::string to_string() const
Return a string representation of this object.
Definition chdr_types.hpp:179
uhd::rfnoc::chdr::chdr_header::chdr_header
chdr_header(const chdr_header &rhs)=default
uhd::rfnoc::chdr::chdr_header::chdr_header
chdr_header(uint64_t flat_hdr)
Unpack the header from a uint64_t.
Definition chdr_types.hpp:42
uhd::rfnoc::chdr::chdr_header::set_length
void set_length(uint16_t length)
Set the packet length field (16 bits).
Definition chdr_types.hpp:123
uhd::rfnoc::chdr::chdr_header::operator!=
bool operator!=(const chdr_header &rhs) const
Comparison operator (!=).
Definition chdr_types.hpp:159
uhd::rfnoc::chdr::chdr_header::pack
uint64_t pack() const
Pack the header into a uint64_t.
Definition chdr_types.hpp:141
uhd::rfnoc::chdr::chdr_header::get_seq_num
uint16_t get_seq_num() const
Get the sequence number field (16 bits).
Definition chdr_types.hpp:105
uhd::rfnoc::chdr::chdr_header::set_dst_epid
void set_dst_epid(uint16_t dst_epid)
Set the destination EPID field (16 bits).
Definition chdr_types.hpp:135
uhd::rfnoc::chdr::chdr_header::get_length
uint16_t get_length() const
Get the packet length field (16 bits).
Definition chdr_types.hpp:117
uhd::rfnoc::chdr::chdr_header::chdr_header
chdr_header(chdr_header &&rhs)=default
uhd::rfnoc::chdr::chdr_header::get_eov
bool get_eov() const
Get the end-of-vector flag (1 bit).
Definition chdr_types.hpp:69
uhd::rfnoc::chdr::chdr_header::get_pkt_type
packet_type_t get_pkt_type() const
Get the packet type field (3 bits).
Definition chdr_types.hpp:81
uhd::rfnoc::chdr::chdr_header::chdr_header
chdr_header()=default
uhd::rfnoc::chdr::chdr_header::get_eob
bool get_eob() const
Get the end-of-burst flag (1 bit).
Definition chdr_types.hpp:57
uhd::rfnoc::chdr::chdr_header::get_num_mdata
uint8_t get_num_mdata() const
Get number of metadata words field (5 bits).
Definition chdr_types.hpp:93
uhd::rfnoc::chdr::chdr_header::set_eov
void set_eov(bool eov)
Set the end-of-vector flag (1 bit).
Definition chdr_types.hpp:75
uhd::rfnoc::chdr::chdr_header::get_dst_epid
uint16_t get_dst_epid() const
Get the destination EPID field (16 bits).
Definition chdr_types.hpp:129
uhd::rfnoc::chdr::chdr_header::set_num_mdata
void set_num_mdata(uint8_t num_mdata)
Set number of metadata words field (5 bits).
Definition chdr_types.hpp:99
uhd::rfnoc::chdr::chdr_header::set_seq_num
void set_seq_num(uint16_t seq_num)
Set the sequence number field (16 bits).
Definition chdr_types.hpp:111
uhd::rfnoc::chdr::chdr_header::operator=
const chdr_header & operator=(const chdr_header &rhs)
Assignment operator (=) from a chdr_header.
Definition chdr_types.hpp:165
uhd::rfnoc::chdr::chdr_header::operator=
const chdr_header & operator=(const uint64_t &rhs)
Assignment operator (=) from a uint64_t.
Definition chdr_types.hpp:172
uhd::rfnoc::chdr::chdr_header::operator==
bool operator==(const chdr_header &rhs) const
Comparison operator (==).
Definition chdr_types.hpp:153
uhd::rfnoc::chdr::ctrl_payload::operator=
ctrl_payload & operator=(const ctrl_payload &rhs)=default
uhd::rfnoc::chdr::ctrl_payload::has_timestamp
bool has_timestamp() const
Definition chdr_types.hpp:342
uhd::rfnoc::chdr::ctrl_payload::get_length
size_t get_length() const
Get the serialized size of this payload in 64 bit words.
uhd::rfnoc::chdr::ctrl_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes, const std::function< uint64_t(uint64_t)> &conv_byte_order) const
Serialize the payload to a uint64_t buffer.
uhd::rfnoc::chdr::ctrl_payload::is_ack
bool is_ack
Is Acknowledgment Flag (1 bit).
Definition chdr_types.hpp:277
uhd::rfnoc::chdr::ctrl_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size)
Definition chdr_types.hpp:329
uhd::rfnoc::chdr::ctrl_payload::to_string
std::string to_string() const
Return a string representation of this object.
uhd::rfnoc::chdr::ctrl_payload::src_port
uint16_t src_port
Source port for transaction (10 bits).
Definition chdr_types.hpp:271
uhd::rfnoc::chdr::ctrl_payload::timestamp
boost::optional< uint64_t > timestamp
Has Time Flag (1 bit) and timestamp (64 bits).
Definition chdr_types.hpp:275
uhd::rfnoc::chdr::ctrl_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes) const
Serialize the payload to a uint64_t buffer (no conversion function).
Definition chdr_types.hpp:308
uhd::rfnoc::chdr::ctrl_payload::src_epid
uint16_t src_epid
Source endpoint ID of transaction (16 bits).
Definition chdr_types.hpp:279
uhd::rfnoc::chdr::ctrl_payload::ctrl_payload
ctrl_payload(const ctrl_payload &rhs)=default
uhd::rfnoc::chdr::ctrl_payload::status
ctrl_status_t status
Transaction status (4 bits).
Definition chdr_types.hpp:289
uhd::rfnoc::chdr::ctrl_payload::operator==
bool operator==(const ctrl_payload &rhs) const
Comparison operator (==).
uhd::rfnoc::chdr::ctrl_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size, const std::function< uint64_t(uint64_t)> &conv_byte_order)
uhd::rfnoc::chdr::ctrl_payload::address
uint32_t address
Address for transaction (20 bits).
Definition chdr_types.hpp:281
uhd::rfnoc::chdr::ctrl_payload::seq_num
uint8_t seq_num
Sequence number (6 bits).
Definition chdr_types.hpp:273
uhd::rfnoc::chdr::ctrl_payload::operator!=
bool operator!=(const ctrl_payload &rhs) const
Comparison operator (!=).
Definition chdr_types.hpp:351
uhd::rfnoc::chdr::ctrl_payload::op_code
ctrl_opcode_t op_code
Operation code (4 bits).
Definition chdr_types.hpp:287
uhd::rfnoc::chdr::ctrl_payload::dst_port
uint16_t dst_port
Destination port for transaction (10 bits).
Definition chdr_types.hpp:269
uhd::rfnoc::chdr::ctrl_payload::populate_header
void populate_header(chdr_header &header) const
Populate the header for this type of packet.
uhd::rfnoc::chdr::ctrl_payload::data_vtr
std::vector< uint32_t > data_vtr
Data for transaction (vector of 32 bits).
Definition chdr_types.hpp:283
uhd::rfnoc::chdr::ctrl_payload::ctrl_payload
ctrl_payload()=default
uhd::rfnoc::chdr::ctrl_payload::ctrl_payload
ctrl_payload(ctrl_payload &&rhs)=default
uhd::rfnoc::chdr::ctrl_payload::byte_enable
uint8_t byte_enable
Byte-enable mask for transaction (4 bits).
Definition chdr_types.hpp:285
uhd::rfnoc::chdr::mgmt_hop_t
A class that represents a single management hop.
Definition chdr_types.hpp:786
uhd::rfnoc::chdr::mgmt_hop_t::deserialize
void deserialize(std::list< uint64_t > &src, const std::function< uint64_t(uint64_t)> &conv_byte_order, const size_t padding_size)
Deserialize the payload from a uint64_t buffer.
uhd::rfnoc::chdr::mgmt_hop_t::operator==
bool operator==(const mgmt_hop_t &rhs) const
Comparison operator (==).
Definition chdr_types.hpp:825
uhd::rfnoc::chdr::mgmt_hop_t::get_op
const mgmt_op_t & get_op(size_t i) const
Get the n'th operation in the hop.
Definition chdr_types.hpp:805
uhd::rfnoc::chdr::mgmt_hop_t::serialize
size_t serialize(std::vector< uint64_t > &target, const std::function< uint64_t(uint64_t)> &conv_byte_order, const size_t padding_size) const
Serialize the payload to a uint64_t buffer.
uhd::rfnoc::chdr::mgmt_hop_t::add_op
void add_op(const mgmt_op_t &op)
Add a management operation to this hop.
Definition chdr_types.hpp:793
uhd::rfnoc::chdr::mgmt_hop_t::to_string
std::string to_string() const
Return a string representation of this object.
uhd::rfnoc::chdr::mgmt_hop_t::mgmt_hop_t
mgmt_hop_t(const mgmt_hop_t &rhs)=default
uhd::rfnoc::chdr::mgmt_hop_t::get_num_ops
size_t get_num_ops() const
Get the number of management operations in this hop.
Definition chdr_types.hpp:799
uhd::rfnoc::chdr::mgmt_hop_t::mgmt_hop_t
mgmt_hop_t()=default
uhd::rfnoc::chdr::mgmt_op_t
A class that represents a single management operation.
Definition chdr_types.hpp:639
uhd::rfnoc::chdr::mgmt_op_t::mgmt_op_t
mgmt_op_t(const op_code_t op_code, const payload_t op_payload=0, const uint8_t ops_pending=0)
Definition chdr_types.hpp:735
uhd::rfnoc::chdr::mgmt_op_t::mgmt_op_t
mgmt_op_t(const mgmt_op_t &rhs)=default
uhd::rfnoc::chdr::mgmt_op_t::op_code_t
op_code_t
Definition chdr_types.hpp:645
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_INFO_RESP
@ MGMT_OP_INFO_RESP
A response to an information request.
Definition chdr_types.hpp:657
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_NOP
@ MGMT_OP_NOP
Do nothing.
Definition chdr_types.hpp:647
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_CFG_WR_REQ
@ MGMT_OP_CFG_WR_REQ
Perform a configuration write on the node.
Definition chdr_types.hpp:659
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_RETURN
@ MGMT_OP_RETURN
Return the management packet back to its source.
Definition chdr_types.hpp:653
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_ADVERTISE
@ MGMT_OP_ADVERTISE
Advertise this operation to the outside logic.
Definition chdr_types.hpp:649
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_CFG_RD_RESP
@ MGMT_OP_CFG_RD_RESP
A response to a configuration read.
Definition chdr_types.hpp:663
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_INFO_REQ
@ MGMT_OP_INFO_REQ
Request information about the current node.
Definition chdr_types.hpp:655
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_SEL_DEST
@ MGMT_OP_SEL_DEST
Select the next destination for routing.
Definition chdr_types.hpp:651
uhd::rfnoc::chdr::mgmt_op_t::MGMT_OP_CFG_RD_REQ
@ MGMT_OP_CFG_RD_REQ
Perform a configuration read on the node.
Definition chdr_types.hpp:661
uhd::rfnoc::chdr::mgmt_op_t::to_string
std::string to_string() const
Return a string representation of this object.
uhd::rfnoc::chdr::mgmt_op_t::get_op_code
op_code_t get_op_code() const
Get the op-code for this transaction.
Definition chdr_types.hpp:756
uhd::rfnoc::chdr::mgmt_op_t::operator=
mgmt_op_t & operator=(const mgmt_op_t &rhs)=default
uhd::rfnoc::chdr::mgmt_op_t::get_ops_pending
uint8_t get_ops_pending() const
Get the ops pending for this transaction.
Definition chdr_types.hpp:750
uhd::rfnoc::chdr::mgmt_op_t::get_op_payload
uint64_t get_op_payload() const
Get the payload for this transaction.
Definition chdr_types.hpp:762
uhd::rfnoc::chdr::mgmt_op_t::payload_t
uint64_t payload_t
The payload for an operation is 48 bits wide.
Definition chdr_types.hpp:667
uhd::rfnoc::chdr::mgmt_op_t::operator==
bool operator==(const mgmt_op_t &rhs) const
Comparison operator (==).
Definition chdr_types.hpp:768
uhd::rfnoc::chdr::mgmt_payload::get_num_hops
size_t get_num_hops() const
Get the number of management hops in this hop.
Definition chdr_types.hpp:864
uhd::rfnoc::chdr::mgmt_payload::set_proto_ver
void set_proto_ver(uint16_t proto_ver)
Set the protocol version for this transaction.
Definition chdr_types.hpp:976
uhd::rfnoc::chdr::mgmt_payload::get_chdr_w
chdr_w_t get_chdr_w() const
Return the CHDR_W for this transaction.
Definition chdr_types.hpp:957
uhd::rfnoc::chdr::mgmt_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size, const std::function< uint64_t(uint64_t)> &conv_byte_order)
uhd::rfnoc::chdr::mgmt_payload::set_src_epid
void set_src_epid(sep_id_t src_epid)
Set the source EPID for this transaction.
Definition chdr_types.hpp:948
uhd::rfnoc::chdr::mgmt_payload::set_chdr_w
void set_chdr_w(chdr_w_t chdr_w)
Set the CHDR_W for this transaction.
Definition chdr_types.hpp:963
uhd::rfnoc::chdr::mgmt_payload::mgmt_payload
mgmt_payload(const mgmt_payload &rhs)=default
uhd::rfnoc::chdr::mgmt_payload::set_header
void set_header(sep_id_t src_epid, uint16_t protover, chdr_w_t chdr_w)
Definition chdr_types.hpp:849
uhd::rfnoc::chdr::mgmt_payload::get_length
size_t get_length() const
Get the serialized size of this payload in 64 bit words.
uhd::rfnoc::chdr::mgmt_payload::pop_hop
mgmt_hop_t pop_hop()
Pop the first hop of the transaction and return it.
Definition chdr_types.hpp:876
uhd::rfnoc::chdr::mgmt_payload::operator=
mgmt_payload & operator=(const mgmt_payload &rhs)=default
uhd::rfnoc::chdr::mgmt_payload::add_hop
void add_hop(const mgmt_hop_t &hop)
Add a management hop to this transaction.
Definition chdr_types.hpp:858
uhd::rfnoc::chdr::mgmt_payload::populate_header
void populate_header(chdr_header &header) const
Populate the header for this type of packet.
uhd::rfnoc::chdr::mgmt_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size)
Definition chdr_types.hpp:923
uhd::rfnoc::chdr::mgmt_payload::hops_to_string
std::string hops_to_string() const
Return a string representaiton of the hops contained by this object.
uhd::rfnoc::chdr::mgmt_payload::get_size_bytes
size_t get_size_bytes() const
Definition chdr_types.hpp:883
uhd::rfnoc::chdr::mgmt_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes) const
Serialize the payload to a uint64_t buffer (no conversion function).
Definition chdr_types.hpp:902
uhd::rfnoc::chdr::mgmt_payload::get_src_epid
sep_id_t get_src_epid() const
Return the source EPID for this transaction.
Definition chdr_types.hpp:942
uhd::rfnoc::chdr::mgmt_payload::get_proto_ver
uint16_t get_proto_ver() const
Return the protocol version for this transaction.
Definition chdr_types.hpp:970
uhd::rfnoc::chdr::mgmt_payload::to_string
std::string to_string() const
Return a string representation of this object.
uhd::rfnoc::chdr::mgmt_payload::mgmt_payload
mgmt_payload(mgmt_payload &&rhs)=default
uhd::rfnoc::chdr::mgmt_payload::mgmt_payload
mgmt_payload()=default
uhd::rfnoc::chdr::mgmt_payload::get_hop
const mgmt_hop_t & get_hop(size_t i) const
Get the n'th hop in the transaction.
Definition chdr_types.hpp:870
uhd::rfnoc::chdr::mgmt_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes, const std::function< uint64_t(uint64_t)> &conv_byte_order) const
Serialize the payload to a uint64_t buffer.
uhd::rfnoc::chdr::mgmt_payload::operator==
bool operator==(const mgmt_payload &rhs) const
Comparison operator (==).
uhd::rfnoc::chdr::strc_payload::src_epid
uint16_t src_epid
The source EPID for the stream (16 bits).
Definition chdr_types.hpp:544
uhd::rfnoc::chdr::strc_payload::operator==
bool operator==(const strc_payload &rhs) const
Comparison operator (==).
uhd::rfnoc::chdr::strc_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size, const std::function< uint64_t(uint64_t)> &conv_byte_order)
uhd::rfnoc::chdr::strc_payload::strc_payload
strc_payload(const strc_payload &rhs)=default
uhd::rfnoc::chdr::strc_payload::MAX_PACKET_SIZE
static constexpr size_t MAX_PACKET_SIZE
Worst-case size of a strc packet (including header).
Definition chdr_types.hpp:554
uhd::rfnoc::chdr::strc_payload::op_code
strc_op_code_t op_code
Operation code for the command (4 bits).
Definition chdr_types.hpp:546
uhd::rfnoc::chdr::strc_payload::strc_payload
strc_payload(strc_payload &&rhs)=default
uhd::rfnoc::chdr::strc_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes) const
Serialize the payload to a uint64_t buffer (no conversion function).
Definition chdr_types.hpp:573
uhd::rfnoc::chdr::strc_payload::to_string
std::string to_string() const
Return a string representation of this object.
uhd::rfnoc::chdr::strc_payload::get_length
size_t get_length() const
Get the serialized size of this payload in 64 bit words.
uhd::rfnoc::chdr::strc_payload::num_bytes
uint64_t num_bytes
Number of bytes to use for operation (64 bits).
Definition chdr_types.hpp:552
uhd::rfnoc::chdr::strc_payload::num_pkts
uint64_t num_pkts
Number of packets to use for operation (40 bits).
Definition chdr_types.hpp:550
uhd::rfnoc::chdr::strc_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes, const std::function< uint64_t(uint64_t)> &conv_byte_order) const
Serialize the payload to a uint64_t buffer.
uhd::rfnoc::chdr::strc_payload::populate_header
void populate_header(chdr_header &header) const
Populate the header for this type of packet.
uhd::rfnoc::chdr::strc_payload::op_data
uint8_t op_data
Data associated with the operation (4 bits).
Definition chdr_types.hpp:548
uhd::rfnoc::chdr::strc_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size)
Definition chdr_types.hpp:594
uhd::rfnoc::chdr::strc_payload::operator!=
bool operator!=(const strc_payload &rhs) const
Comparison operator (!=).
Definition chdr_types.hpp:610
uhd::rfnoc::chdr::strc_payload::operator=
strc_payload & operator=(const strc_payload &rhs)=default
uhd::rfnoc::chdr::strc_payload::strc_payload
strc_payload()=default
uhd::rfnoc::chdr::strs_payload::capacity_bytes
uint64_t capacity_bytes
Buffer capacity in bytes (40 bits).
Definition chdr_types.hpp:408
uhd::rfnoc::chdr::strs_payload::src_epid
uint16_t src_epid
The source EPID for the stream (16 bits).
Definition chdr_types.hpp:404
uhd::rfnoc::chdr::strs_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes, const std::function< uint64_t(uint64_t)> &conv_byte_order) const
Serialize the payload to a uint64_t buffer.
uhd::rfnoc::chdr::strs_payload::operator!=
bool operator!=(const strs_payload &rhs) const
Comparison operator (!=).
Definition chdr_types.hpp:503
uhd::rfnoc::chdr::strs_payload::seq_error_occoured
bool seq_error_occoured
Definition chdr_types.hpp:426
uhd::rfnoc::chdr::strs_payload::current_seq_num
uint16_t current_seq_num
Definition chdr_types.hpp:432
uhd::rfnoc::chdr::strs_payload::reserved_3
bool reserved_3
Definition chdr_types.hpp:439
uhd::rfnoc::chdr::strs_payload::operator==
bool operator==(const strs_payload &rhs) const
Comparison operator (==).
uhd::rfnoc::chdr::strs_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size)
Definition chdr_types.hpp:487
uhd::rfnoc::chdr::strs_payload::to_string
std::string to_string() const
Return a string representation of this object.
uhd::rfnoc::chdr::strs_payload::buff_info
uint16_t buff_info
Buffer info (16 bits).
Definition chdr_types.hpp:416
uhd::rfnoc::chdr::strs_payload::last_control_seq_num
uint16_t last_control_seq_num
Definition chdr_types.hpp:422
uhd::rfnoc::chdr::strs_payload::operator=
strs_payload & operator=(const strs_payload &rhs)=default
uhd::rfnoc::chdr::strs_payload::reserved_1
uint16_t reserved_1
Definition chdr_types.hpp:424
uhd::rfnoc::chdr::strs_payload::strs_payload
strs_payload()=default
uhd::rfnoc::chdr::strs_payload::info
uint64_t info
Definition chdr_types.hpp:419
uhd::rfnoc::chdr::strs_payload::serialize
size_t serialize(uint64_t *buff, size_t max_size_bytes) const
Serialize the payload to a uint64_t buffer (no conversion function).
Definition chdr_types.hpp:466
uhd::rfnoc::chdr::strs_payload::flow_control_due
bool flow_control_due
Definition chdr_types.hpp:428
uhd::rfnoc::chdr::strs_payload::strs_payload
strs_payload(strs_payload &&rhs)=default
uhd::rfnoc::chdr::strs_payload::deserialize
void deserialize(const uint64_t *buff, size_t buff_size, const std::function< uint64_t(uint64_t)> &conv_byte_order)
uhd::rfnoc::chdr::strs_payload::xfer_count_bytes
uint64_t xfer_count_bytes
Transfer count in bytes (64 bits).
Definition chdr_types.hpp:412
uhd::rfnoc::chdr::strs_payload::this_epid
uint16_t this_epid
Definition chdr_types.hpp:444
uhd::rfnoc::chdr::strs_payload::strs_payload
strs_payload(const strs_payload &rhs)=default
uhd::rfnoc::chdr::strs_payload::expected_seq_num
uint16_t expected_seq_num
Definition chdr_types.hpp:423
uhd::rfnoc::chdr::strs_payload::reserved_2
bool reserved_2
Definition chdr_types.hpp:427
uhd::rfnoc::chdr::strs_payload::get_length
size_t get_length() const
Get the serialized size of this payload in 64 bit words.
uhd::rfnoc::chdr::strs_payload::chdr_packet_type
uint8_t chdr_packet_type
Definition chdr_types.hpp:434
uhd::rfnoc::chdr::strs_payload::capacity_pkts
uint32_t capacity_pkts
Buffer capacity in packets (24 bits).
Definition chdr_types.hpp:410
uhd::rfnoc::chdr::strs_payload::status
strs_status_t status
The status of the stream (4 bits).
Definition chdr_types.hpp:406
uhd::rfnoc::chdr::strs_payload::xfer_count_pkts
uint64_t xfer_count_pkts
Transfer count in packets (40 bits).
Definition chdr_types.hpp:414
uhd::rfnoc::chdr::strs_payload::dest_epid
uint16_t dest_epid
Definition chdr_types.hpp:443
uhd::rfnoc::chdr::strs_payload::stop_on_seq_error_enabled
bool stop_on_seq_error_enabled
Definition chdr_types.hpp:425
uhd::rfnoc::chdr::strs_payload::populate_header
void populate_header(chdr_header &header) const
Populate the header for this type of packet.
UHD_API
#define UHD_API
Definition config.h:87
endianness.hpp
uhd::rfnoc::chdr
Definition chdr_types.hpp:19
uhd::rfnoc::chdr::strs_status_t
strs_status_t
Definition chdr_types.hpp:392
uhd::rfnoc::chdr::STRS_CMDERR
@ STRS_CMDERR
No error.
Definition chdr_types.hpp:394
uhd::rfnoc::chdr::STRS_OKAY
@ STRS_OKAY
Definition chdr_types.hpp:393
uhd::rfnoc::chdr::STRS_DATAERR
@ STRS_DATAERR
Packet out of sequence (sequence error).
Definition chdr_types.hpp:396
uhd::rfnoc::chdr::STRS_RTERR
@ STRS_RTERR
Data integrity check failed.
Definition chdr_types.hpp:397
uhd::rfnoc::chdr::STRS_SEQERR
@ STRS_SEQERR
A stream command signalled an error.
Definition chdr_types.hpp:395
uhd::rfnoc::chdr::payload_to_packet_type< mgmt_payload >
constexpr packet_type_t payload_to_packet_type< mgmt_payload >()
Definition chdr_types.hpp:1000
uhd::rfnoc::chdr::payload_to_packet_type< strs_payload >
constexpr packet_type_t payload_to_packet_type< strs_payload >()
Definition chdr_types.hpp:1012
uhd::rfnoc::chdr::strc_op_code_t
strc_op_code_t
Definition chdr_types.hpp:534
uhd::rfnoc::chdr::STRC_RESYNC
@ STRC_RESYNC
Trigger a stream status response.
Definition chdr_types.hpp:537
uhd::rfnoc::chdr::STRC_INIT
@ STRC_INIT
Definition chdr_types.hpp:535
uhd::rfnoc::chdr::STRC_PING
@ STRC_PING
Initialize stream.
Definition chdr_types.hpp:536
uhd::rfnoc::chdr::payload_to_packet_type< strc_payload >
constexpr packet_type_t payload_to_packet_type< strc_payload >()
Definition chdr_types.hpp:1006
uhd::rfnoc::chdr::ctrl_opcode_t
ctrl_opcode_t
Definition chdr_types.hpp:249
uhd::rfnoc::chdr::OP_WRITE
@ OP_WRITE
Definition chdr_types.hpp:251
uhd::rfnoc::chdr::OP_SLEEP
@ OP_SLEEP
Definition chdr_types.hpp:250
uhd::rfnoc::chdr::OP_USER1
@ OP_USER1
Definition chdr_types.hpp:257
uhd::rfnoc::chdr::OP_POLL
@ OP_POLL
Definition chdr_types.hpp:256
uhd::rfnoc::chdr::OP_USER2
@ OP_USER2
Definition chdr_types.hpp:258
uhd::rfnoc::chdr::OP_BLOCK_WRITE
@ OP_BLOCK_WRITE
Definition chdr_types.hpp:254
uhd::rfnoc::chdr::OP_USER6
@ OP_USER6
Definition chdr_types.hpp:262
uhd::rfnoc::chdr::OP_READ
@ OP_READ
Definition chdr_types.hpp:252
uhd::rfnoc::chdr::OP_READ_WRITE
@ OP_READ_WRITE
Definition chdr_types.hpp:253
uhd::rfnoc::chdr::OP_BLOCK_READ
@ OP_BLOCK_READ
Definition chdr_types.hpp:255
uhd::rfnoc::chdr::OP_USER3
@ OP_USER3
Definition chdr_types.hpp:259
uhd::rfnoc::chdr::OP_USER4
@ OP_USER4
Definition chdr_types.hpp:260
uhd::rfnoc::chdr::OP_USER5
@ OP_USER5
Definition chdr_types.hpp:261
uhd::rfnoc::chdr::ctrl_status_t
ctrl_status_t
Definition chdr_types.hpp:242
uhd::rfnoc::chdr::CMD_TSERR
@ CMD_TSERR
Slave asserted a command error.
Definition chdr_types.hpp:245
uhd::rfnoc::chdr::CMD_OKAY
@ CMD_OKAY
Definition chdr_types.hpp:243
uhd::rfnoc::chdr::CMD_CMDERR
@ CMD_CMDERR
Transaction successful.
Definition chdr_types.hpp:244
uhd::rfnoc::chdr::CMD_WARNING
@ CMD_WARNING
Slave asserted a time stamp error.
Definition chdr_types.hpp:246
uhd::rfnoc::chdr::payload_to_packet_type< ctrl_payload >
constexpr packet_type_t payload_to_packet_type< ctrl_payload >()
Definition chdr_types.hpp:994
uhd::rfnoc::chdr::payload_to_packet_type
constexpr packet_type_t payload_to_packet_type()
Conversion from payload_t to pkt_type.
uhd::rfnoc::chdr::packet_type_t
packet_type_t
Definition chdr_types.hpp:21
uhd::rfnoc::chdr::PKT_TYPE_DATA_WITH_TS
@ PKT_TYPE_DATA_WITH_TS
Data Packet without TimeStamp.
Definition chdr_types.hpp:27
uhd::rfnoc::chdr::PKT_TYPE_DATA_NO_TS
@ PKT_TYPE_DATA_NO_TS
Control Transaction.
Definition chdr_types.hpp:26
uhd::rfnoc::chdr::PKT_TYPE_MGMT
@ PKT_TYPE_MGMT
Definition chdr_types.hpp:22
uhd::rfnoc::chdr::PKT_TYPE_STRS
@ PKT_TYPE_STRS
Management packet.
Definition chdr_types.hpp:23
uhd::rfnoc::chdr::PKT_TYPE_CTRL
@ PKT_TYPE_CTRL
Stream Command.
Definition chdr_types.hpp:25
uhd::rfnoc::chdr::PKT_TYPE_STRC
@ PKT_TYPE_STRC
Stream status.
Definition chdr_types.hpp:24
uhd::rfnoc
Definition actions.hpp:24
uhd::rfnoc::sep_id_t
uint16_t sep_id_t
Stream Endpoint ID Type.
Definition rfnoc_types.hpp:73
uhd::rfnoc::chdr_w_t
chdr_w_t
Type that indicates the CHDR Width in bits.
Definition rfnoc_types.hpp:19
uhd::rfnoc::CHDR_W_64
@ CHDR_W_64
Definition rfnoc_types.hpp:19
uhd::rfnoc::chdr_w_to_bits
constexpr size_t chdr_w_to_bits(chdr_w_t chdr_w)
Conversion from chdr_w_t to a number of bits.
Definition rfnoc_types.hpp:22
uhd
Definition build_info.hpp:12
uhd::ntohx
T ntohx(T)
network to host: short, long, or long-long
Definition byteswap.ipp:112
uhd::htowx
T htowx(T)
host to worknet: short, long, or long-long
Definition byteswap.ipp:142
uhd::wtohx
T wtohx(T)
worknet to host: short, long, or long-long
Definition byteswap.ipp:132
uhd::htonx
T htonx(T)
host to network: short, long, or long-long
Definition byteswap.ipp:122
uhd::ENDIANNESS_BIG
@ ENDIANNESS_BIG
Definition endianness.hpp:30
rfnoc_types.hpp
uhd::rfnoc::chdr::mgmt_op_t::cfg_payload::cfg_payload
cfg_payload(payload_t payload_)
Definition chdr_types.hpp:690
uhd::rfnoc::chdr::mgmt_op_t::cfg_payload::data
const uint32_t data
Definition chdr_types.hpp:687
uhd::rfnoc::chdr::mgmt_op_t::cfg_payload::cfg_payload
cfg_payload(uint16_t addr_, uint32_t data_=0)
Definition chdr_types.hpp:689
uhd::rfnoc::chdr::mgmt_op_t::cfg_payload::addr
const uint16_t addr
Definition chdr_types.hpp:686
uhd::rfnoc::chdr::mgmt_op_t::node_info_payload::node_inst
const uint16_t node_inst
Definition chdr_types.hpp:706
uhd::rfnoc::chdr::mgmt_op_t::node_info_payload::node_info_payload
node_info_payload(payload_t payload_)
Definition chdr_types.hpp:719
uhd::rfnoc::chdr::mgmt_op_t::node_info_payload::node_type
const uint8_t node_type
Definition chdr_types.hpp:705
uhd::rfnoc::chdr::mgmt_op_t::node_info_payload::ext_info
const uint32_t ext_info
Definition chdr_types.hpp:707
uhd::rfnoc::chdr::mgmt_op_t::node_info_payload::device_id
const uint16_t device_id
Definition chdr_types.hpp:704
uhd::rfnoc::chdr::mgmt_op_t::node_info_payload::node_info_payload
node_info_payload(uint16_t device_id_, uint8_t node_type_, uint16_t node_inst_, uint32_t ext_info_)
Definition chdr_types.hpp:709
uhd::rfnoc::chdr::mgmt_op_t::sel_dest_payload::sel_dest_payload
sel_dest_payload(uint16_t dest_)
Definition chdr_types.hpp:674
uhd::rfnoc::chdr::mgmt_op_t::sel_dest_payload::dest
const uint16_t dest
Definition chdr_types.hpp:672
uhd::rfnoc::chdr::mgmt_op_t::sel_dest_payload::sel_dest_payload
sel_dest_payload(payload_t payload_)
Definition chdr_types.hpp:675
uhd::routing_error
Definition exception.hpp:291