summaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorNick Foster <nick@nerdnetworks.org>2010-11-10 16:23:11 -0800
committerNick Foster <nick@nerdnetworks.org>2010-11-10 16:23:11 -0800
commite0b3b4e3dd9f22d27e9465bba0c978a488733aae (patch)
tree4fd68a4f7ed5551de7bcd739eb388a8731058dcf /host/lib
parentfb0cdbc553d288402ee7939dc72f4368eb9e8e1b (diff)
downloaduhd-e0b3b4e3dd9f22d27e9465bba0c978a488733aae.tar.gz
uhd-e0b3b4e3dd9f22d27e9465bba0c978a488733aae.tar.bz2
uhd-e0b3b4e3dd9f22d27e9465bba0c978a488733aae.zip
U2P: Ripped out the mboard_rev_t structure in favor of an enum in usrp2_regs.hpp and some logic.
Also change ethernet.c to move generic code to eth_lib.
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/usrp/usrp2/CMakeLists.txt2
-rw-r--r--host/lib/usrp/usrp2/clock_ctrl.cpp1
-rw-r--r--host/lib/usrp/usrp2/codec_ctrl.cpp10
-rw-r--r--host/lib/usrp/usrp2/codec_impl.cpp4
-rw-r--r--host/lib/usrp/usrp2/mboard_impl.cpp5
-rw-r--r--host/lib/usrp/usrp2/mboard_rev.cpp89
-rw-r--r--host/lib/usrp/usrp2/mboard_rev.hpp114
-rw-r--r--host/lib/usrp/usrp2/usrp2_clk_regs.hpp26
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.cpp26
-rw-r--r--host/lib/usrp/usrp2/usrp2_iface.hpp21
-rw-r--r--host/lib/usrp/usrp2/usrp2_regs.cpp14
-rw-r--r--host/lib/usrp/usrp2/usrp2_regs.hpp144
12 files changed, 121 insertions, 335 deletions
diff --git a/host/lib/usrp/usrp2/CMakeLists.txt b/host/lib/usrp/usrp2/CMakeLists.txt
index a09c833bd..f7984fce5 100644
--- a/host/lib/usrp/usrp2/CMakeLists.txt
+++ b/host/lib/usrp/usrp2/CMakeLists.txt
@@ -48,8 +48,6 @@ IF(ENABLE_USRP2)
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/gps_ctrl.cpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/io_impl.cpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/mboard_impl.cpp
- ${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/mboard_rev.cpp
- ${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/mboard_rev.hpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/serdes_ctrl.cpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/serdes_ctrl.hpp
${CMAKE_SOURCE_DIR}/lib/usrp/usrp2/usrp2_iface.cpp
diff --git a/host/lib/usrp/usrp2/clock_ctrl.cpp b/host/lib/usrp/usrp2/clock_ctrl.cpp
index 8eaafe680..1f8e65ce6 100644
--- a/host/lib/usrp/usrp2/clock_ctrl.cpp
+++ b/host/lib/usrp/usrp2/clock_ctrl.cpp
@@ -17,7 +17,6 @@
#include "clock_ctrl.hpp"
#include "ad9510_regs.hpp"
-#include "mboard_rev.hpp"
#include "usrp2_regs.hpp" //spi slave constants
#include "usrp2_clk_regs.hpp"
#include <uhd/utils/assert.hpp>
diff --git a/host/lib/usrp/usrp2/codec_ctrl.cpp b/host/lib/usrp/usrp2/codec_ctrl.cpp
index 533534bd0..8680c285a 100644
--- a/host/lib/usrp/usrp2/codec_ctrl.cpp
+++ b/host/lib/usrp/usrp2/codec_ctrl.cpp
@@ -59,7 +59,7 @@ public:
}
//power-up adc
- if(!_iface->get_hw_rev().is_usrp2p()) { //if we're on a USRP2
+ if(!_iface->is_usrp2p()) { //if we're on a USRP2
_iface->poke32(_iface->regs.misc_ctrl_adc, U2_FLAG_MISC_CTRL_ADC_ON);
} else { //we're on a USRP2+
_ads62p44_regs.reset = 1;
@@ -77,7 +77,7 @@ public:
this->send_ad9777_reg(0);
//power-down adc
- if(!_iface->get_hw_rev().is_usrp2p()) { //if we're on a USRP2
+ if(!_iface->is_usrp2p()) { //if we're on a USRP2
_iface->poke32(_iface->regs.misc_ctrl_adc, U2_FLAG_MISC_CTRL_ADC_OFF);
} else { //we're on a USRP2+
//send a global power-down to the ADC here... it will get lifted on reset
@@ -87,21 +87,21 @@ public:
}
void set_rx_digital_gain(float gain) { //fine digital gain
- if(_iface->get_hw_rev().is_usrp2p()) {
+ if(_iface->is_usrp2p()) {
_ads62p44_regs.fine_gain = int(gain/0.5);
this->send_ads62p44_reg(0x17);
} else UHD_THROW_INVALID_CODE_PATH(); //should never have been called for USRP2
}
void set_rx_digital_fine_gain(float gain) { //gain correction
- if(_iface->get_hw_rev().is_usrp2p()) {
+ if(_iface->is_usrp2p()) {
_ads62p44_regs.gain_correction = int(gain / 0.05);
this->send_ads62p44_reg(0x1A);
} else UHD_THROW_INVALID_CODE_PATH(); //should never have been called for USRP2
}
void set_rx_analog_gain(bool gain) { //turns on/off analog 3.5dB preamp
- if(_iface->get_hw_rev().is_usrp2p()) {
+ if(_iface->is_usrp2p()) {
_ads62p44_regs.coarse_gain = gain ? ads62p44_regs_t::COARSE_GAIN_3_5DB : ads62p44_regs_t::COARSE_GAIN_0DB;
this->send_ads62p44_reg(0x14);
} else UHD_THROW_INVALID_CODE_PATH();
diff --git a/host/lib/usrp/usrp2/codec_impl.cpp b/host/lib/usrp/usrp2/codec_impl.cpp
index 6065b6c28..1c1f60765 100644
--- a/host/lib/usrp/usrp2/codec_impl.cpp
+++ b/host/lib/usrp/usrp2/codec_impl.cpp
@@ -67,7 +67,7 @@ void usrp2_mboard_impl::rx_codec_get(const wax::obj &key_, wax::obj &val){
return;
case CODEC_PROP_GAIN_NAMES:
- if(_iface->get_hw_rev().is_usrp2p()) {
+ if(_iface->is_usrp2p()) {
val = prop_names_t(codec_rx_gain_ranges.keys());
} else val = prop_names_t();
return;
@@ -94,7 +94,7 @@ void usrp2_mboard_impl::rx_codec_set(const wax::obj &key_, const wax::obj &val){
switch(key.as<codec_prop_t>()) {
case CODEC_PROP_GAIN_I:
case CODEC_PROP_GAIN_Q:
- if(!_iface->get_hw_rev().is_usrp2p()) UHD_THROW_PROP_SET_ERROR();//this capability is only found in USRP2P
+ if(!_iface->is_usrp2p()) UHD_THROW_PROP_SET_ERROR();//this capability is only found in USRP2P
gain = val.as<float>();
this->rx_codec_set_gain(gain, key.name);
diff --git a/host/lib/usrp/usrp2/mboard_impl.cpp b/host/lib/usrp/usrp2/mboard_impl.cpp
index eb5b79b20..5b9dd1fa3 100644
--- a/host/lib/usrp/usrp2/mboard_impl.cpp
+++ b/host/lib/usrp/usrp2/mboard_impl.cpp
@@ -20,7 +20,6 @@
#include <uhd/usrp/misc_utils.hpp>
#include <uhd/usrp/dsp_utils.hpp>
#include <uhd/usrp/mboard_props.hpp>
-#include "mboard_rev.hpp"
#include <uhd/utils/assert.hpp>
#include <uhd/utils/algorithm.hpp>
#include <boost/bind.hpp>
@@ -148,7 +147,7 @@ void usrp2_mboard_impl::update_clock_config(void){
_iface->poke32(_iface->regs.time64_flags, pps_flags);
//clock source ref 10mhz
- if(_iface->get_hw_rev().is_usrp2p()) {
+ if(_iface->is_usrp2p()) {
switch(_clock_config.ref_source){
case clock_config_t::REF_INT : _iface->poke32(_iface->regs.misc_ctrl_clock, 0x12); break;
case clock_config_t::REF_SMA : _iface->poke32(_iface->regs.misc_ctrl_clock, 0x1C); break;
@@ -166,7 +165,7 @@ void usrp2_mboard_impl::update_clock_config(void){
//clock source ref 10mhz
bool use_external = (_clock_config.ref_source != clock_config_t::REF_INT)
- || (_iface->get_hw_rev().is_usrp2p()); //USRP2P has an internal 10MHz TCXO
+ || (_iface->is_usrp2p()); //USRP2P has an internal 10MHz TCXO
_clock_ctrl->enable_external_ref(use_external);
}
diff --git a/host/lib/usrp/usrp2/mboard_rev.cpp b/host/lib/usrp/usrp2/mboard_rev.cpp
deleted file mode 100644
index 9d0ff89f5..000000000
--- a/host/lib/usrp/usrp2/mboard_rev.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Copyright 2010 Ettus Research LLC
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-//
-
-#include "mboard_rev.hpp"
-#include <boost/lexical_cast.hpp>
-#include <boost/format.hpp>
-#include <sstream>
-#include <iostream>
-
-static const mboard_rev_t usrp2p_first_hw_rev = mboard_rev_t(0x0A00);
-
-mboard_rev_t::mboard_rev_t(boost::uint16_t rev){
- _rev = rev;
-}
-
-mboard_rev_t mboard_rev_t::none(void){
- return mboard_rev_t();
-}
-
-mboard_rev_t mboard_rev_t::from_uint16(boost::uint16_t uint16){
- return mboard_rev_t(uint16);
-}
-
-boost::uint16_t mboard_rev_t::to_uint16(void) const{
- return _rev;
-}
-
-//used with lexical cast to parse a hex string
-template <class T> struct to_hex{
- T value;
- operator T() const {return value;}
- friend std::istream& operator>>(std::istream& in, to_hex& out){
- in >> std::hex >> out.value;
- return in;
- }
-};
-
-mboard_rev_t mboard_rev_t::from_string(const std::string &string){
- if (string.substr(0, 2) == "0x"){
- return mboard_rev_t::from_uint16(boost::lexical_cast<to_hex<boost::uint16_t> >(string));
- }
- return mboard_rev_t::from_uint16(boost::lexical_cast<boost::uint16_t>(string));
-}
-
-std::string mboard_rev_t::to_string(void) const{
- return str(boost::format("0x%04x") % this->to_uint16());
-}
-
-std::string mboard_rev_t::to_pp_string(void) const{
- if(this->is_usrp2p()) {
- return str(boost::format("USRP2+, major rev %i, minor rev %i") % int(this->major()) % int(this->minor()));
- } else {
- return str(boost::format("USRP2, major rev %i, minor rev %i") % int(this->major()) % int(this->minor()));
- }
-}
-
-bool mboard_rev_t::is_usrp2p(void) const{
- return _rev >= usrp2p_first_hw_rev;
-}
-
-boost::uint8_t mboard_rev_t::major(void) const{
- return _rev >> 8;
-}
-
-boost::uint8_t mboard_rev_t::minor(void) const{
- return _rev & 0xff;
-}
-
-bool operator==(const mboard_rev_t &lhs, const mboard_rev_t &rhs){
- return lhs.to_uint16() == rhs.to_uint16();
-}
-
-bool operator<(const mboard_rev_t &lhs, const mboard_rev_t &rhs){
- return lhs.to_uint16() < rhs.to_uint16();
-}
diff --git a/host/lib/usrp/usrp2/mboard_rev.hpp b/host/lib/usrp/usrp2/mboard_rev.hpp
deleted file mode 100644
index a1b1d9605..000000000
--- a/host/lib/usrp/usrp2/mboard_rev.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-//
-// Copyright 2010 Ettus Research LLC
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-//
-
-#ifndef INCLUDED_MBOARD_REV_HPP
-#define INCLUDED_MBOARD_REV_HPP
-
-#include <uhd/config.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/operators.hpp>
-#include <string>
-
-class UHD_API mboard_rev_t : boost::equality_comparable<mboard_rev_t>, boost::less_than_comparable<mboard_rev_t>{
- public:
- /*!
- * Create a mboard rev from an integer.
- * \param rev the integer representation
- */
- mboard_rev_t(boost::uint16_t rev = 0xffff);
-
- /*!
- * Obtain a mboard rev that represents an invalid/uninit mboard ID
- * \return the mboard rev with the 0xffff rev.
- */
- static mboard_rev_t none(void);
-
- /*!
- * Create a new mboard rev from an integer representation.
- * \param uint16 an unsigned 16 bit integer
- * \return a new mboard rev containing the integer
- */
- static mboard_rev_t from_uint16(boost::uint16_t uint16);
-
- /*!
- * Get the mboard rev represented as an integer.
- * \return an unsigned 16 bit integer representation
- */
- boost::uint16_t to_uint16(void) const;
-
- /*!
- * Create a new mboard rev from a string representation.
- * If the string has a 0x prefix, it will be parsed as hex.
- * \param string a numeric string, possibly hex
- * \return a new dboard id containing the integer
- */
- static mboard_rev_t from_string(const std::string &string);
-
- /*!
- * Get the mboard rev represented as an integer.
- * \return a hex string representation with 0x prefix
- */
- std::string to_string(void) const;
-
- /*!
- * Get the pretty print representation of this mboard rev.
- * \return a string with the mboard name and rev number
- */
- std::string to_pp_string(void) const;
-
- /*!
- * Tell you if you're USRP2 or USRP2+
- * \return true if USRP2+, false if USRP2
- */
- bool is_usrp2p(void) const;
-
- /*!
- * Get the major revision number
- * \return major revision number
- */
- boost::uint8_t major(void) const;
-
- /*!
- * Get the minor revision number
- * \return minor revision number
- */
- boost::uint8_t minor(void) const;
-
- private:
- boost::uint16_t _rev; //internal representation
- };
-
- /*!
- * Comparator operator overloaded for mboard rev.
- * The boost::equality_comparable provides the !=.
- * \param lhs the mboard rev to the left of the operator
- * \param rhs the mboard rev to the right of the operator
- * \return true when the mboard revs are equal
- */
- UHD_API bool operator==(const mboard_rev_t &lhs, const mboard_rev_t &rhs);
-
- /*!
- * Comparator operator overloaded for mboard rev.
- * The boost::less_than_comparable provides the >, <=, >=.
- * \param lhs the mboard rev to the left of the operator
- * \param rhs the mboard rev to the right of the operator
- * \return true when lhs < rhs
- */
-
- UHD_API bool operator<(const mboard_rev_t &lhs, const mboard_rev_t &rhs);
-
-#endif /* INCLUDED_MBOARD_REV_HPP */
diff --git a/host/lib/usrp/usrp2/usrp2_clk_regs.hpp b/host/lib/usrp/usrp2/usrp2_clk_regs.hpp
index fcfd1e227..d5f80a919 100644
--- a/host/lib/usrp/usrp2/usrp2_clk_regs.hpp
+++ b/host/lib/usrp/usrp2/usrp2_clk_regs.hpp
@@ -18,23 +18,33 @@
#ifndef INCLUDED_USRP2_CLK_REGS_HPP
#define INCLUDED_USRP2_CLK_REGS_HPP
-#include "mboard_rev.hpp"
#include "usrp2_regs.hpp"
class usrp2_clk_regs_t {
public:
usrp2_clk_regs_t(void) { ; }
- usrp2_clk_regs_t(mboard_rev_t hw_rev) {
+ usrp2_clk_regs_t(boost::uint16_t hw_rev) {
test = 0;
fpga = 1;
- adc = (hw_rev.is_usrp2p()) ? 2 : 4;
+ adc = (hw_rev >= usrp2_rev_nums(N2XX)) ? 2 : 4;
dac = 3;
- serdes = (hw_rev.is_usrp2p()) ? 4 : 2; //only used by usrp2+
- tx_db = (hw_rev.is_usrp2p()) ? 5 : 6;
+ serdes = (hw_rev >= usrp2_rev_nums(N2XX)) ? 4 : 2; //only used by usrp2+
+ tx_db = (hw_rev >= usrp2_rev_nums(N2XX)) ? 5 : 6;
- if(hw_rev.major() == 3) exp = 2;
- else if(hw_rev.major() >= 4) exp = 5;
- else if(hw_rev.major() > 10) exp = 6;
+ switch(hw_rev) {
+ case usrp2_rev_nums(USRP2_REV3):
+ exp = 2;
+ break;
+ case usrp2_rev_nums(USRP2_REV4):
+ exp = 5;
+ break;
+ case usrp2_rev_nums(N2XX):
+ exp = 6;
+ break;
+ default:
+ throw std::runtime_error("Unknown hardware revision");
+ break;
+ }
rx_db = 7;
}
diff --git a/host/lib/usrp/usrp2/usrp2_iface.cpp b/host/lib/usrp/usrp2/usrp2_iface.cpp
index 52adb5373..147b968b4 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.cpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.cpp
@@ -19,7 +19,6 @@
#include "usrp2_iface.hpp"
#include <uhd/utils/assert.hpp>
#include <uhd/types/dict.hpp>
-#include "mboard_rev.hpp"
#include <boost/thread.hpp>
#include <boost/foreach.hpp>
#include <boost/asio.hpp> //used for htonl and ntohl
@@ -53,9 +52,8 @@ public:
usrp2_iface_impl(udp_simple::sptr ctrl_transport){
_ctrl_transport = ctrl_transport;
- //extract the mboard rev numbers
- byte_vector_t rev_bytes = read_eeprom(USRP2_I2C_ADDR_MBOARD, USRP2_EE_MBOARD_REV, 2);
- set_hw_rev(mboard_rev_t::from_uint16(rev_bytes.at(0) | (rev_bytes.at(1) << 8)));
+ mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_N100);
+ regs = usrp2_get_regs(get_hw_rev());
//check the fpga compatibility number
const boost::uint32_t fpga_compat_num = this->peek32(this->regs.compat_num_rb);
@@ -65,8 +63,6 @@ public:
"The fpga build is not compatible with the host code build."
) % int(USRP2_FPGA_COMPAT_NUM) % fpga_compat_num));
}
-
- mb_eeprom = mboard_eeprom_t(*this, mboard_eeprom_t::MAP_N100);
}
~usrp2_iface_impl(void){
@@ -263,17 +259,13 @@ public:
}
throw std::runtime_error("usrp2 no control response");
}
-
- /***********************************************************************
- * Get/set hardware revision
- **********************************************************************/
- void set_hw_rev(mboard_rev_t rev) {
- hw_rev = rev;
- regs = usrp2_get_regs(rev); //might be a better place to do this
+
+ bool is_usrp2p(void) {
+ return (get_hw_rev() >= usrp2_rev_nums(N2XX));
}
-
- mboard_rev_t get_hw_rev(void) {
- return hw_rev;
+
+ boost::uint16_t get_hw_rev(void) {
+ return boost::lexical_cast<boost::uint16_t>(mb_eeprom["rev"]);
}
@@ -313,7 +305,6 @@ private:
UHD_ASSERT_THROW(ntohl(in_data.id) == USRP2_CTRL_ID_WOAH_I_DEFINITELY_PEEKED_IT_DUDE);
return T(ntohl(in_data.data.poke_args.data));
}
-
};
/***********************************************************************
@@ -322,3 +313,4 @@ private:
usrp2_iface::sptr usrp2_iface::make(udp_simple::sptr ctrl_transport){
return usrp2_iface::sptr(new usrp2_iface_impl(ctrl_transport));
}
+
diff --git a/host/lib/usrp/usrp2/usrp2_iface.hpp b/host/lib/usrp/usrp2/usrp2_iface.hpp
index 88bff5913..d7e5df9f5 100644
--- a/host/lib/usrp/usrp2/usrp2_iface.hpp
+++ b/host/lib/usrp/usrp2/usrp2_iface.hpp
@@ -24,7 +24,6 @@
#include <boost/shared_ptr.hpp>
#include <boost/utility.hpp>
#include <boost/cstdint.hpp>
-#include "mboard_rev.hpp"
#include <utility>
#include "fw_common.h"
#include "usrp2_regs.hpp"
@@ -109,26 +108,16 @@ public:
virtual void write_uart(boost::uint8_t dev, const std::string &buf) = 0;
virtual std::string read_uart(boost::uint8_t dev) = 0;
-
- /*!
- * Set the hardware revision number. Also selects the proper register set for the device.
- * \param rev the 16-bit revision
- */
- virtual void set_hw_rev(mboard_rev_t rev) = 0;
-
- /*! Return the hardware revision number
- * \return hardware revision
- */
- virtual mboard_rev_t get_hw_rev(void) = 0;
+
+ virtual boost::uint16_t get_hw_rev(void) = 0;
+
+ virtual bool is_usrp2p(void) = 0;
/*!
* Register map selected from USRP2/USRP2+.
*/
usrp2_regs_t regs;
- /*!
- * Hardware revision as returned by the device.
- */
- mboard_rev_t hw_rev;
+
//motherboard eeprom map structure
uhd::usrp::mboard_eeprom_t mb_eeprom;
};
diff --git a/host/lib/usrp/usrp2/usrp2_regs.cpp b/host/lib/usrp/usrp2/usrp2_regs.cpp
index 0f0360c95..5853e91e5 100644
--- a/host/lib/usrp/usrp2/usrp2_regs.cpp
+++ b/host/lib/usrp/usrp2/usrp2_regs.cpp
@@ -15,25 +15,23 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
-#include "mboard_rev.hpp"
#include "usrp2_regs.hpp"
int sr_addr(int misc_output_base, int sr) {
return misc_output_base + 4 * sr;
}
-usrp2_regs_t usrp2_get_regs(mboard_rev_t hw_rev) {
-
+usrp2_regs_t usrp2_get_regs(boost::uint16_t hw_rev) {
//how about you just make this dependent on hw_rev instead of doing the init before main, and give up the const globals, since the application won't ever need both.
- const int misc_output_base = (hw_rev.is_usrp2p()) ? USRP2P_MISC_OUTPUT_BASE : USRP2_MISC_OUTPUT_BASE,
- gpio_base = (hw_rev.is_usrp2p()) ? USRP2P_GPIO_BASE : USRP2_GPIO_BASE,
- atr_base = (hw_rev.is_usrp2p()) ? USRP2P_ATR_BASE : USRP2_ATR_BASE,
- bp_base = (hw_rev.is_usrp2p()) ? USRP2P_BP_STATUS_BASE : USRP2_BP_STATUS_BASE;
+ const int misc_output_base = (hw_rev >= usrp2_rev_nums(N2XX)) ? USRP2P_MISC_OUTPUT_BASE : USRP2_MISC_OUTPUT_BASE,
+ gpio_base = (hw_rev >= usrp2_rev_nums(N2XX)) ? USRP2P_GPIO_BASE : USRP2_GPIO_BASE,
+ atr_base = (hw_rev >= usrp2_rev_nums(N2XX)) ? USRP2P_ATR_BASE : USRP2_ATR_BASE,
+ bp_base = (hw_rev >= usrp2_rev_nums(N2XX)) ? USRP2P_BP_STATUS_BASE : USRP2_BP_STATUS_BASE;
usrp2_regs_t x;
x.sr_misc = 0;
x.sr_tx_prot_eng = 32;
- x.sr_rx_prot_eng = 48;
+ x.sr_rx_prot_eng = 48;
x.sr_buffer_pool_ctrl = 64;
x.sr_udp_sm = 96;
x.sr_tx_dsp = 208;
diff --git a/host/lib/usrp/usrp2/usrp2_regs.hpp b/host/lib/usrp/usrp2/usrp2_regs.hpp
index 0d68c65c2..d84106f36 100644
--- a/host/lib/usrp/usrp2/usrp2_regs.hpp
+++ b/host/lib/usrp/usrp2/usrp2_regs.hpp
@@ -18,7 +18,13 @@
#ifndef INCLUDED_USRP2_REGS_HPP
#define INCLUDED_USRP2_REGS_HPP
-#include "mboard_rev.hpp"
+#include <boost/cstdint.hpp>
+
+enum usrp2_rev_nums {
+ USRP2_REV3 = 0x0003,
+ USRP2_REV4 = 0x0004,
+ N2XX = 0x0A00
+};
#define USRP2_MISC_OUTPUT_BASE 0xD400
#define USRP2_GPIO_BASE 0xC800
@@ -30,80 +36,78 @@
#define USRP2P_ATR_BASE 0x3800
#define USRP2P_BP_STATUS_BASE 0x3300
-const mboard_rev_t USRP2P_FIRST_HW_REV(0x0A00);
-
typedef struct {
- int sr_misc;
- int sr_tx_prot_eng;
- int sr_rx_prot_eng;
- int sr_buffer_pool_ctrl;
- int sr_udp_sm;
- int sr_tx_dsp;
- int sr_tx_ctrl;
- int sr_rx_dsp;
- int sr_rx_ctrl;
- int sr_time64;
- int sr_simtimer;
- int sr_last;
- int misc_ctrl_clock;
- int misc_ctrl_serdes;
- int misc_ctrl_adc;
- int misc_ctrl_leds;
- int misc_ctrl_phy;
- int misc_ctrl_dbg_mux;
- int misc_ctrl_ram_page;
- int misc_ctrl_flush_icache;
- int misc_ctrl_led_src;
- int time64_secs; // value to set absolute secs to on next PPS
- int time64_ticks; // value to set absolute ticks to on next PPS
- int time64_flags; // flags -- see chart below
- int time64_imm; // set immediate (0=latch on next pps, 1=latch immediate, default=0)
- int time64_tps; // ticks per second rollover count
- int time64_secs_rb;
- int time64_ticks_rb;
- int compat_num_rb;
- int dsp_tx_freq;
- int dsp_tx_scale_iq;
- int dsp_tx_interp_rate;
- int dsp_tx_mux;
- int dsp_rx_freq;
- int dsp_rx_scale_iq;
- int dsp_rx_decim_rate;
- int dsp_rx_dcoffset_i;
- int dsp_rx_dcoffset_q;
- int dsp_rx_mux;
- int gpio_base;
- int gpio_io;
- int gpio_ddr;
- int gpio_tx_sel;
- int gpio_rx_sel;
- int atr_base;
- int atr_idle_txside;
- int atr_idle_rxside;
- int atr_intx_txside;
- int atr_intx_rxside;
- int atr_inrx_txside;
- int atr_inrx_rxside;
- int atr_full_txside;
- int atr_full_rxside;
- int rx_ctrl_stream_cmd;
- int rx_ctrl_time_secs;
- int rx_ctrl_time_ticks;
- int rx_ctrl_clear_overrun;
- int rx_ctrl_vrt_header;
- int rx_ctrl_vrt_stream_id;
- int rx_ctrl_vrt_trailer;
- int rx_ctrl_nsamps_per_pkt;
- int rx_ctrl_nchannels;
- int tx_ctrl_num_chan;
- int tx_ctrl_clear_state;
- int tx_ctrl_report_sid;
- int tx_ctrl_policy;
+ int sr_misc;
+ int sr_tx_prot_eng;
+ int sr_rx_prot_eng;
+ int sr_buffer_pool_ctrl;
+ int sr_udp_sm;
+ int sr_tx_dsp;
+ int sr_tx_ctrl;
+ int sr_rx_dsp;
+ int sr_rx_ctrl;
+ int sr_time64;
+ int sr_simtimer;
+ int sr_last;
+ int misc_ctrl_clock;
+ int misc_ctrl_serdes;
+ int misc_ctrl_adc;
+ int misc_ctrl_leds;
+ int misc_ctrl_phy;
+ int misc_ctrl_dbg_mux;
+ int misc_ctrl_ram_page;
+ int misc_ctrl_flush_icache;
+ int misc_ctrl_led_src;
+ int time64_secs; // value to set absolute secs to on next PPS
+ int time64_ticks; // value to set absolute ticks to on next PPS
+ int time64_flags; // flags -- see chart below
+ int time64_imm; // set immediate (0=latch on next pps, 1=latch immediate, default=0)
+ int time64_tps; // ticks per second rollover count
+ int time64_secs_rb;
+ int time64_ticks_rb;
+ int compat_num_rb;
+ int dsp_tx_freq;
+ int dsp_tx_scale_iq;
+ int dsp_tx_interp_rate;
+ int dsp_tx_mux;
+ int dsp_rx_freq;
+ int dsp_rx_scale_iq;
+ int dsp_rx_decim_rate;
+ int dsp_rx_dcoffset_i;
+ int dsp_rx_dcoffset_q;
+ int dsp_rx_mux;
+ int gpio_base;
+ int gpio_io;
+ int gpio_ddr;
+ int gpio_tx_sel;
+ int gpio_rx_sel;
+ int atr_base;
+ int atr_idle_txside;
+ int atr_idle_rxside;
+ int atr_intx_txside;
+ int atr_intx_rxside;
+ int atr_inrx_txside;
+ int atr_inrx_rxside;
+ int atr_full_txside;
+ int atr_full_rxside;
+ int rx_ctrl_stream_cmd;
+ int rx_ctrl_time_secs;
+ int rx_ctrl_time_ticks;
+ int rx_ctrl_clear_overrun;
+ int rx_ctrl_vrt_header;
+ int rx_ctrl_vrt_stream_id;
+ int rx_ctrl_vrt_trailer;
+ int rx_ctrl_nsamps_per_pkt;
+ int rx_ctrl_nchannels;
+ int tx_ctrl_num_chan;
+ int tx_ctrl_clear_state;
+ int tx_ctrl_report_sid;
+ int tx_ctrl_policy;
} usrp2_regs_t;
extern const usrp2_regs_t usrp2_regs; //the register definitions, set in usrp2_regs.cpp and usrp2p_regs.cpp
-usrp2_regs_t usrp2_get_regs(mboard_rev_t hw_rev);
+usrp2_regs_t usrp2_get_regs(boost::uint16_t hw_rev);
////////////////////////////////////////////////////
// Settings Bus, Slave #7, Not Byte Addressable!