summaryrefslogtreecommitdiffstats
path: root/firmware/microblaze
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/microblaze')
-rw-r--r--firmware/microblaze/Makefile.common70
-rw-r--r--firmware/microblaze/apps/Makefile.am5
-rw-r--r--firmware/microblaze/apps/txrx.c24
-rw-r--r--firmware/microblaze/configure.ac7
-rw-r--r--firmware/microblaze/lib/Makefile.am5
-rw-r--r--firmware/microblaze/lib/microblaze.ld163
6 files changed, 74 insertions, 200 deletions
diff --git a/firmware/microblaze/Makefile.common b/firmware/microblaze/Makefile.common
index cb09f7f9d..3d0f540d8 100644
--- a/firmware/microblaze/Makefile.common
+++ b/firmware/microblaze/Makefile.common
@@ -17,6 +17,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
+########################################################################
+# lwIP header include dirs
+########################################################################
LWIPDIR = $(top_srcdir)/lwip/lwip-1.3.1
LWIP_INCLUDES = \
@@ -25,50 +28,55 @@ LWIP_INCLUDES = \
-I$(LWIPDIR)/src/include \
-I$(LWIPDIR)/src/include/ipv4
-STD_INCLUDES = \
+########################################################################
+# local include dirs
+########################################################################
+LOCAL_INCLUDES = \
-I$(top_srcdir)/include \
- -I$(top_srcdir)/lib \
- -I$(top_srcdir)/../../lib/usrp/mboard \
- $(LWIP_INCLUDES)
+ -I$(top_srcdir)/lib
-#HAL_IO = -DHAL_IO_USES_DBOARD_PINS
-HAL_IO = -DHAL_IO_USES_UART
-
-AM_CPPFLAGS = $(HAL_IO) $(STD_INCLUDES)
+########################################################################
+# misc flags for the mb-gcc compiler
+########################################################################
+MBGCC_CFLAGS = \
+ --std=gnu99 -Wall -Werror-implicit-function-declaration \
+ -mxl-soft-div -msoft-float -mxl-soft-mul -mxl-barrel-shift
-STD_CFLAGS = --std=gnu99 -Wall -Werror-implicit-function-declaration -mxl-soft-div -msoft-float
+MBGCC_LFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=3072
-MB_CFLAGS = -mxl-soft-mul -mxl-barrel-shift
-
-AM_CFLAGS = $(STD_CFLAGS) $(MB_CFLAGS)
-#AM_CFLAGS = $(STD_CFLAGS) -mxl-soft-mul -mxl-barrel-shift -mxl-gp-opt -G 16384
+########################################################################
+# define for the hal io (FIXME move?)
+########################################################################
+#HAL_IO = -DHAL_IO_USES_DBOARD_PINS
+HAL_IO = -DHAL_IO_USES_UART
+########################################################################
+# set the cflags and ldflags
+########################################################################
+AM_CFLAGS = $(MBGCC_CFLAGS) $(LOCAL_INCLUDES) $(LWIP_INCLUDES) $(HAL_IO)
-#LINKER_SCRIPT = $(top_srcdir)/lib/microblaze.ld
-#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-defsym -Wl,_STACK_SIZE=1024
-#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT) -Wl,-Map -Wl,$@.map
-#AM_LDFLAGS = -Wl,-T,$(LINKER_SCRIPT)
-AM_LDFLAGS = -Wl,-Map -Wl,$(@:.elf=.map) -Wl,-defsym -Wl,_STACK_SIZE=3072
-#AM_LDFLAGS = -Wl,-defsym -Wl,_STACK_SIZE=2048
+AM_LDFLAGS = $(MBGCC_LFLAGS)
+########################################################################
+# Common stuff for building top level microblaze images
+########################################################################
+AM_LDFLAGS += -Wl,-Map -Wl,$(@:.elf=.map)
%.bin : %.elf
- mb-objcopy -O binary $< $@
+ $(MB_OBJCOPY) -O binary $< $@
%.dump : %.elf
- mb-objdump -DSC $< > $@
+ $(MB_OBJDUMP) -DSC $< > $@
%.rom : %.bin
- hexdump -v -e'1/1 "%.2X\n"' $< > $@
-
-
-#.PRECIOUS : %.bin
-
+ $(HEXDUMP) -v -e'1/1 "%.2X\n"' $< > $@
-BINS = $(noinst_PROGRAMS:.elf=.bin)
-ROMS = $(noinst_PROGRAMS:.elf=.rom)
-DUMPS = $(noinst_PROGRAMS:.elf=.dump)
+_generated_from_elf = \
+ $(noinst_PROGRAMS:.elf=.map) \
+ $(noinst_PROGRAMS:.elf=.bin) \
+ $(noinst_PROGRAMS:.elf=.dump) \
+ $(noinst_PROGRAMS:.elf=.rom)
-noinst_DATA = $(BINS) $(ROMS) $(DUMPS)
+noinst_DATA = $(_generated_from_elf)
-CLEANFILES = $(ROMS) $(DUMPS) $(BINS)
+MOSTLYCLEANFILES = $(_generated_from_elf)
diff --git a/firmware/microblaze/apps/Makefile.am b/firmware/microblaze/apps/Makefile.am
index 8e4551083..eb6ee6534 100644
--- a/firmware/microblaze/apps/Makefile.am
+++ b/firmware/microblaze/apps/Makefile.am
@@ -19,7 +19,9 @@
include $(top_srcdir)/Makefile.common
-LDADD = ../lib/libu2fw.a
+LDADD = $(top_srcdir)/lib/libu2fw.a
+
+AM_CFLAGS += -I$(top_srcdir)/../../lib/usrp/mboard
noinst_PROGRAMS = txrx.elf
@@ -78,4 +80,3 @@ txrx_elf_SOURCES = txrx.c
# mimo_app_common_v2.h
#
-MOSTLYCLEANFILES = *.map
diff --git a/firmware/microblaze/apps/txrx.c b/firmware/microblaze/apps/txrx.c
index 23a88c246..1c43a2ca1 100644
--- a/firmware/microblaze/apps/txrx.c
+++ b/firmware/microblaze/apps/txrx.c
@@ -160,7 +160,29 @@ void handle_udp_ctrl_packet(
unsigned char *payload, int payload_len
){
printf("Got ctrl packet #words: %d\n", (int)payload_len);
- send_udp_pkt(USRP2_UDP_CTRL_PORT, src, payload, payload_len);
+ if (payload_len < sizeof(usrp2_ctrl_data_t)){
+ //TODO send err packet
+ return;
+ }
+ //setup the input and output data
+ usrp2_ctrl_data_t *ctrl_data_in = (usrp2_ctrl_data_t *)payload;
+ usrp2_ctrl_data_t ctrl_data_out = {
+ .id=USRP2_CTRL_ID_NONE,
+ .seq=ctrl_data_in->seq
+ };
+ //handle the data based on the id
+ switch(ctrl_data_in->id){
+ case USRP2_CTRL_ID_HELLO:
+ ctrl_data_out.id = ctrl_data_in->id;
+ //grab the addrs
+ struct ip_addr ip_addr = get_my_ip_addr();
+ eth_mac_addr_t mac_addr = get_my_eth_mac_addr();
+ //copy them into the out data
+ memcpy(&ctrl_data_out.data.discovery_addrs.ip_addr, &ip_addr, sizeof(ip_addr));
+ memcpy(&ctrl_data_out.data.discovery_addrs.mac_addr, &mac_addr, sizeof(mac_addr));
+ break;
+ }
+ send_udp_pkt(USRP2_UDP_CTRL_PORT, src, &ctrl_data_out, sizeof(ctrl_data_out));
}
/*
diff --git a/firmware/microblaze/configure.ac b/firmware/microblaze/configure.ac
index cbb9e1a93..46968b7fb 100644
--- a/firmware/microblaze/configure.ac
+++ b/firmware/microblaze/configure.ac
@@ -35,6 +35,13 @@ AC_PROG_CC([mb-gcc])
LT_INIT
##################################################
+## Setup Tools
+##################################################
+AC_PATH_PROG([MB_OBJCOPY], [mb-objcopy])
+AC_PATH_PROG([MB_OBJDUMP], [mb-objdump])
+AC_PATH_PROG([HEXDUMP], [hexdump])
+
+##################################################
## Create Files
##################################################
AC_CONFIG_FILES([ \
diff --git a/firmware/microblaze/lib/Makefile.am b/firmware/microblaze/lib/Makefile.am
index 02e9dda73..4ca05739c 100644
--- a/firmware/microblaze/lib/Makefile.am
+++ b/firmware/microblaze/lib/Makefile.am
@@ -1,4 +1,6 @@
#
+# Copyright 2010 Ettus Research LLC
+#
# Copyright 2007 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
@@ -93,6 +95,3 @@ noinst_HEADERS = \
arp_cache.h \
banal.h \
ethertype.h
-
-EXTRA_DIST = \
- microblaze.ld
diff --git a/firmware/microblaze/lib/microblaze.ld b/firmware/microblaze/lib/microblaze.ld
deleted file mode 100644
index ef816cf2e..000000000
--- a/firmware/microblaze/lib/microblaze.ld
+++ /dev/null
@@ -1,163 +0,0 @@
-OUTPUT_FORMAT("elf32-microblaze", "", "")
-/* SEARCH_DIR(/home/jwilliams/tmp/microblaze-toolchain-sources/release/lin/microblaze//lib);*/
-
-ENTRY(_start)
-
-MEMORY {
- flatmem : ORIGIN = 0x0, LENGTH = 0x00008000 /* 32KB */
-}
-
-SECTIONS
-{
- _TEXT_START_ADDR = DEFINED(_TEXT_START_ADDR) ? _TEXT_START_ADDR : 0x50;
- .vectors.reset 0x0 : { *(.vectors.reset) } > flatmem
- .vectors.sw_exception 0x8 : { *(.vectors.sw_exception) } > flatmem
- .vectors.interrupt 0x10 : { *(.vectors.interrupt) } > flatmem
- .vectors.hw_exception 0x20 : { *(.vectors.hw_exception) } >flatmem
- . = _TEXT_START_ADDR;
- _ftext = .;
- .text : {
- *(.text)
- *(.text.*)
- *(.gnu.linkonce.t.*)
- } > flatmem
- _etext = .;
- .init : { KEEP (*(.init)) } > flatmem =0
- .fini : { KEEP (*(.fini)) } > flatmem =0
- PROVIDE (__CTOR_LIST__ = .);
- PROVIDE (___CTOR_LIST__ = .);
- .ctors :
- {
- /* gcc uses crtbegin.o to find the start of
- the constructors, so we make sure it is
- first. Because this is a wildcard, it
- doesn't matter if the user does not
- actually link against crtbegin.o; the
- linker won't look for a file to match a
- wildcard. The wildcard also means that it
- doesn't matter which directory crtbegin.o
- is in. */
- KEEP (*crtbegin.o(.ctors))
- /* We don't want to include the .ctor section from
- from the crtend.o file until after the sorted ctors.
- The .ctor section from the crtend file contains the
- end of ctors marker and it must be last */
- KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
- KEEP (*(SORT(.ctors.*)))
- KEEP (*(.ctors))
- } > flatmem
- PROVIDE (__CTOR_END__ = .);
- PROVIDE (___CTOR_END__ = .);
- PROVIDE (__DTOR_LIST__ = .);
- PROVIDE (___DTOR_LIST__ = .);
- .dtors :
- {
- KEEP (*crtbegin.o(.dtors))
- KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
- KEEP (*(SORT(.dtors.*)))
- KEEP (*(.dtors))
- } > flatmem
- PROVIDE (__DTOR_END__ = .);
- PROVIDE (___DTOR_END__ = .);
- . = ALIGN(4);
- _frodata = . ;
- .rodata : {
- *(.rodata)
- *(.gnu.linkonce.r.*)
- CONSTRUCTORS; /* Is this needed? */
- } > flatmem
- _erodata = .;
- /* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */
- /* Note that .sdata2 and .sbss2 must be contiguous */
- . = ALIGN(8);
- _ssrw = .;
- .sdata2 : {
- *(.sdata2)
- *(.gnu.linkonce.s2.*)
- } > flatmem
- . = ALIGN(4);
- .sbss2 : {
- PROVIDE (__sbss2_start = .);
- *(.sbss2)
- *(.gnu.linkonce.sb2.*)
- PROVIDE (__sbss2_end = .);
- } > flatmem
- . = ALIGN(8);
- _essrw = .;
- _ssrw_size = _essrw - _ssrw;
- PROVIDE (_SDA2_BASE_ = _ssrw + (_ssrw_size / 2 ));
- . = ALIGN(4);
- _fdata = .;
- .data : {
- *(.data)
- *(.gnu.linkonce.d.*)
- CONSTRUCTORS; /* Is this needed? */
- } > flatmem
- _edata = . ;
- /* Added to handle pic code */
- .got : {
- *(.got)
- } > flatmem
- .got1 : {
- *(.got1)
- } > flatmem
- .got2 : {
- *(.got2)
- } > flatmem
- /* Added by Sathya to handle C++ exceptions */
- .eh_frame : {
- *(.eh_frame)
- } > flatmem
- .jcr : {
- *(.jcr)
- } > flatmem
- .gcc_except_table : {
- *(.gcc_except_table)
- } > flatmem
- /* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */
- /* Note that .sdata and .sbss must be contiguous */
- . = ALIGN(8);
- _ssro = .;
- .sdata : {
- *(.sdata)
- *(.gnu.linkonce.s.*)
- } > flatmem
- . = ALIGN(4);
- .sbss : {
- PROVIDE (__sbss_start = .);
- *(.sbss)
- *(.gnu.linkonce.sb.*)
- PROVIDE (__sbss_end = .);
- } > flatmem
- . = ALIGN(8);
- _essro = .;
- _ssro_size = _essro - _ssro;
- PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 ));
- . = ALIGN(4);
- _fbss = .;
- .bss : {
- PROVIDE (__bss_start = .);
- *(.bss)
- *(.gnu.linkonce.b.*)
- *(COMMON)
- . = ALIGN(4);
- PROVIDE (__bss_end = .);
- _heap = .;
- _HEAP_SIZE = DEFINED(_HEAP_SIZE) ? _HEAP_SIZE : 0x0;
- _STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x800;
- . += _HEAP_SIZE;
- _heap_end = .;
- . += _STACK_SIZE;
- . = ALIGN(8);
- _stack = .;
- _end = .;
- } > flatmem
- .tdata : {
- *(.tdata)
- *(.gnu.linkonce.td.*)
- } > flatmem
- .tbss : {
- *(.tbss)
- *(.gnu.linkonce.tb.*)
- } > flatmem
-}