diff options
Diffstat (limited to 'firmware/usrp3')
-rw-r--r-- | firmware/usrp3/include/fw_comm_protocol.h | 102 | ||||
-rw-r--r-- | firmware/usrp3/lib/fw_comm_protocol.c | 3 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_eeprom.c | 5 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_eth_handlers.c | 4 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_eth_handlers.h | 2 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_fw_defs.h | 137 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_fw_host_iface.h | 128 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_init.c | 2 | ||||
-rw-r--r-- | firmware/usrp3/n230/n230_main.c | 4 |
9 files changed, 11 insertions, 376 deletions
diff --git a/firmware/usrp3/include/fw_comm_protocol.h b/firmware/usrp3/include/fw_comm_protocol.h deleted file mode 100644 index 14adb33a9..000000000 --- a/firmware/usrp3/include/fw_comm_protocol.h +++ /dev/null @@ -1,102 +0,0 @@ -// -// Copyright 2014 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_FW_COMM_PROTOCOL -#define INCLUDED_FW_COMM_PROTOCOL - -#include <stdint.h> -#ifndef __cplusplus -#include <stdbool.h> -#endif - -/*! - * Structs and constants for communication between firmware and host. - * This header is shared by the firmware and host code. - * Therefore, this header may only contain valid C code. - */ -#ifdef __cplusplus -extern "C" { -#endif - -#define FW_COMM_PROTOCOL_SIGNATURE 0xACE3 -#define FW_COMM_PROTOCOL_VERSION 0 -#define FW_COMM_MAX_DATA_WORDS 16 -#define FW_COMM_PROTOCOL_MTU 256 - -#define FW_COMM_FLAGS_ACK 0x00000001 -#define FW_COMM_FLAGS_CMD_MASK 0x00000FF0 -#define FW_COMM_FLAGS_ERROR_MASK 0xFF000000 - -#define FW_COMM_CMD_ECHO 0x00000000 -#define FW_COMM_CMD_POKE32 0x00000010 -#define FW_COMM_CMD_PEEK32 0x00000020 -#define FW_COMM_CMD_BLOCK_POKE32 0x00000030 -#define FW_COMM_CMD_BLOCK_PEEK32 0x00000040 - -#define FW_COMM_ERR_PKT_ERROR 0x80000000 -#define FW_COMM_ERR_CMD_ERROR 0x40000000 -#define FW_COMM_ERR_SIZE_ERROR 0x20000000 - -#define FW_COMM_GENERATE_ID(prod) ((((uint32_t) FW_COMM_PROTOCOL_SIGNATURE) << 0) | \ - (((uint32_t) prod) << 16) | \ - (((uint32_t) FW_COMM_PROTOCOL_VERSION) << 24)) - -#define FW_COMM_GET_PROTOCOL_SIG(id) ((uint16_t)(id & 0xFFFF)) -#define FW_COMM_GET_PRODUCT_ID(id) ((uint8_t)(id >> 16)) -#define FW_COMM_GET_PROTOCOL_VER(id) ((uint8_t)(id >> 24)) - -typedef struct -{ - uint32_t id; //Protocol and device identifier - uint32_t flags; //Holds commands and ack messages - uint32_t sequence; //Sequence number (specific to FW communication transactions) - uint32_t data_words; //Number of data words in payload - uint32_t addr; //Address field for the command in flags - uint32_t data[FW_COMM_MAX_DATA_WORDS]; //Data field for the command in flags -} fw_comm_pkt_t; - -#ifdef __cplusplus -} //extern "C" -#endif - -// The following definitions are only useful in firmware. Exclude in host code. -#ifndef __cplusplus - -typedef void (*poke32_func)(const uint32_t addr, const uint32_t data); -typedef uint32_t (*peek32_func)(const uint32_t addr); - -/*! - * Process a firmware communication packet and compute a response. - * Args: - * - (in) request: Pointer to the request struct - * - (out) response: Pointer to the response struct - * - (in) product_id: The 8-bit usrp3 specific product ID (for request filtering) - * - (func) poke_callback, peek_callback: Callback functions for a single peek/poke - * - return value: Send a response packet - */ -bool process_fw_comm_protocol_pkt( - const fw_comm_pkt_t* request, - fw_comm_pkt_t* response, - uint8_t product_id, - uint32_t iface_id, - poke32_func poke_callback, - peek32_func peek_callback -); - -#endif //ifdef __cplusplus - -#endif /* INCLUDED_FW_COMM_PROTOCOL */ diff --git a/firmware/usrp3/lib/fw_comm_protocol.c b/firmware/usrp3/lib/fw_comm_protocol.c index bb0297e8d..0cc931a76 100644 --- a/firmware/usrp3/lib/fw_comm_protocol.c +++ b/firmware/usrp3/lib/fw_comm_protocol.c @@ -15,7 +15,8 @@ // along with this program. If not, see <http://www.gnu.org/licenses/>. // -#include <fw_comm_protocol.h> +#include "../../../host/lib/usrp/common/fw_comm_protocol.h" + #include <trace.h> #include <string.h> //memcmp diff --git a/firmware/usrp3/n230/n230_eeprom.c b/firmware/usrp3/n230/n230_eeprom.c index 116f87985..767289efa 100644 --- a/firmware/usrp3/n230/n230_eeprom.c +++ b/firmware/usrp3/n230/n230_eeprom.c @@ -22,8 +22,9 @@ #include <flash/spi_flash.h> #include <flash/spif_spsn_s25flxx.h> #include <string.h> //memcpy -#include "n230_fw_defs.h" -#include "n230_fw_host_iface.h" + +#include "../../../host/lib/usrp/n230/n230_fw_defs.h" +#include "../../../host/lib/usrp/n230/n230_fw_host_iface.h" static const wb_spi_slave_t flash_spi_slave = { .base = (void*) 0xB000, diff --git a/firmware/usrp3/n230/n230_eth_handlers.c b/firmware/usrp3/n230/n230_eth_handlers.c index 98b8bc326..bb07be51b 100644 --- a/firmware/usrp3/n230/n230_eth_handlers.c +++ b/firmware/usrp3/n230/n230_eth_handlers.c @@ -17,15 +17,15 @@ #include "n230_eth_handlers.h" -#include <fw_comm_protocol.h> #include <wb_utils.h> #include <string.h> //memcmp #include <u3_net_stack.h> #include <print_addrs.h> #include <trace.h> +#include "../../../host/lib/usrp/common/fw_comm_protocol.h" +#include "../../../host/lib/usrp/n230/n230_fw_defs.h" #include "../n230/n230_fw_host_iface.h" #include "n230_eeprom.h" -#include "n230_fw_defs.h" static n230_host_shared_mem_t* host_shared_mem_ptr; diff --git a/firmware/usrp3/n230/n230_eth_handlers.h b/firmware/usrp3/n230/n230_eth_handlers.h index 86130e361..67afbb246 100644 --- a/firmware/usrp3/n230/n230_eth_handlers.h +++ b/firmware/usrp3/n230/n230_eth_handlers.h @@ -23,7 +23,7 @@ #include <stdbool.h> #include <lwip/ip_addr.h> #include <wb_soft_reg.h> -#include "../n230/n230_fw_host_iface.h" +#include "../../../host/lib/usrp/n230/n230_fw_host_iface.h" /*! * Registrar for host firmware communications handler. diff --git a/firmware/usrp3/n230/n230_fw_defs.h b/firmware/usrp3/n230/n230_fw_defs.h deleted file mode 100644 index fbdc67ebb..000000000 --- a/firmware/usrp3/n230/n230_fw_defs.h +++ /dev/null @@ -1,137 +0,0 @@ -// -// Copyright 2014 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_N230_FW_DEFS_H -#define INCLUDED_N230_FW_DEFS_H - -#include <stdint.h> - -/*! - * Constants specific to N230 firmware. - * This header is shared by the firmware and host code. - * Therefore, this header may only contain valid C code. - * However, if it is included from within the host code, - * it will be namespaced appropriately - */ -#ifdef __cplusplus -namespace uhd { -namespace usrp { -namespace n230 { -namespace fw { -#endif - -static inline uint32_t reg_addr(uint32_t base, uint32_t offset) { - return ((base) + (offset)*4); -} - -/******************************************************************* - * Global - *******************************************************************/ -static const uint32_t CPU_CLOCK_FREQ = 80000000; -static const uint32_t PER_MILLISEC_CRON_JOBID = 0; -static const uint32_t PER_SECOND_CRON_JOBID = 1; - -/******************************************************************* - * Wishbone slave addresses - *******************************************************************/ -static const uint32_t WB_MAIN_RAM_BASE = 0x0000; -static const uint32_t WB_PKT_RAM_BASE = 0x8000; -static const uint32_t WB_SBRB_BASE = 0xa000; -static const uint32_t WB_SPI_FLASH_BASE = 0xb000; -static const uint32_t WB_ETH0_MAC_BASE = 0xc000; -static const uint32_t WB_ETH1_MAC_BASE = 0xd000; -static const uint32_t WB_XB_SBRB_BASE = 0xe000; -static const uint32_t WB_ETH0_I2C_BASE = 0xf600; -static const uint32_t WB_ETH1_I2C_BASE = 0xf700; -static const uint32_t WB_DBG_UART_BASE = 0xf900; - -/******************************************************************* - * Seting Register Base addresses - *******************************************************************/ -static const uint32_t SR_ZPU_SW_RST = 0; -static const uint32_t SR_ZPU_BOOT_DONE = 1; -static const uint32_t SR_ZPU_LEDS = 2; -static const uint32_t SR_ZPU_XB_LOCAL = 4; -static const uint32_t SR_ZPU_SFP_CTRL0 = 16; -static const uint32_t SR_ZPU_SFP_CTRL1 = 17; -static const uint32_t SR_ZPU_ETHINT0 = 64; -static const uint32_t SR_ZPU_ETHINT1 = 80; - -static const uint32_t SR_ZPU_SW_RST_NONE = 0x0; -static const uint32_t SR_ZPU_SW_RST_PHY = 0x1; -static const uint32_t SR_ZPU_SW_RST_RADIO = 0x2; - -/******************************************************************* - * Readback addresses - *******************************************************************/ -static const uint32_t RB_ZPU_COMPAT = 0; -static const uint32_t RB_ZPU_COUNTER = 1; -static const uint32_t RB_ZPU_SFP_STATUS0 = 2; -static const uint32_t RB_ZPU_SFP_STATUS1 = 3; -static const uint32_t RB_ZPU_ETH0_PKT_CNT = 6; -static const uint32_t RB_ZPU_ETH1_PKT_CNT = 7; - -/******************************************************************* - * Ethernet - *******************************************************************/ -static const uint32_t WB_PKT_RAM_CTRL_OFFSET = 0x1FFC; - -static const uint32_t SR_ZPU_ETHINT_FRAMER_BASE = 0; -static const uint32_t SR_ZPU_ETHINT_DISPATCHER_BASE = 8; - -//Eth framer constants -static const uint32_t ETH_FRAMER_SRC_MAC_HI = 0; -static const uint32_t ETH_FRAMER_SRC_MAC_LO = 1; -static const uint32_t ETH_FRAMER_SRC_IP_ADDR = 2; -static const uint32_t ETH_FRAMER_SRC_UDP_PORT = 3; -static const uint32_t ETH_FRAMER_DST_RAM_ADDR = 4; -static const uint32_t ETH_FRAMER_DST_IP_ADDR = 5; -static const uint32_t ETH_FRAMER_DST_UDP_MAC = 6; -static const uint32_t ETH_FRAMER_DST_MAC_LO = 7; - -/******************************************************************* - * CODEC - *******************************************************************/ -static const uint32_t CODEC_SPI_CLOCK_FREQ = 4000000; //4MHz -static const uint32_t ADF4001_SPI_CLOCK_FREQ = 200000; //200kHz - -/******************************************************************* - * UART - *******************************************************************/ -static const uint32_t DBG_UART_BAUD = 115200; - -/******************************************************************* - * Build Compatability Numbers - *******************************************************************/ -static const uint8_t PRODUCT_NUM = 0x01; -static const uint8_t COMPAT_MAJOR = 0x00; -static const uint16_t COMPAT_MINOR = 0x0000; - -static inline uint8_t get_prod_num(uint32_t compat_reg) { - return (compat_reg >> 24) & 0xFF; -} -static inline uint8_t get_compat_major(uint32_t compat_reg) { - return (compat_reg >> 16) & 0xFF; -} -static inline uint8_t get_compat_minor(uint32_t compat_reg) { - return compat_reg & 0xFFFF; -} - -#ifdef __cplusplus -}}}} //namespace -#endif -#endif /* INCLUDED_N230_FW_DEFS_H */ diff --git a/firmware/usrp3/n230/n230_fw_host_iface.h b/firmware/usrp3/n230/n230_fw_host_iface.h deleted file mode 100644 index dc82df2fc..000000000 --- a/firmware/usrp3/n230/n230_fw_host_iface.h +++ /dev/null @@ -1,128 +0,0 @@ -// -// Copyright 2014 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_N230_FW_HOST_IFACE_H -#define INCLUDED_N230_FW_HOST_IFACE_H - -#include <stdint.h> - -/*! - * Structs and constants for N230 communication between firmware and host. - * This header is shared by the firmware and host code. - * Therefore, this header may only contain valid C code. - */ -#ifdef __cplusplus -extern "C" { -#endif - -//-------------------------------------------------- -// Ethernet related -// -#define N230_DEFAULT_ETH0_MAC {0x00, 0x50, 0xC2, 0x85, 0x3f, 0xff} -#define N230_DEFAULT_ETH1_MAC {0x00, 0x50, 0xC2, 0x85, 0x3f, 0x33} -#define N230_DEFAULT_ETH0_IP (192 << 24 | 168 << 16 | 10 << 8 | 2 << 0) -#define N230_DEFAULT_ETH1_IP (192 << 24 | 168 << 16 | 20 << 8 | 2 << 0) -#define N230_DEFAULT_ETH0_MASK (255 << 24 | 255 << 16 | 255 << 8 | 0 << 0) -#define N230_DEFAULT_ETH1_MASK (255 << 24 | 255 << 16 | 255 << 8 | 0 << 0) -#define N230_DEFAULT_GATEWAY (192 << 24 | 168 << 16 | 10 << 8 | 1 << 0) - -#define N230_FW_COMMS_UDP_PORT 49152 -#define N230_FW_COMMS_CVITA_PORT 49153 -#define N230_FW_COMMS_FLASH_PROG_PORT 49154 -// -//-------------------------------------------------- - -//-------------------------------------------------- -// Memory shared with host -// -#define N230_FW_HOST_SHMEM_BASE_ADDR 0x10000 -#define N230_FW_HOST_SHMEM_RW_BASE_ADDR 0x1000C -#define N230_FW_HOST_SHMEM_NUM_WORDS (sizeof(n230_host_shared_mem_data_t)/sizeof(uint32_t)) - -#define N230_FW_HOST_SHMEM_MAX_ADDR \ - (N230_FW_HOST_SHMEM_BASE_ADDR + ((N230_FW_HOST_SHMEM_NUM_WORDS - 1) * sizeof(uint32_t))) - -#define N230_FW_HOST_SHMEM_OFFSET(member) \ - (N230_FW_HOST_SHMEM_BASE_ADDR + ((uint32_t)offsetof(n230_host_shared_mem_data_t, member))) - -//The shared memory block can only be accessed on 32-bit boundaries -typedef struct { //All fields must be 32-bit wide to avoid packing directives - //Read-Only fields (N230_FW_HOST_SHMEM_BASE_ADDR) - uint32_t fw_compat_num; //Compat number must be at offset 0 - uint32_t fw_version_hash; - uint32_t claim_status; - - //Read-Write fields (N230_FW_HOST_SHMEM_RW_BASE_ADDR) - uint32_t scratch; - uint32_t claim_time; - uint32_t claim_src; -} n230_host_shared_mem_data_t; - -typedef union -{ - uint32_t buff[N230_FW_HOST_SHMEM_NUM_WORDS]; - n230_host_shared_mem_data_t data; -} n230_host_shared_mem_t; - -#define N230_FW_PRODUCT_ID 1 -#define N230_FW_COMPAT_NUM_MAJOR 3 -#define N230_FW_COMPAT_NUM_MINOR 0 -#define N230_FW_COMPAT_NUM (((N230_FW_COMPAT_NUM_MAJOR & 0xFF) << 16) | (N230_FW_COMPAT_NUM_MINOR & 0xFFFF)) -// -//-------------------------------------------------- - -//-------------------------------------------------- -// Flash read-write interface for host -// -#define N230_FLASH_COMM_FLAGS_ACK 0x00000001 -#define N230_FLASH_COMM_FLAGS_CMD_MASK 0x00000FF0 -#define N230_FLASH_COMM_FLAGS_ERROR_MASK 0xFF000000 - -#define N230_FLASH_COMM_CMD_READ_NV_DATA 0x00000010 -#define N230_FLASH_COMM_CMD_WRITE_NV_DATA 0x00000020 -#define N230_FLASH_COMM_CMD_READ_FPGA 0x00000030 -#define N230_FLASH_COMM_CMD_WRITE_FPGA 0x00000040 -#define N230_FLASH_COMM_CMD_ERASE_FPGA 0x00000050 - -#define N230_FLASH_COMM_ERR_PKT_ERROR 0x80000000 -#define N230_FLASH_COMM_ERR_CMD_ERROR 0x40000000 -#define N230_FLASH_COMM_ERR_SIZE_ERROR 0x20000000 - -#define N230_FLASH_COMM_MAX_PAYLOAD_SIZE 128 - -typedef struct -{ - uint32_t flags; - uint32_t seq; - uint32_t offset; - uint32_t size; - uint8_t data[N230_FLASH_COMM_MAX_PAYLOAD_SIZE]; -} n230_flash_prog_t; -// -//-------------------------------------------------- - -#define N230_HW_REVISION_COMPAT 1 -#define N230_HW_REVISION_MIN 1 - - -#define N230_CLAIMER_TIMEOUT_IN_MS 2000 - -#ifdef __cplusplus -} -#endif - -#endif /* INCLUDED_N230_FW_HOST_IFACE_H */ diff --git a/firmware/usrp3/n230/n230_init.c b/firmware/usrp3/n230/n230_init.c index 4602f8338..0054c1bbc 100644 --- a/firmware/usrp3/n230/n230_init.c +++ b/firmware/usrp3/n230/n230_init.c @@ -25,8 +25,8 @@ #include <print_addrs.h> #include <trace.h> #include "n230_eeprom.h" -#include "n230_fw_defs.h" #include "n230_init.h" +#include "../../../host/lib/usrp/n230/n230_fw_defs.h" static wb_pkt_iface64_config_t pkt_config; diff --git a/firmware/usrp3/n230/n230_main.c b/firmware/usrp3/n230/n230_main.c index ceb896514..a6c12e56d 100644 --- a/firmware/usrp3/n230/n230_main.c +++ b/firmware/usrp3/n230/n230_main.c @@ -19,9 +19,9 @@ #include <wb_soft_reg.h> #include <u3_net_stack.h> #include <trace.h> +#include "../../../host/lib/usrp/n230/n230_fw_defs.h" +#include "../../../host/lib/usrp/n230/n230_fw_host_iface.h" #include "n230_eth_handlers.h" -#include "n230_fw_defs.h" -#include "n230_fw_host_iface.h" #include "n230_init.h" //The version hash should come from a cmake build variable |