firmware: rewrite build system using cmake 22/head
authorFelix Fietkau <nbd@openwrt.org>
Sat, 6 Apr 2013 11:39:33 +0000 (13:39 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 26 Apr 2013 09:15:10 +0000 (11:15 +0200)
Call the firmware build from the top-level Makefile (depends
on the toolchain build).

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Makefile
build [deleted file]
target_firmware/.gitignore [new file with mode: 0644]
target_firmware/CMakeLists.txt [new file with mode: 0644]
target_firmware/Makefile [new file with mode: 0644]
target_firmware/configure [new file with mode: 0755]
target_firmware/firmware-crc.pl [new file with mode: 0755]
target_firmware/ram-k2.ld [new file with mode: 0755]
target_firmware/ram-magpie.ld [new file with mode: 0755]
target_firmware/rom-addrs-k2.ld [new file with mode: 0755]
target_firmware/rom-addrs-magpie.ld [new file with mode: 0755]

index b7738dda7186816fa89a6641a9c95dbc3bca687f..385433f3b1d97f658620b456c9ca72d36def5177 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -99,7 +99,7 @@ $(DL_DIR)/$($(1)_TAR):
        wget -N -P $(DL_DIR) $($(1)_URL)
 
 $(DL_DIR)/$($(1)_DIR)/.prepared: $(DL_DIR)/$($(1)_TAR)
-       tar -C $(DL_DIR) -x$(if $(findstring bzip2,$($(1)_TAR)),j,z)f $(DL_DIR)/$($(1)_TAR)
+       tar -C $(DL_DIR) -x$(if $(findstring bz2,$($(1)_TAR)),j,z)f $(DL_DIR)/$($(1)_TAR)
        $(if $($(1)_PATCHES), \
                cat $($(1)_PATCHES) | \
                patch -p1 -d $(DL_DIR)/$($(1)_DIR))
@@ -120,14 +120,20 @@ download: $(DL_DIR)/$($(1)_DIR)/.prepared
 
 endef
 
-all: toolchain
-clean:
+all: toolchain firmware
+toolchain-clean:
        rm -rf $(TOOLCHAIN_DIR)/build $(TOOLCHAIN_DIR)/inst
 clean-dl:
 download:
 toolchain:
 
-.PHONY: all clean clean-dl download toolchain
+clean:
+       $(MAKE) -C target_firmware clean
+
+firmware: toolchain
+       +$(MAKE) -C target_firmware
+
+.PHONY: all toolchain-clean clean clean-dl download toolchain firmware
 
 $(eval $(call Build,GMP))
 $(eval $(call Build,MPFR,GMP))
diff --git a/build b/build
deleted file mode 100755 (executable)
index 2ccaff6..0000000
--- a/build
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env bash
-
-rm htc_9271.fw
-rm htc_7010.fw
-
-# MAKE=gmake
-MAKE=make
-
-echo "*** AR9271 ***"
-( cd target_firmware/magpie_fw_dev/build/k2_1_0/image/k2_ram   \
-    && source builds_fusion_vista.ram                          \
-    && ${MAKE} clean ; ${MAKE} && ${MAKE} build && ${MAKE} build )
-cp target_firmware/magpie_fw_dev/build/k2_1_0/image/k2_ram/htc_9271.fw .
-
-echo "*** AR7010 ***"
-( cd target_firmware/magpie_fw_dev/build/magpie_1_1/image/magpie_ram   \
-    && source merlin_fusion.ram                                        \
-    && ${MAKE} clean ; ${MAKE} && ${MAKE} build && ${MAKE} build )
-
-cp target_firmware/magpie_fw_dev/build/magpie_1_1/image/magpie_ram/htc_7010.fw .
-
-echo "*** Done! ***"
diff --git a/target_firmware/.gitignore b/target_firmware/.gitignore
new file mode 100644 (file)
index 0000000..36b2c17
--- /dev/null
@@ -0,0 +1,3 @@
+/build
+/toolchain
+/*.fw
diff --git a/target_firmware/CMakeLists.txt b/target_firmware/CMakeLists.txt
new file mode 100644 (file)
index 0000000..193399e
--- /dev/null
@@ -0,0 +1,124 @@
+SET(CMAKE_C_COMPILER_WORKS 1)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ath9k_firmware NONE)
+ENABLE_LANGUAGE(C)
+
+ADD_DEFINITIONS(-g -Os -Wunused-label -Wunused-variable -Wunused-value -Wpointer-arith -Wundef -nostdlib -Wundef)
+ADD_DEFINITIONS(
+       -D_RAM_
+       -DBIG_ENDIAN -D_BYTE_ORDER=_BIG_ENDIAN
+       -D__XTENSA__
+       -DFUSION_USB_FW -DRX_SCATTER
+       -DFUSION_USB_ENABLE_TX_STREAM -DFUSION_USB_ENABLE_RX_STREAM
+       -DATH_ENABLE_CABQ
+)
+
+SET(SOURCES
+       magpie_fw_dev/target/init/app_start.c
+       magpie_fw_dev/target/init/init.c
+       magpie_fw_dev/target/init/magpie.c
+       magpie_fw_dev/target/adf/adf_nbuf.c
+       magpie_fw_dev/target/adf/adf_net.c
+       magpie_fw_dev/target/adf/adf_os_defer_pvt.c
+       magpie_fw_dev/target/adf/adf_os_dma.c
+       magpie_fw_dev/target/adf/adf_os_irq_pvt.c
+       magpie_fw_dev/target/adf/adf_os_timer.c
+       magpie_fw_dev/target/buf_pool/buf_pool_static.c
+       magpie_fw_dev/target/cmnos/dbg_api.c
+       magpie_fw_dev/target/cmnos/cmnos_sflash.c
+       wlan/ah.c
+       wlan/ah_osdep.c
+       wlan/ar5416Phy.c
+       wlan/ar5416_hw.c
+       wlan/ar5416_phy.c
+       wlan/ratectrl_11n_ln.c
+       wlan/if_owl.c
+       wlan/if_ath.c
+       wlan/if_ath_pci.c
+       magpie_fw_dev/target/wlan/wlan_pci.c
+       wlan/ieee80211_output.c
+       magpie_fw_dev/target/htc/htc.c
+       magpie_fw_dev/target/wmi/wmi_svc.c
+)
+
+IF(TARGET_K2)
+       SET(SOURCES ${SOURCES}
+               magpie_fw_dev/target/hif/k2_HIF_usb_patch.c
+               magpie_fw_dev/target/hif/k2_fw_usb_api.c
+       )
+       SET(LIBS ${LIBS} hif)
+       ADD_DEFINITIONS(-DPROJECT_K2)
+       SET(PLATFORM_NAME k2)
+       SET(SOURCES ${SOURCES}
+               magpie_fw_dev/target/cmnos/k2_cmnos_clock_patch.c
+               magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c
+       )
+       SET(FIRMWARE_NAME htc_9271.fw)
+ELSEIF(TARGET_MAGPIE)
+       ADD_DEFINITIONS(
+               -DROM_VER_1_1 -D_ROM_1_1_
+               -DPROJECT_MAGPIE
+               -DMAGPIE_MERLIN
+       )
+       SET(SOURCES ${SOURCES}
+               magpie_fw_dev/target/rompatch/cmnos_clock_patch.c
+               magpie_fw_dev/target/rompatch/usb_api_patch.c
+               magpie_fw_dev/target/rompatch/HIF_usb_patch.c
+       )
+       INCLUDE_DIRECTORIES(
+               ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/adf
+               magpie_fw_dev/build/magpie_1_1/inc
+               magpie_fw_dev/build/magpie_1_1/inc/magpie
+       )
+       SET(PLATFORM_NAME magpie)
+       SET(FIRMWARE_NAME htc_7010.fw)
+ELSE()
+       MESSAGE(FATAL_ERROR "Unknown target name")
+ENDIF()
+
+INCLUDE_DIRECTORIES(
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/build/include
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/build/include/xtensa-elf
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/inc
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/inc/${PLATFORM_NAME}
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/inc/${PLATFORM_NAME}/${PLATFORM_NAME}
+       ${CMAKE_SOURCE_DIR}/wlan
+       ${CMAKE_SOURCE_DIR}/wlan/include
+       ${CMAKE_SOURCE_DIR}/wlan/include/${PLATFORM_NAME}
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/wlan
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/cmnos
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/wmi
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/adf
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/buf_pool
+       ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/htc
+)
+
+ADD_LIBRARY(firmware ${SOURCES})
+
+ADD_CUSTOM_COMMAND(
+       OUTPUT fw.elf
+       DEPENDS firmware
+       COMMAND ${CMAKE_C_COMPILER}
+               -nostdlib
+               -Wl,--start-group
+               ${CMAKE_BINARY_DIR}/libfirmware.a
+               -Wl,--end-group
+               -Wl,-T,${CMAKE_SOURCE_DIR}/ram-${PLATFORM_NAME}.ld
+               -Wl,-T,${CMAKE_SOURCE_DIR}/rom-addrs-${PLATFORM_NAME}.ld
+               -o fw.elf
+)
+ADD_CUSTOM_COMMAND(
+       OUTPUT fw.bin
+       DEPENDS fw.elf
+       COMMAND ${CMAKE_OBJCOPY}
+               --change-section-lma .text-0x400000
+               --change-section-vma .text-0x400000
+               -O binary fw.elf fw.bin
+)
+ADD_CUSTOM_COMMAND(
+       OUTPUT ${FIRMWARE_NAME}
+       DEPENDS fw.bin
+       COMMAND ${CMAKE_SOURCE_DIR}/firmware-crc.pl < fw.bin > ${FIRMWARE_NAME}
+)
+ADD_CUSTOM_TARGET(gen-firmware ALL DEPENDS ${FIRMWARE_NAME})
diff --git a/target_firmware/Makefile b/target_firmware/Makefile
new file mode 100644 (file)
index 0000000..d08e3cd
--- /dev/null
@@ -0,0 +1,8 @@
+all:
+       [ -d build ] || ./configure || { rm -rf build; false; }
+       +$(MAKE) -C build/k2
+       +$(MAKE) -C build/magpie
+       cp build/k2/htc_*.fw build/magpie/htc_*.fw .
+
+clean:
+       rm -rf build htc_*.fw
diff --git a/target_firmware/configure b/target_firmware/configure
new file mode 100755 (executable)
index 0000000..38117cd
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh
+TOOLCHAIN=$PWD/../toolchain/inst
+TARGET=xtensa-elf
+PREFIX="$TOOLCHAIN/bin/$TARGET-"
+TOOLCHAIN_FILE=$PWD/build/toolchain.cmake
+
+set -e
+rm -rf build
+mkdir -p build
+
+cat > "$TOOLCHAIN_FILE" <<EOF
+INCLUDE(CMakeForceCompiler)
+
+SET(CMAKE_SYSTEM_PROCESSOR xtensa)
+SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN}/$TARGET)
+SET(CMAKE_STRIP :)
+
+CMAKE_FORCE_C_COMPILER(${PREFIX}gcc GNU)
+EOF
+
+do_cmake() {
+       cmake -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_FILE "$@"
+}
+
+mkdir -p build/k2 build/magpie
+cd build/k2
+do_cmake -DTARGET_K2=ON ../..
+cd -
+cd build/magpie
+do_cmake -DTARGET_MAGPIE=ON ../..
+cd -
diff --git a/target_firmware/firmware-crc.pl b/target_firmware/firmware-crc.pl
new file mode 100755 (executable)
index 0000000..2e8c9d3
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env perl
+use strict;
+my $crc = 0;
+my $bytes;
+my $buf;
+while (($bytes = read(STDIN, $buf, 4)) == 4) {
+       print $buf;
+       my $v = unpack("N", $buf);
+       $crc = $crc ^ $v;
+}
+print pack("N", $crc);
diff --git a/target_firmware/ram-k2.ld b/target_firmware/ram-k2.ld
new file mode 100755 (executable)
index 0000000..9f255df
--- /dev/null
@@ -0,0 +1,261 @@
+
+/* Linker script for Magpie RAM-based applications */
+
+/*
+Currently, ROM code reserves the first 8KB of RAM for its data/bss.
+The next 12KB or RAM is used for RAM software's literals and read-only data.
+After that comes 64KB reserved for RAM software's data and bss.
+Then 92KB of RAM is reserved for text (code).
+The last 8KB of RAM is reserved for ROM patches, customer DataSets,
+and RAM software expansion. (There is also some additional RAM between
+segments that can be used, if needed.)
+  ROM reserved: 0x00500000..0x00501fff
+  Literals:     0x00502000..0x00504fff
+  Data:         0x00505000..0x00514fff
+  Text:         0x00915000..0x0092bfff
+TBD: May want to use a 2-pass link approach in order to
+eliminate fixed boundaries.  Support for physical addressing
+in Tensilica tools would be helpful, but it's not coming
+any time soon.
+*/
+
+/* dram_seg: 0x504000, see target.rom.ld */
+
+/* ***** */
+MEMORY
+{
+ lit_seg :            org = 0x004E5200,   len = 0x1DE00
+ iram_seg :           org = 0x00903000,   len = 0x9B40
+ dram_seg :           org = 0x0050CB40,   len = 0x1800
+
+}
+
+PHDRS
+{
+  lit_phdr PT_LOAD;
+  dram_phdr PT_LOAD;
+  iram_phdr PT_LOAD;
+}
+
+/*  Default entry point:  */
+ENTRY(app_start)
+
+SECTIONS
+{
+  /*
+   * This empty section is used to convince RAM linkage
+   * to share litbase with ROM code.
+   */
+  .lit4 (NOLOAD) :
+  {
+    _rom_literal_start = ABSOLUTE(.);
+    . += 0x1BE00; /* Reserved virtual space for physical mem gap and ROM */
+    _lit4_start = ABSOLUTE(.);
+    _lit4_end = ABSOLUTE(.);
+    _rom_literal_end = ABSOLUTE(.);
+  } >lit_seg :NONE
+
+  .dport0.rodata :
+  {
+    _dport0_rodata_start = ABSOLUTE(.); /* 0x505000 */
+    *(.dport0.rodata)
+    *(.dport.rodata)
+    _dport0_rodata_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dport0.literal :
+  {
+    _dport0_literal_start = ABSOLUTE(.);
+    *(.dport0.literal)
+    *(.dport.literal)
+    _dport0_literal_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dram0.rodata :
+  {
+    _dram0_rodata_start = ABSOLUTE(.);
+    *(.dram0.rodata)
+    *(.dram.rodata)
+    _dram0_rodata_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .rodata :
+  {
+    _rodata_start = ABSOLUTE(.);
+    *(.rodata)
+    *(.rodata.*)
+    *(.gnu.linkonce.r.*)
+    *(.rodata1)
+    __XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
+    *(.xt_except_table)
+    *(.gcc_except_table)
+    *(.gnu.linkonce.e.*)
+    *(.gnu.version_r)
+    . = ALIGN(4);              /* this table MUST be 4-byte aligned */
+    _bss_table_start = ABSOLUTE(.);
+    LONG(_dport0_bss_start)
+    LONG(_dport0_bss_end)
+    LONG(_bss_start)
+    LONG(_bss_end)
+    _bss_table_end = ABSOLUTE(.);
+    _rodata_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .literals :
+  {
+    _literals_start = ABSOLUTE(.);
+    *(*.lit4)
+    *(.gnu.linkonce.lit4.*)
+    _literals_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dram0.literal :
+  {
+    _dram0_literal_start = ABSOLUTE(.);
+    *(.dram0.literal)
+    *(.dram.literal)
+    _dram0_literal_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dport0.data :
+  {
+    _dport0_data_start = ABSOLUTE(.);
+    *(.dport0.data)
+    *(.dport.data)
+    _dport0_data_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .dport0.bss :
+  {
+    . = ALIGN (8);
+    _dport0_bss_start = ABSOLUTE(.);
+    *(.dport0.bss)
+    . = ALIGN (8);
+    _dport0_bss_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .dram0.data :
+  {
+    _dram0_data_start = ABSOLUTE(.);
+    *(.dram0.data)
+    *(.dram.data)
+    _dram0_data_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .data :
+  {
+    _data_start = ABSOLUTE(.);
+    *(.data)
+    *(.data.*)
+    *(.gnu.linkonce.d.*)
+    *(.data1)
+    *(.sdata)
+    *(.sdata.*)
+    *(.gnu.linkonce.s.*)
+    *(.sdata2)
+    *(.sdata2.*)
+    *(.gnu.linkonce.s2.*)
+    *(.jcr)
+    *(.eh_frame)
+    /*  C++ constructor and destructor tables, properly ordered:  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+    /*  C++ exception handlers table:  */
+    __XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
+    *(.xt_except_desc)
+    *(.gnu.linkonce.h.*)
+    __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
+    *(.xt_except_desc_end)
+    *(.dynamic)
+    *(.gnu.version_d)
+    _data_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .bss :
+  {
+    . = ALIGN (8);
+    _bss_start = ABSOLUTE(.);
+    *(.dynsbss)
+    *(.sbss)
+    *(.sbss.*)
+    *(.gnu.linkonce.sb.*)
+    *(.scommon)
+    *(.sbss2)
+    *(.sbss2.*)
+    *(.gnu.linkonce.sb2.*)
+    *(.dynbss)
+    *(.bss)
+    *(.bss.*)
+    *(.gnu.linkonce.b.*)
+    *(COMMON)
+    *(.dram0.bss)
+    . = ALIGN (8);
+    _bss_end = ABSOLUTE(.);
+    _end = ALIGN(0x8);
+    PROVIDE(end = ALIGN(0x8));
+       _fw_image_end = ABSOLUTE(.);
+    /*_stack_sentry = ALIGN(0x8);*/
+  } >dram_seg :dram_phdr
+
+  .text :
+  {
+    _stext = .;
+    _text_start = ABSOLUTE(.);
+    *(.entry.text)
+    *(.init.literal)
+    *(.init)
+    *(.literal .text .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
+    *(.fini.literal)
+    *(.fini)
+    *(.gnu.version)
+    _text_end = ABSOLUTE(.);
+    _etext = .;
+  } >iram_seg :iram_phdr
+
+  .iram0.text :
+  {
+    _iram0_text_start = ABSOLUTE(.);
+    *(.iram0.literal .iram.literal .iram.text.literal .iram0.text .iram.text)
+    _iram0_text_end = ABSOLUTE(.);
+  } >iram_seg :iram_phdr
+
+  .debug  0 :  { *(.debug) }
+  .line  0 :  { *(.line) }
+  .debug_srcinfo  0 :  { *(.debug_srcinfo) }
+  .debug_sfnames  0 :  { *(.debug_sfnames) }
+  .debug_aranges  0 :  { *(.debug_aranges) }
+  .debug_pubnames  0 :  { *(.debug_pubnames) }
+  .debug_info  0 :  { *(.debug_info) }
+  .debug_abbrev  0 :  { *(.debug_abbrev) }
+  .debug_line  0 :  { *(.debug_line) }
+  .debug_frame  0 :  { *(.debug_frame) }
+  .debug_str  0 :  { *(.debug_str) }
+  .debug_loc  0 :  { *(.debug_loc) }
+  .debug_macinfo  0 :  { *(.debug_macinfo) }
+  .debug_weaknames  0 :  { *(.debug_weaknames) }
+  .debug_funcnames  0 :  { *(.debug_funcnames) }
+  .debug_typenames  0 :  { *(.debug_typenames) }
+  .debug_varnames  0 :  { *(.debug_varnames) }
+
+  .xt.insn 0 :
+  {
+    KEEP (*(.xt.insn))
+    KEEP (*(.gnu.linkonce.x.*))
+  }
+  .xt.prop 0 :
+  {
+    KEEP (*(.xt.prop))
+    KEEP (*(.gnu.linkonce.prop.*))
+  }
+  .xt.lit 0 :
+  {
+    KEEP (*(.xt.lit))
+    KEEP (*(.gnu.linkonce.p.*))
+  }
+}
diff --git a/target_firmware/ram-magpie.ld b/target_firmware/ram-magpie.ld
new file mode 100755 (executable)
index 0000000..2cf7f30
--- /dev/null
@@ -0,0 +1,261 @@
+
+/* Linker script for Magpie RAM-based applications */
+
+/*
+Currently, ROM code reserves the first 8KB of RAM for its data/bss.
+The next 12KB or RAM is used for RAM software's literals and read-only data.
+After that comes 64KB reserved for RAM software's data and bss.
+Then 92KB of RAM is reserved for text (code).
+The last 8KB of RAM is reserved for ROM patches, customer DataSets,
+and RAM software expansion. (There is also some additional RAM between
+segments that can be used, if needed.)
+  ROM reserved: 0x00500000..0x00501fff
+  Literals:     0x00502000..0x00504fff
+  Data:         0x00505000..0x00514fff
+  Text:         0x00915000..0x0092bfff
+TBD: May want to use a 2-pass link approach in order to
+eliminate fixed boundaries.  Support for physical addressing
+in Tensilica tools would be helpful, but it's not coming
+any time soon.
+*/
+
+/* dram_seg: 0x504000, see target.rom.ld */
+
+/* ***** */
+MEMORY
+{
+ lit_seg :            org = 0x004E8000,   len = 0x1f600
+ iram_seg :           org = 0x00906000,   len = 0xad00
+ dram_seg :           org = 0x00510d00,   len = 0x6000
+}
+
+PHDRS
+{
+  lit_phdr PT_LOAD;
+  dram_phdr PT_LOAD;
+  iram_phdr PT_LOAD;
+}
+
+/*  Default entry point:  */
+ENTRY(app_start)
+
+SECTIONS
+{
+  /*
+   * This empty section is used to convince RAM linkage
+   * to share litbase with ROM code.
+   */
+  .lit4 (NOLOAD) :
+  {
+    _rom_literal_start = ABSOLUTE(.);
+    . += 0x19000; /* Reserved virtual space for physical mem gap and ROM */
+    _lit4_start = ABSOLUTE(.);
+    _lit4_end = ABSOLUTE(.);
+    _rom_literal_end = ABSOLUTE(.);
+  } >lit_seg :NONE
+
+  .dport0.rodata :
+  {
+    _dport0_rodata_start = ABSOLUTE(.); /* 0x505000 */
+    *(.dport0.rodata)
+    *(.dport.rodata)
+    _dport0_rodata_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dport0.literal :
+  {
+    _dport0_literal_start = ABSOLUTE(.);
+    *(.dport0.literal)
+    *(.dport.literal)
+    _dport0_literal_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dram0.rodata :
+  {
+    _dram0_rodata_start = ABSOLUTE(.);
+    *(.dram0.rodata)
+    *(.dram.rodata)
+    _dram0_rodata_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .rodata :
+  {
+    _rodata_start = ABSOLUTE(.);
+    *(.rodata)
+    *(.rodata.*)
+    *(.gnu.linkonce.r.*)
+    *(.rodata1)
+    __XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
+    *(.xt_except_table)
+    *(.gcc_except_table)
+    *(.gnu.linkonce.e.*)
+    *(.gnu.version_r)
+    . = ALIGN(4);              /* this table MUST be 4-byte aligned */
+    _bss_table_start = ABSOLUTE(.);
+    LONG(_dport0_bss_start)
+    LONG(_dport0_bss_end)
+    LONG(_bss_start)
+    LONG(_bss_end)
+    _bss_table_end = ABSOLUTE(.);
+    _rodata_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .literals :
+  {
+    _literals_start = ABSOLUTE(.);
+    *(*.lit4)
+    *(.gnu.linkonce.lit4.*)
+    _literals_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dram0.literal :
+  {
+    _dram0_literal_start = ABSOLUTE(.);
+    *(.dram0.literal)
+    *(.dram.literal)
+    _dram0_literal_end = ABSOLUTE(.);
+  } >lit_seg :lit_phdr
+
+  .dport0.data :
+  {
+    _dport0_data_start = ABSOLUTE(.);
+    *(.dport0.data)
+    *(.dport.data)
+    _dport0_data_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .dport0.bss :
+  {
+    . = ALIGN (8);
+    _dport0_bss_start = ABSOLUTE(.);
+    *(.dport0.bss)
+    . = ALIGN (8);
+    _dport0_bss_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .dram0.data :
+  {
+    _dram0_data_start = ABSOLUTE(.);
+    *(.dram0.data)
+    *(.dram.data)
+    _dram0_data_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .data :
+  {
+    _data_start = ABSOLUTE(.);
+    *(.data)
+    *(.data.*)
+    *(.gnu.linkonce.d.*)
+    *(.data1)
+    *(.sdata)
+    *(.sdata.*)
+    *(.gnu.linkonce.s.*)
+    *(.sdata2)
+    *(.sdata2.*)
+    *(.gnu.linkonce.s2.*)
+    *(.jcr)
+    *(.eh_frame)
+    /*  C++ constructor and destructor tables, properly ordered:  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+    /*  C++ exception handlers table:  */
+    __XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
+    *(.xt_except_desc)
+    *(.gnu.linkonce.h.*)
+    __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
+    *(.xt_except_desc_end)
+    *(.dynamic)
+    *(.gnu.version_d)
+    _data_end = ABSOLUTE(.);
+  } >dram_seg :dram_phdr
+
+  .bss :
+  {
+    . = ALIGN (8);
+    _bss_start = ABSOLUTE(.);
+    *(.dynsbss)
+    *(.sbss)
+    *(.sbss.*)
+    *(.gnu.linkonce.sb.*)
+    *(.scommon)
+    *(.sbss2)
+    *(.sbss2.*)
+    *(.gnu.linkonce.sb2.*)
+    *(.dynbss)
+    *(.bss)
+    *(.bss.*)
+    *(.gnu.linkonce.b.*)
+    *(COMMON)
+    *(.dram0.bss)
+    . = ALIGN (8);
+    _bss_end = ABSOLUTE(.);
+    _end = ALIGN(0x8);
+    PROVIDE(end = ALIGN(0x8));
+       _fw_image_end = ABSOLUTE(.);
+    /*_stack_sentry = ALIGN(0x8);*/
+  } >dram_seg :dram_phdr
+
+  .text :
+  {
+    _stext = .;
+    _text_start = ABSOLUTE(.);
+    *(.entry.text)
+    *(.init.literal)
+    *(.init)
+    *(.literal .text .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
+    *(.fini.literal)
+    *(.fini)
+    *(.gnu.version)
+    _text_end = ABSOLUTE(.);
+    _etext = .;
+  } >iram_seg :iram_phdr
+
+  .iram0.text :
+  {
+    _iram0_text_start = ABSOLUTE(.);
+    *(.iram0.literal .iram.literal .iram.text.literal .iram0.text .iram.text)
+    _iram0_text_end = ABSOLUTE(.);
+  } >iram_seg :iram_phdr
+
+  .debug  0 :  { *(.debug) }
+  .line  0 :  { *(.line) }
+  .debug_srcinfo  0 :  { *(.debug_srcinfo) }
+  .debug_sfnames  0 :  { *(.debug_sfnames) }
+  .debug_aranges  0 :  { *(.debug_aranges) }
+  .debug_pubnames  0 :  { *(.debug_pubnames) }
+  .debug_info  0 :  { *(.debug_info) }
+  .debug_abbrev  0 :  { *(.debug_abbrev) }
+  .debug_line  0 :  { *(.debug_line) }
+  .debug_frame  0 :  { *(.debug_frame) }
+  .debug_str  0 :  { *(.debug_str) }
+  .debug_loc  0 :  { *(.debug_loc) }
+  .debug_macinfo  0 :  { *(.debug_macinfo) }
+  .debug_weaknames  0 :  { *(.debug_weaknames) }
+  .debug_funcnames  0 :  { *(.debug_funcnames) }
+  .debug_typenames  0 :  { *(.debug_typenames) }
+  .debug_varnames  0 :  { *(.debug_varnames) }
+
+  .xt.insn 0 :
+  {
+    KEEP (*(.xt.insn))
+    KEEP (*(.gnu.linkonce.x.*))
+  }
+  .xt.prop 0 :
+  {
+    KEEP (*(.xt.prop))
+    KEEP (*(.gnu.linkonce.prop.*))
+  }
+  .xt.lit 0 :
+  {
+    KEEP (*(.xt.lit))
+    KEEP (*(.gnu.linkonce.p.*))
+  }
+}
diff --git a/target_firmware/rom-addrs-k2.ld b/target_firmware/rom-addrs-k2.ld
new file mode 100755 (executable)
index 0000000..936d4d4
--- /dev/null
@@ -0,0 +1,69 @@
+PROVIDE ( _indir_tbl = 0x00500000 );
+PROVIDE (athos_indirection_table_install = 0x008e1548);
+PROVIDE ( memcpy = 0x008e4eb8 );
+PROVIDE ( memset = 0x008e519c );
+PROVIDE ( __divsi3 = 0x008e4cec );
+PROVIDE ( __udivsi3 = 0x008e4da0 );
+PROVIDE ( __umodsi3 = 0x008e4df0 );
+PROVIDE ( __modsi3 = 0x008e4d54 );
+PROVIDE ( athos_interrupt_init = 0x008e1600 );
+PROVIDE ( athos_unblock_all_intrlvl = 0x008e1460 );
+PROVIDE ( athos_interrupt_handler = 0x008e15f0 );
+PROVIDE ( _xtos_set_interrupt_handler = 0x008e1230 );
+PROVIDE ( hif_module_install = 0x008e2bd4 );
+PROVIDE ( strcmp = 0x008e48b4 );
+PROVIDE ( strlen = 0x008e4a64 );
+PROVIDE ( strcpy = 0x008e49cc );
+PROVIDE ( strncpy = 0x008e4b90 );
+PROVIDE ( Xthal_num_ccompare = 0x004e5869 );
+PROVIDE ( cticks = 0x0050088c );
+PROVIDE ( UsbDeviceDescriptor = 0x004e0100 );
+PROVIDE ( String00Descriptor = 0x004e01a0 );
+PROVIDE ( String10Descriptor = 0x004e01b0 );
+PROVIDE ( String20Descriptor = 0x004e01c0 );
+PROVIDE ( String30Descriptor = 0x004e01e0 );
+PROVIDE ( HIFusb_DescTraceDump = 0x008e2c18 );
+PROVIDE ( xthal_get_intenable = 0x008e4cd4 );
+PROVIDE ( xthal_set_intenable = 0x008e4ce4 );
+PROVIDE ( xthal_get_interrupt = 0x008e4cdc );
+PROVIDE ( xthal_get_ccompare = 0x008e4cc4 );
+PROVIDE ( xthal_set_ccompare = 0x008e4cb4 );
+PROVIDE ( xthal_get_ccount = 0x008e4cac );
+PROVIDE ( Xthal_num_ccompare = 0x004e5869 );
+PROVIDE ( zfDmaReclaimPacket = 0x008e4568 );
+PROVIDE ( zfDmaPutPacket = 0x008e45fc );
+PROVIDE ( zfDmaGetPacket = 0x008e452c );
+PROVIDE ( handle_hp_rx_complete_isr = 0x008e2b18 );
+PROVIDE ( handle_mp_rx_complete_isr = 0x008e2b38 );
+PROVIDE ( handle_tx_complete_isr = 0x008e2adc );
+PROVIDE ( u16TxRxCounter = 0x005009e4 );
+PROVIDE ( pu8DescriptorEX = 0x005009e0 );
+PROVIDE ( fwCheckSum = 0x005009dc );
+PROVIDE ( eUsbCxCommand = 0x005009f0 );
+PROVIDE ( ControlCmd = 0x005009c0 );
+PROVIDE ( eUsbCxFinishAction = 0x005009ec );
+PROVIDE ( UsbChirpFinish = 0x005009f4 );
+PROVIDE ( cmnos_allocram_debug = 0x008e1ae8 );
+PROVIDE ( g_hifUSBCtx = 0x00500978 );
+PROVIDE ( _HIFusb_return_recv_buf = 0x008e2a74 );
+PROVIDE ( vdesc_module_install = 0x008e413c );
+PROVIDE ( vbuf_module_install = 0x008e408c );
+PROVIDE ( mUsbFIFOConfig = 0x008e3ca4 );
+PROVIDE ( mUsbEPMxPtSzHigh = 0x008e3cc4 );
+PROVIDE ( mUsbEPMxPtSzLow = 0x008e3cec );
+PROVIDE ( mUsbEPinHighBandSet = 0x008e3d10 );
+PROVIDE ( mUsbFIFOConfig = 0x008e3ca4 );
+PROVIDE ( mUsbFIFOMap = 0x008e3c84 );
+PROVIDE ( mUsbEPMap = 0x008e3c68 );
+PROVIDE ( usbFifoConf = 0x005009cc );
+PROVIDE ( u8UsbInterfaceValue = 0x005009f8 );
+PROVIDE ( u8UsbConfigValue = 0x005009f6 );
+PROVIDE ( u8UsbInterfaceAlternateSetting = 0x005009fa );
+PROVIDE ( ControlCmd = 0x005009c0 );
+PROVIDE ( vUsbFIFO_EPxCfg_HS = 0x008e3d5c );
+PROVIDE ( vUsbClrEPx = 0x008e2d00 );
+PROVIDE ( bSet_configuration = 0x008e2f7c );
+PROVIDE ( _HIFusb_isr_handler = 0x008e2b58 );
+PROVIDE ( bGet_descriptor = 0x008e2ec4 );
+PROVIDE ( u8ConfigDescriptorEX = 0x005009e8 );
+PROVIDE ( bStandardCommand = 0x008e328c );
diff --git a/target_firmware/rom-addrs-magpie.ld b/target_firmware/rom-addrs-magpie.ld
new file mode 100755 (executable)
index 0000000..a54a98e
--- /dev/null
@@ -0,0 +1,74 @@
+PROVIDE ( _indir_tbl = 0x00500000 );
+PROVIDE ( memcpy = 0x008e6b64 );
+PROVIDE ( memset = 0x008e6e48 );
+PROVIDE ( __divsi3 = 0x008e6998 );
+PROVIDE ( __udivsi3 = 0x008e6a4c );
+PROVIDE ( __umodsi3 = 0x008e6a9c );
+PROVIDE ( __modsi3 = 0x008e6a00 );
+PROVIDE ( athos_interrupt_init = 0x008e1614 );
+PROVIDE ( athos_unblock_all_intrlvl = 0x008e1460 );
+PROVIDE ( athos_interrupt_handler = 0x008e1604 );
+PROVIDE ( _xtos_set_interrupt_handler = 0x008e1230 );
+PROVIDE ( generic_hif_module_install = 0x008e1548 );
+PROVIDE ( htc_module_install = 0x008e54a8 );
+PROVIDE ( buf_pool_module_install = 0x008e6264 );
+PROVIDE ( vbuf_module_install = 0x008e4f60 );
+PROVIDE ( vdesc_module_install = 0x008e5010 );
+PROVIDE ( strcmp = 0x008e6560 );
+PROVIDE ( strlen = 0x008e6710 );
+PROVIDE ( strcpy = 0x008e6678 );
+PROVIDE ( strncpy = 0x008e683c );
+PROVIDE ( Xthal_num_ccompare = 0x004e87f9 );
+PROVIDE ( cticks = 0x0050095c );
+PROVIDE ( UsbDeviceDescriptor = 0x004e0100 );
+PROVIDE ( String00Descriptor = 0x004e01a0 );
+PROVIDE ( String10Descriptor = 0x004e01b0 );
+PROVIDE ( String20Descriptor = 0x004e01c0 );
+PROVIDE ( String30Descriptor = 0x004e01e0 );
+PROVIDE ( HIFusb_DescTraceDump = 0x008e37e8 );
+PROVIDE ( xthal_get_intenable = 0x008e6980 );
+PROVIDE ( xthal_set_intenable = 0x008e6990 );
+PROVIDE ( xthal_get_interrupt = 0x008e6988 );
+PROVIDE ( xthal_get_ccompare = 0x008e6970 );
+PROVIDE ( xthal_set_ccompare = 0x008e6960 );
+PROVIDE ( xthal_get_ccount = 0x008e6958 );
+PROVIDE ( Xthal_num_ccompare = 0x004e87f9 );
+PROVIDE ( zfDmaReclaimPacket = 0x008e5d2c );
+PROVIDE ( zfDmaPutPacket = 0x008e5dc0 );
+PROVIDE ( zfDmaGetPacket = 0x008e5cf0 );
+PROVIDE ( fwd_init = 0x008e5e78 );
+PROVIDE ( usbFifoConf = 0x00500aa4 );
+PROVIDE ( _HIFusb_isr_handler = 0x008e36e4 );
+PROVIDE ( mUsbFIFOConfig = 0x008e4934 );
+PROVIDE ( mUsbEPMxPtSzHigh = 0x008e4954 );
+PROVIDE ( mUsbEPMxPtSzLow = 0x008e497c );
+PROVIDE ( mUsbEPinHighBandSet = 0x008e49a0 );
+PROVIDE ( mUsbFIFOConfig = 0x008e4934 );
+PROVIDE ( mUsbFIFOMap = 0x008e4914 );
+PROVIDE ( mUsbEPMap = 0x008e48f8 );
+PROVIDE ( u8UsbInterfaceValue = 0x00500ad0 );
+PROVIDE ( u8UsbConfigValue = 0x00500ace );
+PROVIDE ( u8UsbInterfaceAlternateSetting = 0x00500ad2 );
+PROVIDE ( ControlCmd = 0x00500a98 );
+PROVIDE ( vUsbFIFO_EPxCfg_HS = 0x008e49ec );
+PROVIDE ( vUsbClrEPx = 0x008e38d0 );
+PROVIDE ( bSet_configuration = 0x008e3b54 );
+PROVIDE ( eUsbCxFinishAction = 0x00500ac4 );
+PROVIDE ( pci_sc = 0x00500708 );
+PROVIDE ( __pci_reap_recv = 0x008e31e8 );
+PROVIDE ( __pci_reap_xmitted = 0x008e31bc );
+PROVIDE ( _HIFusb_start = 0x008e34a0 );
+PROVIDE ( g_hifUSBCtx = 0x00500a54 );
+PROVIDE ( _HIFusb_return_recv_buf = 0x008e367c );
+PROVIDE ( athos_indirection_table_install = 0x008e1574 );
+PROVIDE ( u8ConfigDescriptorEX = 0x00500ac0 );
+PROVIDE ( bStandardCommand = 0x008e3e64 );
+PROVIDE ( u16TxRxCounter = 0x00500abc );
+PROVIDE ( pu8DescriptorEX = 0x00500ab8 );
+PROVIDE ( bGet_descriptor = 0x008e3a9c );
+PROVIDE ( _xtos_set_exception_handler = 0x008e6348 );
+PROVIDE (HTCMsgRecvHandler = 0x008e581c);
+PROVIDE (HTCControlSvcProcessMsg = 0x008e56f4);
+PROVIDE (HTCFreeMsgBuffer = 0x008e54ec);
+PROVIDE ( u8UsbDeviceDescriptor = 0x00500ad8 );
+