1 //
2 // Copyright 2014 Ettus Research LLC
3 // Copyright 2018 Ettus Research, a National Instruments Company
4 // Copyright 2020 Ettus Research, a National Instruments Brand
5 //
6 // SPDX-License-Identifier: GPL-3.0-or-later
7 //
8 
9 #pragma once
10 
11 #include <string>
12 
13 namespace uhd { namespace rfnoc {
14 
15 // FIXME come up with a better place for this
16 static const size_t CHDR_MAX_LEN_HDR = 16;
17 
18 static const std::string CLOCK_KEY_GRAPH("__graph__");
19 
20 static const std::string PROP_KEY_DECIM("decim");
21 static const std::string PROP_KEY_INTERP("interp");
22 static const std::string PROP_KEY_SAMP_RATE("samp_rate");
23 static const std::string PROP_KEY_SCALING("scaling");
24 static const std::string PROP_KEY_TYPE("type");
25 static const std::string PROP_KEY_FREQ("freq");
26 static const std::string PROP_KEY_TICK_RATE("tick_rate");
27 static const std::string PROP_KEY_SPP("spp");
28 static const std::string PROP_KEY_MTU("mtu");
29 
30 static const std::string NODE_ID_SEP("SEP");
31 
32 using io_type_t                     = std::string;
33 static const io_type_t IO_TYPE_S16  = "s16";
34 static const io_type_t IO_TYPE_SC16 = "sc16";
35 static const io_type_t IO_TYPE_U8   = "u8";
36 
37 static const std::string ACTION_KEY_STREAM_CMD("stream_cmd");
38 static const std::string ACTION_KEY_RX_EVENT("rx_event");
39 static const std::string ACTION_KEY_RX_RESTART_REQ("restart_request");
40 static const std::string ACTION_KEY_TX_EVENT("tx_event");
41 
42 //! If the block name can't be automatically detected, this name is used
43 static const std::string DEFAULT_BLOCK_NAME = "Block";
44 //! This NOC-ID is used to look up the default block
45 static const uint32_t DEFAULT_NOC_ID  = 0xFFFFFFFF;
46 static const double DEFAULT_TICK_RATE = 1.0;
47 // Whenever we need a default spp value use this, unless there are some
48 // block/device-specific constraints. It will keep the frame size below 1500.
49 static const int DEFAULT_SPP = 1996;
50 
51 /*! The NoC ID is the unique identifier of the block type. All blocks of the
52  * same type have the same NoC ID.
53  */
54 using noc_id_t = uint32_t;
55 
56 /*** Device Identifiers ******************************************************/
57 //! Device Type
58 using device_type_t = uint16_t;
59 // first nibble for device family (E = E, N = 1, X = A), remaining three nibbles
60 // for device number
61 //! placeholder for unspecified device
62 static const device_type_t ANY_DEVICE = 0xFFFF;
63 //! E300 device family
64 static const device_type_t E300 = 0xE300;
65 //! E310 device
66 static const device_type_t E310 = 0xE310;
67 //! E320
68 static const device_type_t E320 = 0xE320;
69 //! N300 device family (N300, N310)
70 static const device_type_t N300 = 0x1300;
71 //! N320 device
72 static const device_type_t N320 = 0x1320;
73 //! X300 device family (X300, X310)
74 static const device_type_t X300 = 0xA300;
75 
76 // block identifiers
77 static const noc_id_t ADDSUB_BLOCK         = 0xADD00000;
78 static const noc_id_t DUC_BLOCK            = 0xD0C00000;
79 static const noc_id_t DDC_BLOCK            = 0xDDC00000;
80 static const noc_id_t FFT_BLOCK            = 0xFF700000;
81 static const noc_id_t FIR_FILTER_BLOCK     = 0xF1120000;
82 static const noc_id_t FOSPHOR_BLOCK        = 0x666F0000;
83 static const noc_id_t LOGPWR_BLOCK         = 0x4C500000;
84 static const noc_id_t KEEP_ONE_IN_N_BLOCK  = 0x02460000;
85 static const noc_id_t MOVING_AVERAGE_BLOCK = 0xAAD20000;
86 static const noc_id_t RADIO_BLOCK          = 0x12AD1000;
87 static const noc_id_t REPLAY_BLOCK         = 0x4E91A000;
88 static const noc_id_t SIGGEN_BLOCK         = 0x51663110;
89 static const noc_id_t SPLIT_STREAM_BLOCK   = 0x57570000;
90 static const noc_id_t SWITCHBOARD_BLOCK    = 0xBE110000;
91 static const noc_id_t VECTOR_IIR_BLOCK     = 0x11120000;
92 static const noc_id_t WINDOW_BLOCK         = 0xD0530000;
93 
94 }} // namespace uhd::rfnoc
95