aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-11-23 18:09:51 -0800
committerJosh Blum <josh@joshknows.com>2010-12-11 18:43:10 -0800
commit07de916b7646c78d4ad5ba9104d52343e993d198 (patch)
tree405a679edfadec9d98103e8c2d5b9bb531841096
parent95499e2e132b1c619704b6fbc452e661633b3233 (diff)
downloaduhd-07de916b7646c78d4ad5ba9104d52343e993d198.tar.gz
uhd-07de916b7646c78d4ad5ba9104d52343e993d198.tar.bz2
uhd-07de916b7646c78d4ad5ba9104d52343e993d198.zip
packet_router: added sregs for ip addr and ports
the pkt control now programs the inspector with port and ip addr set the eth mac to pass all unicast added easy debug flag to net common
-rw-r--r--firmware/microblaze/apps/txrx_uhd.c2
-rw-r--r--firmware/microblaze/lib/eth_mac.c4
-rw-r--r--firmware/microblaze/lib/net_common.c10
-rw-r--r--firmware/microblaze/lib/pkt_ctrl.c16
-rw-r--r--firmware/microblaze/lib/pkt_ctrl.h8
-rw-r--r--firmware/microblaze/usrp2/memory_map.h2
-rw-r--r--firmware/microblaze/usrp2p/memory_map.h2
7 files changed, 25 insertions, 19 deletions
diff --git a/firmware/microblaze/apps/txrx_uhd.c b/firmware/microblaze/apps/txrx_uhd.c
index 6f852bb18..8ee53ac3e 100644
--- a/firmware/microblaze/apps/txrx_uhd.c
+++ b/firmware/microblaze/apps/txrx_uhd.c
@@ -349,7 +349,7 @@ main(void)
//1) register the addresses into the network stack
register_addrs(ethernet_mac_addr(), get_ip_addr());
- pkt_ctrl_register_ip_addr(get_ip_addr());
+ pkt_ctrl_program_inspector(get_ip_addr(), USRP2_UDP_DATA_PORT);
//2) register callbacks for udp ports we service
register_udp_listener(USRP2_UDP_CTRL_PORT, handle_udp_ctrl_packet);
diff --git a/firmware/microblaze/lib/eth_mac.c b/firmware/microblaze/lib/eth_mac.c
index 034a4d494..581a5c69f 100644
--- a/firmware/microblaze/lib/eth_mac.c
+++ b/firmware/microblaze/lib/eth_mac.c
@@ -28,6 +28,7 @@
void
eth_mac_set_addr(const eth_mac_addr_t *src)
{
+ /* disable because MAC_SET_PASS_ALL is set below
eth_mac->ucast_hi =
(((unsigned int)src->addr[0])<<8) +
((unsigned int)src->addr[1]);
@@ -36,6 +37,7 @@ eth_mac_set_addr(const eth_mac_addr_t *src)
(((unsigned int)src->addr[3])<<16) +
(((unsigned int)src->addr[4])<<8) +
(((unsigned int)src->addr[5]));
+*/
}
@@ -45,7 +47,7 @@ eth_mac_init(const eth_mac_addr_t *src)
eth_mac->miimoder = 25; // divider from CPU clock (50MHz/25 = 2MHz)
eth_mac_set_addr(src);
- eth_mac->settings = MAC_SET_PAUSE_EN | MAC_SET_PASS_BCAST | MAC_SET_PASS_UCAST | MAC_SET_PAUSE_SEND_EN;
+ eth_mac->settings = MAC_SET_PAUSE_EN | MAC_SET_PASS_BCAST | MAC_SET_PASS_UCAST | MAC_SET_PAUSE_SEND_EN | MAC_SET_PASS_ALL;
eth_mac->pause_time = 38;
eth_mac->pause_thresh = 1200;
diff --git a/firmware/microblaze/lib/net_common.c b/firmware/microblaze/lib/net_common.c
index 9804ae4c5..947f41dae 100644
--- a/firmware/microblaze/lib/net_common.c
+++ b/firmware/microblaze/lib/net_common.c
@@ -37,6 +37,8 @@
#include <string.h>
#include "pkt_ctrl.h"
+static const bool debug = false;
+
static const eth_mac_addr_t BCAST_MAC_ADDR = {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}};
// ------------------------------------------------------------------------
@@ -159,7 +161,7 @@ send_pkt(eth_mac_addr_t dst, int ethertype,
total_len = 60;
pkt_ctrl_commit_outgoing_buffer(total_len/4);
- //printf("sent %d bytes\n", total_len);
+ if (debug) printf("sent %d bytes\n", (int)total_len);
}
unsigned int CHKSUM(unsigned int x, unsigned int *chksum)
@@ -388,9 +390,9 @@ handle_arp_packet(struct arp_eth_ipv4 *p, size_t size)
void
handle_eth_packet(uint32_t *p, size_t nlines)
{
- //static size_t bcount = 0;
- //printf("===> %d\n", bcount++);
- //print_buffer(p, nlines);
+ static size_t bcount = 0;
+ if (debug) printf("===> %d\n", (int)bcount++);
+ if (debug) print_buffer(p, nlines);
padded_eth_hdr_t *eth_hdr = (padded_eth_hdr_t *)p;
diff --git a/firmware/microblaze/lib/pkt_ctrl.c b/firmware/microblaze/lib/pkt_ctrl.c
index 9870a1f8a..f4b4b7825 100644
--- a/firmware/microblaze/lib/pkt_ctrl.c
+++ b/firmware/microblaze/lib/pkt_ctrl.c
@@ -17,8 +17,6 @@
#include "pkt_ctrl.h"
#include "memory_map.h"
-#include <stdint.h>
-#include <stdbool.h>
#include <nonstdio.h>
static void set_control(uint32_t value, uint32_t mask){
@@ -47,15 +45,11 @@ static bool is_status_bit_set(int bit){
#define MODE_BIT 2
#define CLR_BIT 8
-void pkt_ctrl_register_ip_addr(const struct ip_addr *ip_addr){
- //program in the ip addr
- set_control(0x1 << 4, 0x3 << 4);
- set_control((ip_addr->addr & 0x0000ffff) << 16, 0xffff << 16);
- set_control(0x2 << 4, 0x3 << 4);
- set_control((ip_addr->addr & 0xffff0000) << 0, 0xffff << 16);
-
- //clear cmd
- set_control(0x0, 0x3 << 4);
+void pkt_ctrl_program_inspector(
+ const struct ip_addr *ip_addr, uint16_t dsp_udp_port
+){
+ buffer_pool_ctrl->ip_addr = ip_addr->addr;
+ buffer_pool_ctrl->udp_ports = dsp_udp_port;
}
void pkt_ctrl_set_routing_mode(pkt_ctrl_routing_mode_t mode){
diff --git a/firmware/microblaze/lib/pkt_ctrl.h b/firmware/microblaze/lib/pkt_ctrl.h
index 2e175bca0..927d1fc7a 100644
--- a/firmware/microblaze/lib/pkt_ctrl.h
+++ b/firmware/microblaze/lib/pkt_ctrl.h
@@ -19,6 +19,8 @@
#define INCLUDED_PKT_CTRL_H
#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
#include <lwip/ip_addr.h>
typedef enum {
@@ -26,8 +28,10 @@ typedef enum {
PKT_CTRL_ROUTING_MODE_MASTER,
} pkt_ctrl_routing_mode_t;
-//! Register the IP address into the router
-void pkt_ctrl_register_ip_addr(const struct ip_addr *ip_addr);
+//! Program the decision values into the packet inspector
+void pkt_ctrl_program_inspector(
+ const struct ip_addr *ip_addr, uint16_t dsp_udp_port
+);
//! Set the routing mode for this device
void pkt_ctrl_set_routing_mode(pkt_ctrl_routing_mode_t mode);
diff --git a/firmware/microblaze/usrp2/memory_map.h b/firmware/microblaze/usrp2/memory_map.h
index 2b07ff148..25c800893 100644
--- a/firmware/microblaze/usrp2/memory_map.h
+++ b/firmware/microblaze/usrp2/memory_map.h
@@ -247,6 +247,8 @@ hwconfig_wishbone_divisor(void)
typedef struct {
volatile uint32_t ctrl;
+ volatile uint32_t ip_addr;
+ volatile uint32_t udp_ports; //dsp0 (low 16) dsp1 (high 16)
} buffer_pool_ctrl_t;
#define buffer_pool_ctrl ((buffer_pool_ctrl_t *) BUFFER_POOL_CTRL_BASE)
diff --git a/firmware/microblaze/usrp2p/memory_map.h b/firmware/microblaze/usrp2p/memory_map.h
index 431dc19e7..dedfdac8b 100644
--- a/firmware/microblaze/usrp2p/memory_map.h
+++ b/firmware/microblaze/usrp2p/memory_map.h
@@ -274,6 +274,8 @@ hwconfig_wishbone_divisor(void)
typedef struct {
volatile uint32_t ctrl;
+ volatile uint32_t ip_addr;
+ volatile uint32_t udp_ports; //dsp0 (low 16) dsp1 (high 16)
} buffer_pool_ctrl_t;
#define buffer_pool_ctrl ((buffer_pool_ctrl_t *) BUFFER_POOL_CTRL_BASE)