Merge pull request #22 from nbd168/master
authorAdrian Chadd <adrian.chadd@gmail.com>
Fri, 26 Apr 2013 14:53:07 +0000 (07:53 -0700)
committerAdrian Chadd <adrian.chadd@gmail.com>
Fri, 26 Apr 2013 14:53:07 +0000 (07:53 -0700)
Rewrite the firmware and toolchain build system

12 files changed:
.gitignore [new file with mode: 0644]
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]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..5801219
--- /dev/null
@@ -0,0 +1 @@
+/toolchain
index 81f450073239d82300dcba766e16772b92ab5eb4..385433f3b1d97f658620b456c9ca72d36def5177 100644 (file)
--- a/Makefile
+++ b/Makefile
 GMP_VER=5.0.5
 GMP_URL=http://ftp.gnu.org/gnu/gmp/gmp-$(GMP_VER).tar.bz2
 GMP_TAR=gmp-$(GMP_VER).tar.bz2
+GMP_DIR=gmp-$(GMP_VER)
 
 MPFR_VER=3.1.1
 MPFR_URL=http://ftp.gnu.org/gnu/mpfr/mpfr-$(MPFR_VER).tar.bz2
 MPFR_TAR=mpfr-$(MPFR_VER).tar.bz2
+MPFR_DIR=mpfr-$(MPFR_VER)
 
 MPC_VER=1.0.1
 MPC_URL=http://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VER).tar.gz
 MPC_TAR=mpc-$(MPC_VER).tar.gz
+MPC_DIR=mpc-$(MPC_VER)
 
 BINUTILS_VER=2.23.1
 BINUTILS_URL=http://ftp.gnu.org/gnu/binutils/binutils-$(BINUTILS_VER).tar.bz2
 BINUTILS_TAR=binutils-$(BINUTILS_VER).tar.bz2
+BINUTILS_DIR=binutils-$(BINUTILS_VER)
+BINUTILS_PATCHES=local/patches/binutils.patch
 
 GCC_VER=4.7.2
 GCC_URL=http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VER)/gcc-$(GCC_VER).tar.bz2
 GCC_TAR=gcc-$(GCC_VER).tar.bz2
+GCC_DIR=gcc-$(GCC_VER)
+GCC_PATCHES=local/patches/gcc.patch
 
 BASEDIR=$(shell pwd)
 TOOLCHAIN_DIR=$(BASEDIR)/toolchain
 TARGET=xtensa-elf
+DL_DIR=$(TOOLCHAIN_DIR)/dl
+BUILD_DIR=$(TOOLCHAIN_DIR)/build
 
 all: toolchain
 
-gmp-$(GMP_VER):
-       wget -N -P $(TOOLCHAIN_DIR)/dl $(GMP_URL)
-       tar -C $(TOOLCHAIN_DIR)/dl -xjf $(TOOLCHAIN_DIR)/dl/$(GMP_TAR)
-
-gmp: gmp-$(GMP_VER)
-       mkdir -p $(TOOLCHAIN_DIR)/build/gmp
-       cd $(TOOLCHAIN_DIR)/build/gmp; \
-       $(TOOLCHAIN_DIR)/dl/$</configure --disable-shared --enable-static --prefix=$(TOOLCHAIN_DIR)/inst; \
-       $(MAKE); $(MAKE) check;$(MAKE) install
-
-mpfr-$(MPFR_VER):
-       wget -N -P $(TOOLCHAIN_DIR)/dl $(MPFR_URL)
-       tar -C $(TOOLCHAIN_DIR)/dl -xjf $(TOOLCHAIN_DIR)/dl/$(MPFR_TAR)
-
-mpfr: mpfr-$(MPFR_VER)
-       mkdir -p $(TOOLCHAIN_DIR)/build/mpfr
-       cd $(TOOLCHAIN_DIR)/build/mpfr; \
-       $(TOOLCHAIN_DIR)/dl/$</configure --disable-shared --enable-static --with-gmp=$(TOOLCHAIN_DIR)/inst \
-       --prefix=$(TOOLCHAIN_DIR)/inst; \
-       $(MAKE); $(MAKE) check;$(MAKE) install
-
-mpc-$(MPC_VER):
-       wget -N -P $(TOOLCHAIN_DIR)/dl $(MPC_URL)
-       tar -C $(TOOLCHAIN_DIR)/dl -zxvf $(TOOLCHAIN_DIR)/dl/$(MPC_TAR)
-
-mpc: mpc-$(MPC_VER)
-       mkdir -p $(TOOLCHAIN_DIR)/build/mpfc
-       cd $(TOOLCHAIN_DIR)/build/mpfc; \
-       $(TOOLCHAIN_DIR)/dl/$</configure --disable-shared --enable-static --with-gmp=$(TOOLCHAIN_DIR)/inst \
-       --with-mpfr=$(TOOLCHAIN_DIR)/inst --prefix=$(TOOLCHAIN_DIR)/inst; \
-       $(MAKE); $(MAKE) check;$(MAKE) install
-
-binutils-$(BINUTILS_VER):
-       wget -N -P $(TOOLCHAIN_DIR)/dl $(BINUTILS_URL)
-       tar -C $(TOOLCHAIN_DIR)/dl -xjf $(TOOLCHAIN_DIR)/dl/$(BINUTILS_TAR)
-       patch -d $(TOOLCHAIN_DIR)/dl/$@ -p1 < local/patches/binutils.patch
-
-binutils: binutils-$(BINUTILS_VER)
-       mkdir -p $(TOOLCHAIN_DIR)/build/binutils
-       cd $(TOOLCHAIN_DIR)/build/binutils; \
-       $(TOOLCHAIN_DIR)/dl/$</configure --target=$(TARGET) --prefix=$(TOOLCHAIN_DIR)/inst; \
-       $(MAKE) all; $(MAKE) install
-
-gcc-$(GCC_VER):
-       wget -N -P $(TOOLCHAIN_DIR)/dl $(GCC_URL)
-       tar -C $(TOOLCHAIN_DIR)/dl -xjf $(TOOLCHAIN_DIR)/dl/$(GCC_TAR)
-       patch -d $(TOOLCHAIN_DIR)/dl/$@ -p1 < local/patches/gcc.patch
-
-gcc: gcc-$(GCC_VER)
-       mkdir -p $(TOOLCHAIN_DIR)/build/gcc
-       cd $(TOOLCHAIN_DIR)/build/gcc; \
-       export PATH=$(TOOLCHAIN_DIR)/inst/bin:$(PATH); \
-       $(TOOLCHAIN_DIR)/dl/$</configure --target=$(TARGET) --prefix=$(TOOLCHAIN_DIR)/inst \
-       --enable-languages=c --disable-libssp --disable-shared --disable-libquadmath \
-       --with-gmp=$(TOOLCHAIN_DIR)/inst \
-       --with-mpfr=$(TOOLCHAIN_DIR)/inst \
-       --with-mpc=$(TOOLCHAIN_DIR)/inst --with-newlib; \
-       $(MAKE) all; $(MAKE) install
-
-toolchain: gmp mpfr mpc binutils gcc
+# 1: package name
+# 2: configure arguments
+# 3: make command
+define Common/Compile
+       mkdir -p $(BUILD_DIR)/$($(1)_DIR)
+       +cd $(BUILD_DIR)/$($(1)_DIR) && \
+       $(DL_DIR)/$($(1)_DIR)/configure \
+               --prefix=$(TOOLCHAIN_DIR)/inst \
+               $(2) && \
+       $(3)
+endef
+
+define GMP/Compile
+       $(call Common/Compile,GMP, \
+               --disable-shared --enable-static, \
+               $(MAKE) && $(MAKE) check && $(MAKE) -j1 install \
+       )
+endef
+
+define MPFR/Compile
+       $(call Common/Compile,MPFR, \
+               --disable-shared --enable-static \
+               --with-gmp=$(TOOLCHAIN_DIR)/inst, \
+               $(MAKE) && $(MAKE) check && $(MAKE) -j1 install \
+       )
+endef
+
+define MPC/Compile
+       $(call Common/Compile,MPC, \
+               --disable-shared --enable-static \
+               --with-gmp=$(TOOLCHAIN_DIR)/inst \
+               --with-mpfr=$(TOOLCHAIN_DIR)/inst, \
+               $(MAKE) && $(MAKE) check && $(MAKE) -j1 install \
+       )
+endef
+
+define BINUTILS/Compile
+       $(call Common/Compile,BINUTILS, \
+               --target=$(TARGET), \
+               $(MAKE) && $(MAKE) -j1 install \
+       )
+endef
+
+define GCC/Compile
+       $(call Common/Compile,GCC, \
+               --target=$(TARGET) \
+               --enable-languages=c \
+               --disable-libssp \
+               --disable-shared \
+               --disable-libquadmath \
+               --with-gmp=$(TOOLCHAIN_DIR)/inst \
+               --with-mpfr=$(TOOLCHAIN_DIR)/inst \
+               --with-mpc=$(TOOLCHAIN_DIR)/inst \
+               --with-newlib, \
+               $(MAKE) && $(MAKE) -j1 install \
+       )
+endef
+
+# 1: package name
+# 2: dependencies on other packages
+define Build
+$(DL_DIR)/$($(1)_TAR):
+       mkdir -p $(DL_DIR)
+       wget -N -P $(DL_DIR) $($(1)_URL)
+
+$(DL_DIR)/$($(1)_DIR)/.prepared: $(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))
+       touch $$@
+
+$(1)_DEPENDS = $(foreach pkg,$(2),$(BUILD_DIR)/$($(pkg)_DIR)/.built)
+$(BUILD_DIR)/$($(1)_DIR)/.built: $(DL_DIR)/$($(1)_DIR)/.prepared $$($(1)_DEPENDS)
+       mkdir -p $(BUILD_DIR)/$($(1)_DIR)
+       $($(1)/Compile)
+       touch $$@
+
+clean-dl-$(1):
+       rm -rf $(DL_DIR)/$($(1)_DIR)
+
+toolchain: $(BUILD_DIR)/$($(1)_DIR)/.built
+clean-dl: clean-dl-$(1)
+download: $(DL_DIR)/$($(1)_DIR)/.prepared
+
+endef
+
+all: toolchain firmware
+toolchain-clean:
+       rm -rf $(TOOLCHAIN_DIR)/build $(TOOLCHAIN_DIR)/inst
+clean-dl:
+download:
+toolchain:
 
 clean:
-       rm -rf $(TOOLCHAIN_DIR)/build $(TOOLCHAIN_DIR)/inst
+       $(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))
+$(eval $(call Build,MPC,GMP MPFR))
+$(eval $(call Build,BINUTILS))
+$(eval $(call Build,GCC,MPC MPFR))
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 );
+