Index of /

[ICO]NameLast modifiedSizeDescription

[TXT]README.html20-May-2003 21:29 4.9K
[DIR]firmware-source/20-May-2003 19:04 -
[TXT]firmware.patch17-May-2001 18:45 1.0K
[DIR]tools/20-May-2003 20:57 -

             Linux tools for Alteon Tigon firmware development

                           Last updated 20/May/2003
                     Jamie Lokier, <>

For people developing Alteon firmware on Linux.
Currently located at:


Note that the latter URL has a more recent version of the genfw
script, and it also has copies of the original Alteon firmware source.

Here you will find tools to build Alteon AceNIC firmware on Linux.  You
used to be able to get the firmware source itself from Alteon, but they
stopped giving it out so the copies I obtained are given here.  Look at
the source files yourself to understand any licensing restrictions on
their use.  Alteon's license may be summarised like this: you may share
and develop the firmware, but it is only for use with Alteon NIC

The tools here are built and packaged for Red Hat 6.2.  This is probably
a bit old now (2003), but the sources and patches are provided and it's
easy enough to rebuild the tools in another environment.

GNU C, GNU C++, GNU Binutils and a replacement for genfw are included.

These are similar to the Alteon-supplied tools that run on Solaris.
However there are a few important differences from the supplied Solaris

  - GCC 2.95.2 is used instead of GCC 2.7.2.
    This newer compiler seems to generate faster code.
    However, it may miscompile the "pri;joff" event loop in the
    standard Alteon firmware.  Beware!  (We fixed that for our
    application by changing the event loop code).

  - If you are compiling the standard Alteon firmware with this newer
    GCC, you must apply the patch in "firmware.patch".

  - GNU Binutils is used instead of Binutils 2.6.

  - The target name is now "mips-alteon-elf", not "mips-sgi-irix5.3".
    This means all the tool names are written e.g. "mips-alteon-elf-gcc".

  - I've rewritten genfw in Perl.  It simply calls readelf and objcopy
    from Binutils to get the data.  It has a some new features but it's
    compatible with the Alteon genfw.
  - One important new feature of genfw is that it will, by default,
    align section sizes to a multiple of 4 bytes.  This is required
    because the newer tools sometimes pack data more tightly than the
    old tools did, and if the section sizes are not aligned in the
    output from genfw, some device drivers crash or fail to load the
    firmware properly.

I've added some nice extra features:

  - The compiler defaults to -mips2 -mcpu=r6000 -G 0, which is
    appropriate for the Tigon.

  - Software integer multiplication and division are supported.

    There are some new GCC flags: -msoft-mul, -msoft-div options,
    enabled by default.

    For multiplication or division by a constant, GCC will generate
    an optimised sequence of shifts and adds (and subtracts and xors)
    which is nice.  Where neither operands are constant, a library call
    is used.  The functions are included in libgcc.a.

    (In contrast the Alteon-supplied GCC sometimes simply fails at the
    assembler stage if you use a multiply or divide).

  - The rest of libgcc.a is built -- long long support, profiling etc.,
    even exception handling if you want.

  - C++ is included if you want to use that.

  - Software floating point is enabled, and the accompanying floating
    point library is included in libgcc.a.  This is slow, but
    occasionally useful.

  - The assembler accepts li.d and li.s, for floating point constants.
    It still rejects all MIPS floating point instructions.

  - The assembler accepts some other macros (the ones for unaligned
    loads and stores I think).  The Tigon-2 documentation says it
    provides these instructions, so we may as well support them in the

  - The assembler has a flag -APIC (inherited from the Alteon source
    patches but not supplied with the Solaris tools).  GCC has a flag
    -mAPIC which passes -APIC to the assembler.  (Though, -Wa,-APIC has
    the same effect).

  - Using mips-alteon-elf-objcopy -O binary, you can make a raw binary
    image of the firmware instead of using genfw and compiling the
    header file.

These tools aren't really supported; they're a snapshot of what I'm
using day to day.  RPMs (binary packages) for Red Hat 6.2, SRPMS, and
the patches to standard sources are provided and freely distributable
under the same terms as the GNU tools.

Note that the RPMs require Glibc 2.1.  They can be installed with Glibc
2.0 using rpm --force but the tools will crash when run, so don't try.
If you're using a Linux based on Glibc 2.0 or Libc 5 (which is older),
it should work to rebuild the packages from the SRPMS or directly from

-- Jamie