1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
//
// Copyright 2013 Ettus Research LLC
// Copyright 2018 Ettus Research, a National Instruments Company
//
// SPDX-License-Identifier: GPL-3.0-or-later
//
#ifndef INCLUDED_X300_FW_COMMON_H
#define INCLUDED_X300_FW_COMMON_H
#include <stdint.h>
/*!
* Structs and constants for x300 communication.
* 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 X300_REVISION_COMPAT 7
#define X300_REVISION_MIN 2
#define X300_FW_COMPAT_MAJOR 6
#define X300_FW_COMPAT_MINOR 0
#define X300_FPGA_COMPAT_MAJOR 0x27
#define X300_FPGA_COMPAT_MINOR 0x00
//shared memory sections - in between the stack and the program space
#define X300_FW_SHMEM_BASE 0x6000
#define X300_FW_SHMEM_COMPAT_NUM 0
#define X300_FW_SHMEM_GPSDO_STATUS 1
#define X300_FW_SHMEM_UART_RX_INDEX 2
#define X300_FW_SHMEM_UART_TX_INDEX 3
#define X300_FW_SHMEM_CLAIM_STATUS 5
#define X300_FW_SHMEM_CLAIM_TIME 6
#define X300_FW_SHMEM_CLAIM_SRC 7
#define X300_FW_SHMEM_UART_RX_ADDR 8
#define X300_FW_SHMEM_UART_TX_ADDR 9
#define X300_FW_SHMEM_UART_WORDS32 10
#define X300_FW_SHMEM_ROUTE_MAP_ADDR 11
#define X300_FW_SHMEM_ROUTE_MAP_LEN 12
#define X300_FW_SHMEM_IDENT 13 // (13-39) EEPROM values in use
#define X300_FW_SHMEM_DEBUG 128
#define X300_FW_SHMEM_ADDR(offset) X300_FW_SHMEM_BASE + (4 * (offset))
#define X300_FW_NUM_BYTES (1 << 15) //64k
#define X300_FW_COMMS_MTU (1 << 13) //8k
#define X300_FW_COMMS_UDP_PORT 49152
#define X300_VITA_UDP_PORT 49153
#define X300_GPSDO_UDP_PORT 49156
#define X300_FPGA_PROG_UDP_PORT 49157
#define X300_MTU_DETECT_UDP_PORT 49158
#define X300_FPGA_READ_UDP_PORT 49159
#define X300_DEFAULT_MAC_ADDR_0 {0x00, 0x50, 0xC2, 0x85, 0x3f, 0xff}
#define X300_DEFAULT_MAC_ADDR_1 {0x00, 0x50, 0xC2, 0x85, 0x3f, 0x33}
#define X300_DEFAULT_GATEWAY (192 << 24 | 168 << 16 | 10 << 8 | 1 << 0)
#define X300_DEFAULT_IP_ETH0_1G (192 << 24 | 168 << 16 | 10 << 8 | 2 << 0)
#define X300_DEFAULT_IP_ETH1_1G (192 << 24 | 168 << 16 | 20 << 8 | 2 << 0)
#define X300_DEFAULT_IP_ETH0_10G (192 << 24 | 168 << 16 | 30 << 8 | 2 << 0)
#define X300_DEFAULT_IP_ETH1_10G (192 << 24 | 168 << 16 | 40 << 8 | 2 << 0)
#define X300_DEFAULT_NETMASK_ETH0_1G (255 << 24 | 255 << 16 | 255 << 8 | 0 << 0)
#define X300_DEFAULT_NETMASK_ETH1_1G (255 << 24 | 255 << 16 | 255 << 8 | 0 << 0)
#define X300_DEFAULT_NETMASK_ETH0_10G (255 << 24 | 255 << 16 | 255 << 8 | 0 << 0)
#define X300_DEFAULT_NETMASK_ETH1_10G (255 << 24 | 255 << 16 | 255 << 8 | 0 << 0)
#define X300_FW_COMMS_FLAGS_ACK (1 << 0)
#define X300_FW_COMMS_FLAGS_ERROR (1 << 1)
#define X300_FW_COMMS_FLAGS_POKE32 (1 << 2)
#define X300_FW_COMMS_FLAGS_PEEK32 (1 << 3)
#define X300_FPGA_PROG_FLAGS_ACK (1 << 0)
#define X300_FPGA_PROG_FLAGS_ERROR (1 << 1)
#define X300_FPGA_PROG_FLAGS_INIT (1 << 2)
#define X300_FPGA_PROG_FLAGS_CLEANUP (1 << 3)
#define X300_FPGA_PROG_FLAGS_ERASE (1 << 4)
#define X300_FPGA_PROG_FLAGS_VERIFY (1 << 5)
#define X300_FPGA_PROG_CONFIGURE (1 << 6)
#define X300_FPGA_PROG_CONFIG_STATUS (1 << 7)
#define X300_FPGA_READ_FLAGS_ACK (1 << 0)
#define X300_FPGA_READ_FLAGS_ERROR (1 << 1)
#define X300_FPGA_READ_FLAGS_INIT (1 << 2)
#define X300_FPGA_READ_FLAGS_CLEANUP (1 << 3)
#define X300_MTU_DETECT_ECHO_REQUEST (1 << 0)
#define X300_MTU_DETECT_ECHO_REPLY (1 << 1)
#define X300_MTU_DETECT_ERROR (1 << 2)
typedef struct
{
//indentifying numbers
unsigned char revision[2];
unsigned char product[2];
uint8_t _pad0[4];
//all the mac addrs
uint8_t mac_addr0[6];
uint8_t _pad1[2];
uint8_t mac_addr1[6];
uint8_t _pad2[2];
//all the IP addrs
uint32_t gateway;
uint32_t subnet[4];
uint32_t ip_addr[4];
uint8_t _pad3[16];
//names and serials
unsigned char name[23];
unsigned char serial[9];
} x300_eeprom_map_t;
typedef struct
{
uint32_t flags;
uint32_t sequence;
uint32_t addr;
uint32_t data;
} x300_fw_comms_t;
typedef struct
{
uint32_t flags;
uint32_t sector;
uint32_t index;
uint32_t size;
uint16_t data[128];
} x300_fpga_prog_t;
typedef struct
{
uint32_t flags;
} x300_fpga_prog_flags_t;
typedef struct
{
uint32_t flags;
uint32_t sector;
uint32_t index;
uint32_t size;
} x300_fpga_read_t;
typedef x300_fpga_prog_t x300_fpga_read_reply_t;
typedef struct
{
uint32_t flags;
uint32_t size;
} x300_mtu_t;
#ifdef __cplusplus
}
#endif
#endif /* INCLUDED_X300_FW_COMMON_H */
|