1 //
2 // Copyright 2018 Ettus Research, a National Instruments Company
3 //
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 //
6 
7 #ifndef INCLUDED_LIBUHD_RHODIUM_CONSTANTS_HPP
8 #define INCLUDED_LIBUHD_RHODIUM_CONSTANTS_HPP
9 
10 #include <array>
11 #include <cstddef>
12 #include <string>
13 #include <vector>
14 
15 static constexpr double RHODIUM_FREQ_COMPARE_EPSILON = 1e-5;
16 
17 static constexpr size_t NUM_RHODIUM_RADIO_RATES = 3;
18 
19 static constexpr std::array<double, NUM_RHODIUM_RADIO_RATES> RHODIUM_RADIO_RATES = {
20     200e6, 245.76e6, 250e6};
21 
22 static constexpr double RHODIUM_MIN_FREQ = 1e6; // Hz
23 static constexpr double RHODIUM_MAX_FREQ = 6e9; // Hz
24 
25 static constexpr double RHODIUM_LO1_MIN_FREQ = 450e6; // Hz
26 static constexpr double RHODIUM_LO1_MAX_FREQ = 6e9; // Hz
27 static constexpr double RHODIUM_LO1_REF_FREQ = 122.88e6; // Hz
28 
29 static constexpr double RHODIUM_LO_0_9_GHZ_LPF_THRESHOLD_FREQ  = 0.975e9; // Hz
30 static constexpr double RHODIUM_LO_2_25_GHZ_LPF_THRESHOLD_FREQ = 2.3e9; // Hz
31 
32 static constexpr double RHODIUM_LOWBAND_FREQ = 450e6; // Hz
33 static constexpr double RHODIUM_RX_IF_FREQ   = 2.44e9; // Hz
34 static constexpr double RHODIUM_TX_IF_FREQ   = 1.95e9; // Hz
35 
36 static constexpr double RX_MIN_GAIN  = 0.0;
37 static constexpr double RX_MAX_GAIN  = 60.0;
38 static constexpr double RX_GAIN_STEP = 1.0;
39 static constexpr double TX_MIN_GAIN  = 0.0;
40 static constexpr double TX_MAX_GAIN  = 60.0;
41 static constexpr double TX_GAIN_STEP = 1.0;
42 
43 static constexpr double LO_MIN_GAIN  = 0.0;
44 static constexpr double LO_MAX_GAIN  = 30.0;
45 static constexpr double LO_GAIN_STEP = 1.0;
46 
47 static constexpr double LO_MIN_POWER  = 0.0;
48 static constexpr double LO_MAX_POWER  = 63.0;
49 static constexpr double LO_POWER_STEP = 1.0;
50 
51 static constexpr double RHODIUM_DEFAULT_BANDWIDTH = 250e6; // Hz
52 
53 static const std::vector<std::string> RHODIUM_RX_ANTENNAS = {
54     "TX/RX", "RX2", "CAL", "TERM"};
55 
56 static const std::vector<std::string> RHODIUM_TX_ANTENNAS = {"TX/RX", "CAL", "TERM"};
57 
58 // These names are taken from radio_rhodium.xml
59 static constexpr char SPUR_DODGING_PROP_NAME[]                = "spur_dodging";
60 static constexpr char SPUR_DODGING_THRESHOLD_PROP_NAME[]      = "spur_dodging_threshold";
61 static constexpr char HIGHBAND_SPUR_REDUCTION_PROP_NAME[]     = "highband_spur_reduction";
62 static constexpr char RHODIUM_DEFAULT_SPUR_DOGING_MODE[]      = "disabled";
63 static constexpr double RHODIUM_DEFAULT_SPUR_DOGING_THRESHOLD = 2e6;
64 static constexpr char RHODIUM_DEFAULT_HB_SPUR_REDUCTION_MODE[] = "disabled";
65 
66 
67 static constexpr char RHODIUM_FPGPIO_BANK[] = "FP0";
68 static constexpr uint32_t RHODIUM_GPIO_MASK = 0x1F;
69 static constexpr uint32_t SW10_GPIO_MASK    = 0x3;
70 static constexpr uint32_t LED_GPIO_MASK     = 0x1C;
71 
72 static constexpr uint32_t SW10_FROMTXLOWBAND  = 0x0;
73 static constexpr uint32_t SW10_FROMTXHIGHBAND = 0x1;
74 static constexpr uint32_t SW10_ISOLATION      = 0x2;
75 static constexpr uint32_t SW10_TORX           = 0x3;
76 
77 static constexpr uint32_t LED_RX  = 0x04;
78 static constexpr uint32_t LED_RX2 = 0x08;
79 static constexpr uint32_t LED_TX  = 0x10;
80 
81 //! Main LO
82 static constexpr char RHODIUM_LO1[] = "lo1";
83 //! Low-band LO (for IF conversion)
84 static constexpr char RHODIUM_LO2[] = "lowband";
85 //! DSA attenuation
86 static constexpr char RHODIUM_GAIN[] = "gain_table";
87 //! LO DSA attenuation
88 static constexpr char RHODIUM_LO_GAIN[] = "dsa";
89 //! LO output power
90 static constexpr char RHODIUM_LO_POWER[] = "lo";
91 
92 static constexpr char RHODIUM_FE_NAME[] = "Rhodium";
93 
94 static constexpr int NUM_LO_OUTPUT_PORT_NAMES = 4;
95 static constexpr std::array<const char*, NUM_LO_OUTPUT_PORT_NAMES> LO_OUTPUT_PORT_NAMES =
96     {"LO_OUT_0", "LO_OUT_1", "LO_OUT_2", "LO_OUT_3"};
97 
98 static constexpr size_t RHODIUM_NUM_CHANS = 1;
99 
100 namespace n320_regs {
101 
102 static constexpr uint32_t PERIPH_BASE       = 0x80000;
103 static constexpr uint32_t PERIPH_REG_OFFSET = 8;
104 
105 // db_control registers
106 static constexpr uint32_t SR_MISC_OUTS = PERIPH_BASE + 160 * PERIPH_REG_OFFSET;
107 static constexpr uint32_t SR_SPI       = PERIPH_BASE + 168 * PERIPH_REG_OFFSET;
108 static constexpr uint32_t SR_LEDS      = PERIPH_BASE + 176 * PERIPH_REG_OFFSET;
109 static constexpr uint32_t SR_FP_GPIO   = PERIPH_BASE + 184 * PERIPH_REG_OFFSET;
110 static constexpr uint32_t SR_DB_GPIO   = PERIPH_BASE + 192 * PERIPH_REG_OFFSET;
111 
112 static constexpr uint32_t RB_MISC_IO = PERIPH_BASE + 16 * PERIPH_REG_OFFSET;
113 static constexpr uint32_t RB_SPI     = PERIPH_BASE + 17 * PERIPH_REG_OFFSET;
114 static constexpr uint32_t RB_LEDS    = PERIPH_BASE + 18 * PERIPH_REG_OFFSET;
115 static constexpr uint32_t RB_DB_GPIO = PERIPH_BASE + 19 * PERIPH_REG_OFFSET;
116 static constexpr uint32_t RB_FP_GPIO = PERIPH_BASE + 20 * PERIPH_REG_OFFSET;
117 
118 //! Delta between frontend offsets for channel 0 and 1
119 constexpr uint32_t SR_TX_FE_BASE = PERIPH_BASE + 208 * PERIPH_REG_OFFSET;
120 constexpr uint32_t SR_RX_FE_BASE = PERIPH_BASE + 224 * PERIPH_REG_OFFSET;
121 
122 } // namespace n320_regs
123 
124 #endif /* INCLUDED_LIBUHD_RHODIUM_CONSTANTS_HPP */
125