Hello community,

here is the log from the commit of package elilo for openSUSE:Factory checked 
in at 2013-10-29 09:23:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/elilo (Old)
 and      /work/SRC/openSUSE:Factory/.elilo.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "elilo"

Changes:
--------
--- /work/SRC/openSUSE:Factory/elilo/elilo.changes      2011-09-23 
01:56:23.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.elilo.new/elilo.changes 2013-10-29 
09:23:28.000000000 +0100
@@ -1,0 +2,139 @@
+Fri Oct 25 13:37:55 UTC 2013 - r...@suse.de
+
+- elilo.efi
+  * update to elilo-3.16 to fix OBS download check.
+    Essentially "white-space" changes, plus bumping version number,
+    minus Debian idiosyncrasies.
+- elilo.spec
+  * Remove date string from 'eliloalt'.
+  * Avoid duplication of 'elilo.txt'.
+- elilo.pl
+  * Support for 'UUID=' and 'LABEL=' to specify root file-system.
+
+-------------------------------------------------------------------
+Thu Oct 24 17:18:48 UTC 2013 - r...@suse.de
+
+- elilo.spec
+  * Add perl modules to 'PreReq'.  (bnc#842183)
+- Update openSUSE to elilo-3.14 from SLE11.
+
+-------------------------------------------------------------------
+Fri Aug 16 12:01:42 UTC 2013 - r...@suse.de
+
+- elilo.pl
+  * SecureBoot: cope with separate '/boot' file-system.  (bnc#825932)
+  * SecureBoot: improve detection of file-system UUIDs.  (bnc#828835)
+  * Correctly handle installation to 'BOOT'.
+
+-------------------------------------------------------------------
+Wed May 29 15:10:40 UTC 2013 - r...@suse.com
+
+- elilo.pl
+  * Always delete old EBM entries to fix ordering.  (bnc#819900)
+  * Prevent XEN 'default' in 'elilo.conf'.  (bnc#819900c5)
+  * Add man-page section about '--refresh-EBM' failure. (bnc#821109)
+
+-------------------------------------------------------------------
+Wed May  8 13:30:02 UTC 2013 - r...@suse.com
+
+- elilo.pl
+  * SecureBoot: create only one Boot Manager entry.  (bnc#818961)
+
+-------------------------------------------------------------------
+Fri Apr 19 13:28:08 UTC 2013 - r...@suse.com
+
+- elilo.efi
+  * Clear console on startup.  (bnc#812799)
+  * Avoid crash caused by EFI memory map changes.  (bnc#800035)
+- elilo.pl
+  * Work around chainloading issue with XEN.  (bnc#812109)
+
+-------------------------------------------------------------------
+Wed Mar 27 21:40:29 UTC 2013 - r...@suse.com
+
+- elilo.pl
+  * Fix handling of missing 'default' again.
+
+-------------------------------------------------------------------
+Wed Mar 27 20:42:50 UTC 2013 - r...@suse.com
+
+- elilo.pl
+  * Implement chainloading of XEN for SecureBoot. (bnc#809702)
+  * Maintain 'default' in SecureBoot config. (bnc#811608c28)
+  * Handle failure of 'efibootmgr'.  (bnc#809702c10)
+  * Improve verbose messages to be less alarming.
+
+-------------------------------------------------------------------
+Fri Mar  8 14:06:28 UTC 2013 - r...@suse.com
+
+- elilo.efi
+  * Force default configs at the end of the network search list.
+    (bnc#789137)
+- elilo.pl
+  * Disable use of 'shim'-loader options.  (bnc#798043)
+  * Fix solitary 'secure-boot' for real.
+
+-------------------------------------------------------------------
+Tue Feb 12 17:00:32 UTC 2013 - r...@suse.com
+
+- elilo.pl
+  * Revert work-around for 'shim'-loader option parsing. (bnc#798043)
+  * Treat 'secure-boot' identical to 'secure-boot = on'.
+  * Fix 'SecureBoot' sysfs variable reading.
+
+-------------------------------------------------------------------
+Fri Feb  8 18:42:49 UTC 2013 - r...@suse.com
+
+- elilo.efi
+  * Now really introduce 'block-size'. (bnc#681242)
+  * Clarify warning message on GOP failure.
+- elilo.pl
+  * Synchronize check for "Secure Boot" with YaST.
+
+-------------------------------------------------------------------
+Fri Jan 18 15:00:44 UTC 2013 - r...@suse.com
+
+- elilo.efi
+  * Make automatic appending of 'add_efi_memmap' to kernel command
+    line default, and introduce config-file option (add-efi-memmap)
+    to control this (auto|false).  (fate#314210, bnc#772245)
+  * Bring network search list more in line with 'PXELINUX'. (bnc#789137)
+  * Introduce 'block-size' as global option in 'elilo.conf'. (bnc#681242)
+- elilo.pl
+  * Work around limitations in 'shim'-loader option parsing. (bnc#798043)
+  * Don't use temporary file to establish load options.
+
+-------------------------------------------------------------------
+Wed Dec 19 21:20:25 UTC 2012 - r...@suse.com
+
+- elilo.pl
+  * Add support UEFI Secure Boot (via 'grub.efi'). (fate#314485)
+  * Don't try to write 'xen.cfg', if no valid XEN section is found
+    and treat "VMM" EFI-binaries as "mandatory".  (bnc#792100)
+  * Support more than 10 EFI Boot Manager (EBM) entries.
+  * Stop using '--write-signature' for 'efibootmgr' (as non-GPT
+    disk-labels aren't supported anyway).
+  * Sort creation of EBM entries according to default boot section.
+  * Fix initial handling of obsolete files.
+
+-------------------------------------------------------------------
+Mon Jan 16 15:21:24 UTC 2012 - r...@suse.de
+
+- elilo.pl
+  * Cope with misguided '/dev/mapper/' entries in 'fstab'.  (bnc#717828)
+
+-------------------------------------------------------------------
+Fri Nov 25 17:12:38 UTC 2011 - r...@suse.de
+
+- elilo.pl
+  * Allow empty 'vmmopts' for 'xen.efi'.  (bnc#731288)
+  * Implement refreshing of EFI Boot Manager entries.  (bnc#717828)
+
+-------------------------------------------------------------------
+Mon Sep 19 14:53:06 UTC 2011 - r...@suse.de
+
+- elilo.pl
+  * Fix handling of 'xen.cfg'.  (bnc#706110)
+  * Record installed files and remove only those in the future.
+
+-------------------------------------------------------------------
@@ -4 +143,2 @@
-- Remove redundant/obsolete tags/sections from specfile
+- elilo.spec
+  * Remove redundant/obsolete tags/sections from specfile
@@ -7,0 +148,19 @@
+Mon Aug  1 12:43:45 UTC 2011 - r...@suse.de
+
+- elilo.efi
+  * Allow booting in an IPv6 network environment.  (fate#311995)
+- elilo.pl
+  * Add support for 'xen.efi'.  (fate#311376)
+
+-------------------------------------------------------------------
+Fri Jun 17 12:54:53 UTC 2011 - r...@suse.de
+
+- elilo.efi
+  * Update to elilo-3.14.  (fate#311532)
+- elilo.spec
+  * Follow openSUSE migration from libexecdir to libdir.
+- elilo.pl
+  * Don't initialize '$[' to 0.
+  * Adapt to replacement of libexecdir with libdir.
+
+-------------------------------------------------------------------
@@ -10,2 +169,36 @@
-* Update to elilo-3.12 from SLE11 to fix EFI boot (bnc#659368)
-  - see ChangeLog for a detailed log
+- Update openSUSE to elilo-3.12 from SLE11 to fix EFI boot (bnc#659368)
+  (see ChangeLog for a detailed log)
+
+-------------------------------------------------------------------
+Mon Apr 12 16:59:30 CEST 2010 - r...@suse.de
+
+- elilo.efi
+  * Handle EFI memory maps larger than E820_MAX.  (bnc#594516)
+
+-------------------------------------------------------------------
+Tue Mar 30 11:42:43 CEST 2010 - r...@suse.de
+
+- elilo.efi
+  * Update boot protocol for 2.6.30.  (bnc#560443)
+  * Allocate initrd below kernel specified limit.  (bnc#577570)
+  * Load kernel relocated.  (bnc#447843, 516215, 568848, 587858)
+- elilo.pl
+  * Add handling of VMM for XEN.  (bnc#578926)
+
+-------------------------------------------------------------------
+Tue Jan 26 12:14:57 CET 2010 - r...@suse.de
+
+- elilo.efi
+  * PRELIMINARY debugging patch for x86_64.  (bnc#560443)
+
+-------------------------------------------------------------------
+Fri Nov 20 13:10:51 CET 2009 - r...@suse.de
+
+- elilo.efi
+  * Update to elilo-3.12.
+
++++ 27 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/elilo/elilo.changes
++++ and /work/SRC/openSUSE:Factory/.elilo.new/elilo.changes

Old:
----
  elilo-3.12-source.tar.gz
  elilo-MAC.diff
  elilo-avoid-tab.diff
  elilo-bzimage-alloc.diff
  elilo-cleanup.diff
  elilo-fix-possible-overflow.diff
  elilo-fix-strncpy-overflow.diff
  elilo-longer-commandline.diff
  elilo-x86-64-bootproto-update.diff
  elilo-x86-64-e820-max.diff
  elilo-x86-64-initrd.diff
  elilo-x86-64-kernel.diff
  eliloalt-sysfs.diff

New:
----
  3.16-release-notes.txt
  elilo-3.16-source.tar.xz
  elilo-auto-add_efi_memmap.diff
  elilo-blocksize.diff
  elilo-de-debianify.diff
  elilo-ipv6.diff
  elilo-mac-conf.diff
  elilo-max-conf.diff
  eliloalt-no-date.diff

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ elilo.spec ++++++
--- /var/tmp/diff_new_pack.tBERHP/_old  2013-10-29 09:23:29.000000000 +0100
+++ /var/tmp/diff_new_pack.tBERHP/_new  2013-10-29 09:23:29.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package elilo
 #
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -22,60 +22,61 @@
 #!BuildIgnore: binutils
 %endif
 %endif
-BuildRequires:  gnu-efi >= 3.0e
+BuildRequires:  gnu-efi >= 3.0u
+BuildRequires:  perl(Pod::Man)
 
 Name:           elilo
 Summary:        EFI Linux Loader
-Version:        3.12
-Release:        1
-ExclusiveArch:  ia64 %ix86 x86_64
-Group:          System/Boot
-PreReq:         /usr/bin/perl
 License:        GPL-2.0+
+Group:          System/Boot
+Version:        3.16
+Release:        0
+ExclusiveArch:  ia64 %ix86 x86_64
+PreReq:         /usr/bin/perl perl(Pod::Usage) perl(Getopt::Long)
+# "perl" must be in place *before* any package's 'pre' or 'post' section
+# can (directly or indirectly) run '/sbin/elilo'!  (bnc#842183)
+%ifarch ia64
+PreReq:         perl(File::Compare)
+%endif
 Url:            http://elilo.sourceforge.net/
-Source:         http://dl.sourceforge.net/elilo/elilo-3.12-source.tar.gz
+#ource:         http://downloads.sourceforge.net/elilo/elilo-3.16-all.tar.gz
+Source:         elilo-%{version}-source.tar.xz
 Source1:        elilo.pl
 Source2:        debian.eliloalt.man8
 Source3:        elilo.conf.man5
+Source4:        
http://downloads.sourceforge.net/elilo/%{version}-release-notes.txt
 Source9:        rpmlintrc
-Patch0:         elilo-x86-64-bootproto-update.diff
-Patch1:         elilo-x86-64-initrd.diff
-Patch2:         elilo-x86-64-kernel.diff
-Patch3:         elilo-x86-64-e820-max.diff
-Patch4:         elilo-fix-possible-overflow.diff
-Patch5:         elilo-bzimage-alloc.diff
-Patch6:         elilo-fix-strncpy-overflow.diff
-Patch7:         elilo-longer-commandline.diff
-Patch8:         elilo-avoid-tab.diff
-Patch9:         elilo-cleanup.diff
-Patch10:        eliloalt-sysfs.diff
-Patch11:        elilo-MAC.diff
-Patch12:        elilo-text-mode.diff
+Patch0:         elilo-ipv6.diff
+Patch1:         elilo-max-conf.diff
+Patch2:         elilo-mac-conf.diff
+Patch3:         elilo-auto-add_efi_memmap.diff
+Patch4:         elilo-blocksize.diff
+Patch5:         elilo-text-mode.diff
+Patch10:        elilo-de-debianify.diff
+Patch11:        eliloalt-no-date.diff
+
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
 The EFI Linux boot loader.
 
 %prep
-%setup -q
+%setup -q -n %{name}-%{version}-source
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
 %patch10 -p1
 %patch11 -p1
-%patch12 -p1
 
 %build
 perl -pi -e 's{/usr/lib}{%{_libdir}}' Make.defaults
-make OPTIMFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -fno-stack-protector"
-
+##################################################################
+## DO NOT ADD RPM OPT FLAGS! THIS DOES NOT BUILD AGAINST GLIBC. ##
+##################################################################
+make OPTIMFLAGS="-fmessage-length=0"
 perl -pe 's{\@EDITION\@}{%{version}-%{release}};
          s{\@LIBDIR\@}{%{_libdir}};
          s{\@ARCH\@}{%{_target_cpu}};
@@ -94,14 +95,20 @@
 install -D -p -m 644 elilo.8 $RPM_BUILD_ROOT/usr/share/man/man8/elilo.8
 install -D -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT/usr/share/man/man8/eliloalt.8
 install -D -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT/usr/share/man/man5/elilo.conf.5
+install -p -m 644 %{SOURCE4} RELEASE-NOTES
+diff -q docs/README.txt docs/elilo.txt && rm -f docs/README.txt
 
 %post
-#/sbin/elilo -v || :
-echo "Please run /sbin/elilo!"
+if [ -r /etc/sysconfig/bootloader ]; then
+  . /etc/sysconfig/bootloader
+  if [ "$LOADER_TYPE" = "elilo" -a -r /etc/elilo.conf ]; then
+    /sbin/elilo -v || :
+  fi
+fi
 
 %files
 %defattr(-, root, root)
-%doc README README.* TODO docs/*.txt ChangeLog
+%doc README README.* TODO docs/*.txt RELEASE-NOTES
 %{_libdir}/efi
 /sbin/elilo
 /sbin/eliloalt

++++++ 3.16-release-notes.txt ++++++
3 . 1 6   R E L E A S E   N O T E S 
===================================

QUICK CHANGE SUMMARY
====================
 * Adds native x86x crossbuild functionality
   build 32bit or 64bit versions from either environment via
   make ARCH=ia32|x86_64 (the ARCH IS case sensitive).
   make by itself will default to the native host arch.
 * Add console reset call during initialization. thanks A. Steinmetz
 * simplify output of no GOP warning text so it no longer looks like an error.
 * MAJOR: Fixed Fault crash when EFI memory map changes from under elilo.
   (from an outside interrupt in this case). When the EFI Memory map 
   changes after elilo has already built boot params to pass to the 
   kernel the EFI call to ExitBootSvcs just prior to boot will fail 
   because elilo has the old map key. This is valid EFI behavior, elilo
   retries to pick up the new memory map and key but had already freed 
   the start params portion of boot params resulting in a NULL DEREF
   crash reset once it hands the now bogus boot params to the kernel on
   the 2nd successful call to exit efi and boot. 
        Thanks to Jerry Hoemann @ HP for reporting this bug.
 * minor bugfix, fixed -m option broken. thanks Allan-lsk.
   
BUILD NOTES
====================
 You will need the following toolchain to build elilo-3.14 from source
 the elilo build environment is optimized for Debian and Debian based distros.
 elilo-3.16 was built in the squeeze+(ubuntu 11.x) build environments except
 for itanium which is unchanged to best support legacy enterprise configs.
 Toolchain versions for this release were:
        x86x(32 & 64bit versions)
        * gnu-efi --> 3.0i-3
        * gcc ------> 4:4.4.4-1ubuntu2
        * binutils -> 2.20.51.20100908-0ubuntu2
        ia64
        * gnu-efi --> 3.0e-2
        * gcc ------> 4.3.2-2
        * binutils -> 2.18.1~cvs20080103-7

 * if you use a debian based build environment you will have no problems
 and setting it up is simple. you will be able to build elilo in 3 steps:
 1. apt-get install gnu-efi, gcc, binutils
 2. apt-get source elilo (or download elilo-3.16 source from SourceForge.)
 3. extract source tarball and cd to ./$your-elilo-source and type $> make


 ** If you use the upstream toolchain tarballs(i.e. pre distro) you will need 
    to move some files around for elilo build to work. 
 GNU-EFI (provides the efi 1.10 and uefi 2.x libraries & api)
 -------
 gnu-efi libraries are installed to /usr/local/lib by the 
 upstream gnu-efi source package. elilo expects them to be in system location 
 /usr/lib. efi includes may be located in /usr/local/include/efi. elilo 
 expects them to be in system location /usr/include/efi.
 [ The reason is LSB compliance ].

 BINUTILS (provides the elf conversion utility to produce efi bins)
 --------
 binutils provides objcopy which is installed to /usr/local/bin by binutils,
 elilo source expects it to be in /usr/bin.

 again this LSB compliance is taken care of by the distro's that fix
 the toolchains to install to the correct compliant system locations
 instead of the "user optional" location.

ELILO ON EFI X86_64
=====================
HARD REQUIREMENTS
  EFI + x86_64 REQUIRES an efi64 enabled linux kernel i.e. 2.6.21 or newer
  nothing earlier will work, 2.6.21 was the earliest kernel that efi64 
  support went into. You need to compile the kernel with CONFIG_EFI 
  kernel option ON.
  x86_64 platforms with UEFI 2.0 firmware deprecate UGA protocol
  and therefore only the Graphics Output Protocol (GOP) is supported. For
  such platforms, the kernel must be compiled with EFI_FB option ON. This
  will enable early boot messages on the console. Elilo for x86_64
  attempts to query EFI for GOP support and if it fails it defaults to
  text mode which may or may not show you early console ouput depends on
  your efi console settings and physical setup. Elilo has no way to know
  if your console settings are messed up.

WORKING ELILO.CONF FOR EFI X86_64 EXAMPLE
  Here is my elilo.conf from my UEFI2.0/x86_64 (with nvidia pcie add on 
  card, i.e. your vga= kernel param may be different) workstation which uses 
GOP.
  Here is a partial kernel vga table I was able to find and add here.
Colours   640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200
  -------+--------------------------------------------------------------
  4 bits |    ?       ?     0x302      ?        ?        ?         ?
  8 bits |  0x300   0x301   0x303    0x305    0x161    0x307     0x31C
 15 bits |    ?     0x310   0x313    0x316    0x162    0x319     0x31D
 16 bits |    ?     0x311   0x314    0x317    0x163    0x31A     0x31E
 decimal |           d785    d788     d791
 24 bits |    ?     0x312   0x315    0x318      ?      0x31B     0x31F

Additionally from ...kernel-source/Documentation/Boot.txt...
  vga=<mode>
        <mode> here is either an integer (in C notation, either
        decimal, octal, or hexadecimal) or one of the strings
        "normal" (meaning 0xFFFF), "ext" (meaning 0xFFFE) or "ask"
        (meaning 0xFFFD).  This value should be entered into the
        vid_mode field, as it is used by the kernel before the command
        line is parsed.

  example below shows me console output, what elilo is doing, and kernel boot.
  vga=normal with efi console input output directed to graphics card should 
  work as well.

  default=UBUNTU
  chooser=simple
  verbose=5
  delay=30
  append="root=/dev/sda3 vga=0x31e splash showopts"

  image=/vmlinuz-2.6.32-27-generic
          label="UBUNTU"
          description="Ubuntu 2.6.32-27-generic kernel"
          initrd=/initrd.img-2.6.32-27-generic


++++++ elilo-auto-add_efi_memmap.diff ++++++
---
 bootparams.c     |   15 ++++-----------
 x86_64/config.c  |   18 ++++++++++++++++++
 x86_64/sysdeps.h |    5 ++++-
 x86_64/system.c  |   30 +++++++++++++++++++++++++-----
 4 files changed, 51 insertions(+), 17 deletions(-)

--- a/x86_64/system.c
+++ b/x86_64/system.c
@@ -953,6 +953,11 @@ do_memmap:
 #endif
        if (e820_map_overflow && !e820_map_overflow_warned) {
                CHAR8 *aem = (CHAR8 *)"add_efi_memmap";
+               UINTN al = strlena( aem) + 1;
+               UINTN cl = strlena( (CHAR8 *)cmdline);
+               INT8 autoadd = (x86_64_auto_add_efi_memmap() &&
+                               (cl + al) < CMDLINE_MAXLEN);
+               CHAR16 *severity = (autoadd) ? L"Notice" : L"CAUTION";
                e820_map_overflow_warned++;
 
 #if DEBUG_CREATE_BOOT_PARAMS
@@ -964,11 +969,26 @@ do_memmap:
                        goto do_memmap;
                }
 
-               Print(L"\nCAUTION: EFI memory map has %d more entr%a"
-                       " than E820 map supports.\n"
-                       "To access all memory, '%a' may be necessary.\n\n",
-                       e820_map_overflow, (e820_map_overflow==1)?"y":"ies",
-                       aem);
+               Print(L"\n%s: EFI memory map has %d more entr%a than E820 map"
+                       " supports.\n", severity, e820_map_overflow,
+                       (e820_map_overflow==1)?"y":"ies");
+
+               if (autoadd) {
+                       strcpya( cmdline + cl, (CHAR8 *)" ");
+                       strcpya( cmdline + cl + 1, aem);
+                       Print(L"To allow access to all memory, '%a' has been"
+                               " auto-added!\n\n", aem);
+                       wait_timeout(30);
+                       goto do_memmap;
+               }
+               if ((cl + al) >= CMDLINE_MAXLEN)
+                       Print(L"But adding '%a' would exceed the maximum"
+                               " command-line length", aem);
+               else
+                       Print(L"But auto-adding of '%a' is disabled in"
+                               " 'elilo.conf'", aem);
+               wait_timeout(60);
+               Print(L"\n\n");
                goto do_memmap;
        }
        
--- a/x86_64/config.c
+++ b/x86_64/config.c
@@ -34,6 +34,7 @@
 typedef struct {
        UINTN legacy_free_boot;
        UINTN text_mode;
+       CHAR16 add_efi_memmap[MAX_STRING];
 } x86_64_global_config_t;
 
 
@@ -42,10 +43,14 @@ typedef struct {
 static x86_64_global_config_t x86_64_gconf;
 
 static config_option_t sysdeps_global_options[]={
+       {OPT_STR,       OPT_GLOBAL, L"add-efi-memmap",
+                       NULL,   NULL,   &x86_64_gconf.add_efi_memmap},
        {OPT_BOOL,      OPT_GLOBAL, L"legacy-free",     NULL,   NULL,   
&x86_64_gconf.legacy_free_boot}
 };
 
 static config_option_t sysdeps_image_options[]={
+       {OPT_STR,       OPT_IMAGE_SYS, L"add-efi-memmap",
+                       NULL,   NULL,   x86_64_opt_offsetof(add_efi_memmap)},
        {OPT_BOOL,      OPT_IMAGE_SYS, L"text-mode",    NULL,   NULL,   
x86_64_opt_offsetof(text_mode)}
 };
 
@@ -89,6 +94,19 @@ x86_64_use_legacy_free_boot(VOID)
        return x86_64_gconf.legacy_free_boot ? 1 : 0;
 }
 
+INT8
+x86_64_auto_add_efi_memmap(VOID)
+{
+       if (elilo_opt.sys_img_opts) {
+               if (!StrCmp(elilo_opt.sys_img_opts->add_efi_memmap, L"false"))
+                       return 0;
+               if (!StrCmp(elilo_opt.sys_img_opts->add_efi_memmap, L"auto"))
+                       return 1;
+       }
+       if (!StrCmp(x86_64_gconf.add_efi_memmap, L"false"))
+               return 0;
+       return 1;
+}
 
 INTN
 x86_64_text_mode(VOID)
--- a/x86_64/sysdeps.h
+++ b/x86_64/sysdeps.h
@@ -365,6 +365,7 @@ extern UINTN rmswitch_size;
 
 extern INTN x86_64_use_legacy_free_boot();
 extern INTN x86_64_text_mode();
+extern INT8 x86_64_auto_add_efi_memmap();
 
 /*
  * How to jump to kernel code
@@ -457,9 +458,11 @@ start_kernel(VOID *kentry, boot_params_t
        /* Never come back to here. */
 }
 
+#define MAX_STRING 512 /* ToDo: move to 'config.h' */
 typedef struct sys_img_options {
        UINT8 dummy;     /* forces non-zero offset for first field */
-       UINT8 text_mode; /* do not try to initialize Graphics Output Protocol */
+       UINT8 text_mode; /* don't try to initialize GraphicsOutputProtocol */
+       CHAR16 add_efi_memmap[MAX_STRING]; /* "false" | "auto" */
 } sys_img_options_t;
 
 #endif /* __ELILO_SYSDEPS_X86_64_H__ */
--- a/bootparams.c
+++ b/bootparams.c
@@ -93,21 +93,14 @@ create_boot_params(CHAR16 *args, memdesc
         */
        Memset(bp, 0, BOOT_PARAM_MEMSIZE);
 
+       /*
+        * Convert kernel command line args from UNICODE to ASCII
+        * and put them where the kernel expects them:
+        */
        U2ascii(args, cp, cmdline_size);
 
        if (sysdeps_create_boot_params(bp, cp, initrd, vmcode, cookie) == -1) 
return 0;
 
-       /*
-        * Convert kernel command line args from UNICODE to ASCII and put them 
where
-        * the kernel expects them:
-        */
-       while (1) {
-               ch = *args++;
-               if (!ch) break;
-               *cp++ = ch;
-       }
-       *cp++ = '\0';
-
        return bp;
 }
 
++++++ elilo-blocksize.diff ++++++
---
 config.c   |    4 ++++
 elilo.h    |    2 ++
 fs/netfs.c |    3 ++-
 3 files changed, 8 insertions(+), 1 deletion(-)

--- a/config.c
+++ b/config.c
@@ -119,6 +119,7 @@ typedef struct {
        UINTN timeout;
        UINTN verbose;
        UINTN edd30_no_force; /* don't force EDD30 if not set */
+       UINTN blocksize;
 } global_config_t;
 
 /*
@@ -143,6 +144,7 @@ static config_option_t global_common_opt
 {OPT_STR,      OPT_GLOBAL,     L"default",     NULL,           NULL,           
        global_config.default_image_name},
 {OPT_NUM,      OPT_GLOBAL,     L"timeout",     NULL,           NULL,           
        &global_config.timeout},
 {OPT_NUM,      OPT_GLOBAL,     L"delay",       NULL,           NULL,           
        &global_config.delay},
+{OPT_NUM,      OPT_GLOBAL,     L"block-size",  NULL,           NULL,           
        &global_config.blocksize},
 {OPT_BOOL,     OPT_GLOBAL,     L"debug",       NULL,           NULL,           
        &global_config.debug},
 {OPT_BOOL,     OPT_GLOBAL,     L"prompt",      NULL,           NULL,           
        &global_config.prompt},
 {OPT_NUM,      OPT_GLOBAL,     L"verbose",     NULL,           
check_verbosity,        &global_config.verbose},
@@ -827,6 +829,8 @@ update_elilo_opt(VOID)
 
        if (global_config.debug) elilo_opt.debug   = 1;
        if (global_config.prompt) elilo_opt.prompt = 1;
+       if (global_config.blocksize)
+               elilo_opt.blocksize = global_config.blocksize;
 
        /*
         * update only if not set on command line
--- a/elilo.h
+++ b/elilo.h
@@ -105,6 +105,8 @@ typedef struct {
        UINTN prompt;           /* enter interactive mode */
        UINTN parse_only;       /* only parses the config file */
        UINTN timeout;          /* timeout before leaving interactive mode*/
+       UINTN blocksize;        /* user-specified block-size for I/O */
+                               /* (currently only used for TFTP!) */
 
        image_opt_t img_opt;    /* architecture independent per image options*/
 
--- a/fs/netfs.c
+++ b/fs/netfs.c
@@ -517,7 +517,8 @@ netfs_open(netfs_interface_t *this, CHAR
        netfs_fd_t         *f;
        EFI_STATUS         status;
        CHAR8              ascii_name[FILENAME_MAXLEN];
-       UINTN              blocksize = NETFS_DEFAULT_BLOCKSIZE;
+       UINTN              blocksize = (elilo_opt.blocksize > 0) ?
+                               elilo_opt.blocksize : NETFS_DEFAULT_BLOCKSIZE;
        UINTN              prev_netbufsize, retries = 0;
        BOOLEAN            server_provided_filesize = FALSE;
 
++++++ elilo-de-debianify.diff ++++++
---
 Make.defaults   |    5 +++--
 ia32/Makefile   |    2 +-
 x86_64/Makefile |    2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

--- a/Make.defaults
+++ b/Make.defaults
@@ -63,8 +63,9 @@ CDIR    := $(shell if [ "$$PWD" != "" ];
 TOPDIR  =
 ALLSUBDIRS = ia32 ia64 x86_64 fs choosers devschemes tools
 
-HOSTARCH   = $(shell dpkg-architecture -qDEB_BUILD_ARCH | sed 
s,i[3456789]86,ia32, | sed s,amd64,x86_64, )
-ARCH      := $(shell dpkg-architecture -qDEB_BUILD_ARCH | sed 
s,i[3456789]86,ia32, | sed s,amd64,x86_64, )
+HOSTARCH  := $(shell if ! dpkg-architecture -qDEB_BUILD_ARCH 2>/dev/null; then 
\
+               uname -m; fi | sed -e s,i[3456789]86,ia32, -e s,amd64,x86_64, )
+ARCH      := $(HOSTARCH)
 INCDIR    = -I. -I$(TOPDIR) -I$(EFIINC) -I$(EFIINC)/$(ARCH) 
-I$(EFIINC)/protocol -I$(TOPDIR)/efi110
 CPPFLAGS   = -DCONFIG_$(ARCH) 
 
--- a/x86_64/Makefile
+++ b/x86_64/Makefile
@@ -43,7 +43,7 @@ all: $(TARGET)
 system.o: rmswitch.h
 
 rmswitch.h: bin_to_h.c rmswitch.S
-       $(CC) -o bin_to_h $(SRCDIR)/bin_to_h.c
+       $(CC) $(OPTIMFLAGS) -o bin_to_h $(SRCDIR)/bin_to_h.c
        $(AS) -o rmswitch.o $(SRCDIR)/rmswitch.S
        $(LD) -Ttext 0x0 -s --oformat binary -o rmswitch rmswitch.o
        ./bin_to_h <rmswitch >rmswitch.h
--- a/ia32/Makefile
+++ b/ia32/Makefile
@@ -42,7 +42,7 @@ all: $(TARGET)
 system.o: rmswitch.h
 
 rmswitch.h: bin_to_h.c rmswitch.S
-       $(CC) -o bin_to_h $(SRCDIR)/bin_to_h.c
+       $(CC) $(OPTIMFLAGS) -o bin_to_h $(SRCDIR)/bin_to_h.c
        $(AS) -o rmswitch.o $(SRCDIR)/rmswitch.S
        $(LD) -Ttext 0x0 -s --oformat binary -o rmswitch rmswitch.o
        ./bin_to_h <rmswitch >rmswitch.h
++++++ elilo-ipv6.diff ++++++
---
 fs/netfs.c   |  257 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 glue_netfs.c |   53 ++++++++++--
 strops.c     |   11 ++
 strops.h     |    1 
 4 files changed, 302 insertions(+), 20 deletions(-)

--- a/glue_netfs.c
+++ b/glue_netfs.c
@@ -133,6 +133,17 @@ netfs_set_default_path(netfs_interface_t
        return EFI_SUCCESS;
 }
 
+static INTN
+non_zero(UINT8 *c, UINTN len)
+{
+       int i;
+       for (i=0 ; i < len ; i++) {
+               if (c[i])
+                       return 1;
+       }
+       return 0;
+}
+
 static EFI_STATUS
 netfs_setdefaults(VOID *intf, config_file_t *config, CHAR16 *kname, UINTN 
maxlen, CHAR16 *devpath)
 {
@@ -140,7 +151,7 @@ netfs_setdefaults(VOID *intf, config_fil
        netfs_info_t info;
        EFI_STATUS status;
        UINT8 *ipaddr;
-       UINTN m;
+       UINTN m, i;
        CHAR16 ip_var[64], str[64];
        UINT8 *ip;
 
@@ -165,6 +176,9 @@ netfs_setdefaults(VOID *intf, config_fil
        set_var(VAR_NETFS_HOSTNAME, info.hostname);
        set_var(VAR_NETFS_DOMAINAME, info.domainame);
 
+       DBG_PRT((L"netfs_setdefaults: hostname=%s (IPv%a)", info.hostname,
+               (info.using_ipv6 ? "6" : "4")));
+
        if (info.using_pxe) {
                DBG_PRT((L"netfs_setdefaults: using_pxe"));
 
@@ -184,13 +198,10 @@ netfs_setdefaults(VOID *intf, config_fil
 
 #  if defined(CONFIG_ia64)
 #    define CONFIG_ARCH_EXTENSION L"-ia64.conf\0"
-#    define EXTENSION_LENGTH 11
 #  elif defined (CONFIG_ia32)
 #    define CONFIG_ARCH_EXTENSION L"-ia32.conf\0"
-#    define EXTENSION_LENGTH 11
 #  elif defined (CONFIG_x86_64)
 #    define CONFIG_ARCH_EXTENSION L"-x86_64.conf\0"
-#    define EXTENSION_LENGTH 13
 #  else
 #    error "You need to specfy your default arch config file"
 #  endif            
@@ -203,31 +214,57 @@ netfs_setdefaults(VOID *intf, config_fil
                 * the filenames are constructed based on the IP(v4) address
                 */
                convert_ip2hex(ipaddr, m, str);
+#if 1
+               i = 0;
+               if (non_zero(ipaddr, m)) {
+                       int nr = (m==16)? 10 : 6;
+                       int st = (m==16)? 2 : 1;
+                       m <<= 1;
+                       StrnCpy(config[i].fname, str, m);
+                       StrnCat(config[i++].fname,
+                               CONFIG_EXTENSION, maxlen - m);
+                       while (i <= nr) {
+                               int stub = m - (i+1)*st;
+                               StrnCpy(config[i].fname, str, stub);
+                               StrnCat(config[i++].fname,
+                                       CONFIG_ARCH_EXTENSION, maxlen - m);
+                               StrnCpy(config[i].fname, str, stub);
+                               StrnCat(config[i++].fname,
+                                       CONFIG_EXTENSION, maxlen - m);
+                       }
+               }
+               if (non_zero(info.hw_addr, 6)) {
+                       convert_mac2hex(info.hw_addr,6,str);
+                       StrnCpy(config[i].fname, str, maxlen-1);
+                       StrnCpy(config[i++].fname+17, CONFIG_EXTENSION, 6);
+               }
+#else
                StrnCpy(config[0].fname, str, maxlen-1);
                StrnCpy(config[0].fname+8, CONFIG_EXTENSION, 6);
 
                StrnCpy(config[1].fname, str, maxlen-1);
-               StrnCpy(config[1].fname+6, CONFIG_ARCH_EXTENSION, 
EXTENSION_LENGTH);
+               StrnCpy(config[1].fname+6, CONFIG_ARCH_EXTENSION, maxlen-7);
 
                StrnCpy(config[2].fname, str, maxlen-1);
                StrnCpy(config[2].fname+6, CONFIG_EXTENSION, 6);
 
                StrnCpy(config[3].fname, str, maxlen-1);
-               StrnCpy(config[3].fname+4, CONFIG_ARCH_EXTENSION, 
EXTENSION_LENGTH);
+               StrnCpy(config[3].fname+4, CONFIG_ARCH_EXTENSION, maxlen-5);
 
                StrnCpy(config[4].fname, str, maxlen-1);
                StrnCpy(config[4].fname+4, CONFIG_EXTENSION, 6);
                 
                StrnCpy(config[5].fname, str, maxlen-1);
-               StrnCpy(config[5].fname+2, CONFIG_ARCH_EXTENSION, 
EXTENSION_LENGTH);
+               StrnCpy(config[5].fname+2, CONFIG_ARCH_EXTENSION, maxlen-3);
 
                StrnCpy(config[6].fname, str, maxlen-1);
-               StrnCpy(config[6].fname+2, CONFIG_EXTENSION, 6);
+               StrnCpy(config[6].fname+2, CONFIG_EXTENSION, maxlen-3);
 
                /* use the MAC address as a possible file name as well */
                convert_mac2hex(info.hw_addr,6,str);
                StrnCpy(config[7].fname, str, maxlen-1);
                StrnCpy(config[7].fname+17, CONFIG_EXTENSION, 6);
+#endif
 
 #else
                StrnCpy(config[0].fname, NETFS_DEFAULT_CONFIG, maxlen-1);
--- a/strops.c
+++ b/strops.c
@@ -50,6 +50,17 @@ StrnCpy(OUT CHAR16 *dst, IN const CHAR16
        return res;
 }
 
+CHAR16 *
+StrnCat(OUT CHAR16 *dst, IN const CHAR16 *src, IN UINTN size)
+{
+       CHAR16 *res;
+
+       while (size && size-- && (*dst++) != CHAR_NULL);
+       res = StrnCpy(--dst, src, size);
+
+       return res;
+}
+
 CHAR8 *
 StrnXCpy(OUT CHAR8 *dst, IN const CHAR16 *src, IN UINTN size)
 {
--- a/strops.h
+++ b/strops.h
@@ -28,6 +28,7 @@
 
 extern CHAR16 *StrChr(IN const CHAR16 *s, const CHAR16 c);
 extern CHAR16 *StrnCpy(OUT CHAR16 *dst, IN const CHAR16 *src, UINTN count);
+extern CHAR16 *StrnCat(OUT CHAR16 *dst, IN const CHAR16 *src, UINTN count);
 extern CHAR8 *StrnXCpy(OUT CHAR8 *dst, IN const CHAR16 *src, UINTN count);
 
 extern CHAR8 *strtok_simple(CHAR8 *in, CHAR8 c);
--- a/fs/netfs.c
+++ b/fs/netfs.c
@@ -75,6 +75,8 @@ typedef struct {
        EFI_IP_ADDRESS  netmask;
        UINT8           hw_addr[16];
 
+       CHAR8           bootfile[NETFS_BOOTFILE_MAXLEN];
+
        netfs_fd_t      fd_tab[NETFS_FD_MAX];
        netfs_fd_t      *free_fd;
        UINTN           free_fd_count;
@@ -206,11 +208,239 @@ netfs_name(netfs_interface_t *this, CHAR
        return EFI_SUCCESS;
 }
 
+typedef struct {
+    UINT16  code;
+    UINT16  len;
+    UINT8   data[];
+} DHCPv6_OPTION;
+
+#define DHCPv6_REPLY            7
+#define OPT_BOOTFILE_URL       59
+#define PROTO "tftp://";  /* only TFTP supported for now */
+
+static inline UINT16
+bswap16(UINT16 x)
+{
+       return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8));
+}
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+# define ntohs(x)     bswap16(x)
+# define htons(x)     bswap16(x)
+#else
+# if __BYTE_ORDER == __BIG_ENDIAN
+#  define ntohs(x)       (x)
+#  define htons(x)       (x)
+# endif
+#endif
+/* string 2 net short */
+static UINT16
+stra2ns(CHAR8 *str)
+{
+       UINT16 ret = 0;
+       UINT8 v;
+       for(;*str;str++) {
+               if ('0' <= *str && *str <= '9')
+                       v = *str - '0';
+               else if ('A' <= *str && *str <= 'F')
+                       v = *str - 'A' + 10;
+               else if ('a' <= *str && *str <= 'f')
+                       v = *str - 'a' + 10;
+               else
+                       v = 0;
+               ret = (ret << 4) + v;
+       }
+       /* DBG_PRT((L"stra2ns: '%a'='%d'", str, ret)); */
+       return htons(ret);
+}
+
+/* IPv4/6 address to string */
+static CHAR8 *
+ip2stra(UINT8 octets, UINT8 *ip)
+{
+       int i, j;
+       static CHAR8 *hexa= (CHAR8 *)"0123456789ABCDEF";
+       static CHAR8 str[42];
+
+       if (octets == 16) {
+               for(i=j=0; i < 16; i++) {
+                       str[j++] = hexa[(ip[i] & 0xf0)>>4];
+                       str[j++] = hexa[ip[i] & 0x0f];
+                       if (i && i%2 == 0)
+                               str[j++] = ':';
+               }
+       } else if (octets == 4) {
+               int val, v;
+               for(i=j=0; i < 4; i++) {
+                       val = ip[i];
+                       v = val / 100;
+                       if (v)
+                               str[j++] = '0' + v;
+                       v = (val % 100) / 10;
+                       if (v || val > 99)
+                               str[j++] = '0' + v;
+                       val %= 10;
+                       str[j++] = '0' + val;
+                       str[j++] = '.';
+               }
+       } else
+               j = 1;
+       str[--j] = '\0';
+       /* DBG_PRT((L"ip2stra: '%a'", str)); */
+       return str;
+}
+
+/* string 2 IPv6 address */
+static UINT8 *
+stra2ip6(CHAR8 *str)
+{
+       UINTN i, j, p, len;
+       CHAR8 *a, *b, t;
+       static UINT16 ip[8];
+
+       for(i=0; i < 8; i++) {
+               ip[i] = 0;
+       }
+       len = strlena( str);
+       a = b = str;
+       for(i=p=0; i < len; i++, b++) {
+               if (*b != ':')
+                       continue;
+               *b = '\0';
+               ip[p++] = stra2ns(a);
+               *b = ':';
+               a = b + 1;
+               if ( *(b+1) == ':' )
+                       break;
+       }
+       a = b = str + len;
+       for(j=len, p=7; j > i; j--, a--) {
+               if (*a != ':')
+                       continue;
+               t = *b;
+               *b = '\0';
+               ip[p--] = stra2ns(a+1);
+               *b = t;
+               b = a;
+       }
+       DBG_PRT((L"stra2ip6: '%a'='%a'", str, ip2stra(16, (UINT8 *)ip)));
+       return (UINT8 *)ip;
+}
+
+static VOID
+hexdump(UINT8 *dp, int size)
+{
+       int i = 0, j;
+       unsigned char *d = (unsigned char *)dp;
+       char hex[64], chr[17];
+       static CHAR8 *hexa= (CHAR8 *)"0123456789ABCDEF";
+
+       hex[58] = '\0';
+       chr[16] = '\0';
+       while ( i < size ) {
+                if ( i > 0 && i % 16 == 0 )
+                        Print(L"%a >%a<\n", hex, chr);
+                if ( i % 16 == 0 ) {
+                        Memset( hex, ' ', 58);
+                        hex[56] = '\0';
+                        if (i>0xFFFFFF) return;
+                        for (j = 0; j < 6; j++)
+                               hex[j] = hexa[(i>>(4*(5-j))) & 0xF];
+                }
+#define pos(i) ((((i%16)<8)?8:9)+(i%16)*3)
+                hex[pos(i)] = hexa[d[i]>>4&0xF];
+                hex[pos(i)+1] = hexa[d[i]&0xF];
+
+                chr[i%16] = ((d[i]>31&&d[i]<127)?d[i]:'.');
+                i++;
+       }
+       if ( i % 16 != 1 ) {
+                chr[(i%16)] = '\0';
+                Print(L"%a >%a<\n", hex, chr);
+       }
+}
+
+static INTN
+find_dhcp6_option(
+       EFI_PXE_BASE_CODE_PACKET *packet,
+       UINT8 option,
+       CHAR8 *str,
+       INTN *length)
+{
+       EFI_PXE_BASE_CODE_DHCPV6_PACKET *v6 =
+               (EFI_PXE_BASE_CODE_DHCPV6_PACKET *)packet->Raw;
+       int code, len;
+       DHCPv6_OPTION *p;
+
+       /* Consistency check */
+       if (v6->MessageType != DHCPv6_REPLY) {
+                VERB_PRT(2, Print(L"DHCPv6: MessageType: %d != %d\n",
+                                  v6->MessageType, DHCPv6_REPLY));
+                VERB_PRT(3, hexdump( (UINT8 *)v6, 1024));
+                return -1;
+       }
+       p = (DHCPv6_OPTION *)&v6->DhcpOptions;
+       while (0 != (code = ntohs(p->code))) {
+               len = ntohs(p->len);
+
+               VERB_PRT(4, { Print(L"DHCPv6: REPLY: Code=%d Len=%d\n",
+                                   code, len);
+                             hexdump( p->data, (len<1020)?len:144);
+                           });
+               if ( code == option ) {
+                       len = (len > *length - 1) ? *length - 1 : len;
+                       Memcpy(str, p->data, len);
+                       str[len] = '\0';
+                       *length = len;
+               }
+               p = (DHCPv6_OPTION *)((UINT8 *)p + len + 2*sizeof(UINT16));
+       }
+       return 0;
+}
+static  INTN
+parse_bootfile_url(netfs_priv_state_t *nfs, CHAR8 *url) {
+       CHAR8 *end;
+       VERB_PRT(3, Print(L"DHCPv6: bootfile-url: '%a'\n", url));
+
+       /* check protocol */
+       if (strncmpa(url, (CHAR8 *)PROTO, sizeof(PROTO)-1)) {
+               ERR_PRT((L"Warning: bootfile-url must use TFTP for now! (%a)\n",
+                        PROTO));
+               return -1;
+       }
+       /* fill in v6 address */
+       end = url+sizeof(PROTO);
+       while (*end != ']' && *end != '\0')
+       ++end;
+       if (url[sizeof(PROTO)-1] != '[' || *end != ']') {
+               ERR_PRT((L"Warning: bootfile-url must use '[IPv6::addr]'!\n"));
+               return -1;
+       }
+       *end = '\0';
+       Memcpy( nfs->srv_ip.v6.Addr, stra2ip6(url+sizeof(PROTO)), 16);
+       *end = ']';
+
+       /* remember bootfile path */
+       strncpya( nfs->bootfile, end + 1, NETFS_BOOTFILE_MAXLEN);
+       return 0;
+}
+
 static  VOID
 netfs_extract_ip(netfs_priv_state_t *nfs)
 {
        EFI_PXE_BASE_CODE *pxe = nfs->pxe;
 
+       Memcpy(&nfs->cln_ip, &pxe->Mode->StationIp, sizeof(EFI_IP_ADDRESS));
+
+       if (pxe->Mode->UsingIpv6) {
+               CHAR8 str[NETFS_BOOTFILE_MAXLEN];
+               INTN len = NETFS_BOOTFILE_MAXLEN;
+               if (find_dhcp6_option(&nfs->pxe->Mode->DhcpAck,
+                                       OPT_BOOTFILE_URL, str, &len) != 0)
+                       return;
+               parse_bootfile_url(nfs, str);
+               return;
+       }
+
        if (pxe->Mode->PxeDiscoverValid) {
                nfs->using_pxe = TRUE;
                Memcpy(&nfs->srv_ip, pxe->Mode->PxeReply.Dhcpv4.BootpSiAddr, 
sizeof(EFI_IP_ADDRESS)); 
@@ -218,9 +453,9 @@ netfs_extract_ip(netfs_priv_state_t *nfs
        } else {
                Memcpy(&nfs->srv_ip, pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr, 
sizeof(EFI_IP_ADDRESS)); 
                Memcpy(&nfs->hw_addr, pxe->Mode->DhcpAck.Dhcpv4.BootpHwAddr, 
sizeof(nfs->hw_addr));
+               strncpya(nfs->bootfile, 
pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile, NETFS_BOOTFILE_MAXLEN);
        }
 
-       Memcpy(&nfs->cln_ip, &pxe->Mode->StationIp, sizeof(EFI_IP_ADDRESS)); 
        Memcpy(&nfs->netmask, &pxe->Mode->SubnetMask, sizeof(EFI_IP_ADDRESS)); 
 
        /*
@@ -326,11 +561,9 @@ netfs_open(netfs_interface_t *this, CHAR
 
        U2ascii(name, ascii_name, FILENAME_MAXLEN);
 
-       VERB_PRT(2, Print(L"downloading %a from %d.%d.%d.%d...\n", ascii_name, 
-                               nfs->srv_ip.v4.Addr[0], 
-                               nfs->srv_ip.v4.Addr[1], 
-                               nfs->srv_ip.v4.Addr[2], 
-                               nfs->srv_ip.v4.Addr[3]));
+       VERB_PRT(2, Print(L"downloading %a from %a...\n", ascii_name,
+                       ip2stra((nfs->pxe->Mode->UsingIpv6 ? 16 : 4),
+                               (UINT8 *)nfs->srv_ip.Addr)));
 retry:
        if (retries == 2) {
                netfs_fd_free(nfs, f);
@@ -571,6 +804,9 @@ find_dhcp_option(EFI_PXE_BASE_CODE_PACKE
        UINT8 tag, length;
        UINT8 *opts = packet->Dhcpv4.DhcpOptions;
 
+       if (use_ipv6)
+               return find_dhcp6_option(packet, option, str, len);
+
        *len = 0;
 
        for(;;) {
@@ -637,15 +873,12 @@ netfs_getinfo(netfs_interface_t *this, n
 
        VERB_PRT(3, Print(L"hostname(12): %a\n", str));
 
-       /*
-        * extract bootfile name from DHCP exchanges
-        */
-       if (nfs->using_pxe == 0) {
-               ascii2U(nfs->pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile, 
info->bootfile, NETFS_BOOTFILE_MAXLEN);
+skip_options:
+       if (!info->using_pxe && nfs->bootfile) {
+               ascii2U(nfs->bootfile, info->bootfile, NETFS_BOOTFILE_MAXLEN);
                VERB_PRT(3, Print(L"bootfile: %s\n", info->bootfile));
        }
 
-skip_options:
        return EFI_SUCCESS;
 }
 
++++++ elilo-mac-conf.diff ++++++
---
 glue_netfs.c |   37 ++++++++++++++++++++-----------------
 1 file changed, 20 insertions(+), 17 deletions(-)

--- a/glue_netfs.c
+++ b/glue_netfs.c
@@ -72,7 +72,7 @@ convert_mac2hex(UINT8 *hw_addr,INTN l, C
        for (i=0 ; i < l; i++) {
                str[3*i] = hexa[(hw_addr[i] & 0xf0)>>4];
                str[3*i+1] = hexa[hw_addr[i] & 0x0f];
-               str[3*i+2] = ':';
+               str[3*i+2] = '-';
        }
        str[3*l-1]='\0';
 }
@@ -213,32 +213,35 @@ netfs_setdefaults(VOID *intf, config_fil
                 * will try machine/subnet specific files first.
                 * the filenames are constructed based on the IP(v4) address
                 */
-               convert_ip2hex(ipaddr, m, str);
 #if 1
                i = 0;
+               if (non_zero(info.hw_addr, 6)) {
+                       convert_mac2hex(info.hw_addr,6,str);
+                       /* Blindly prepend ARP type code for Ethernet (0x01)
+                        * (at least for now...)
+                        */
+                       StrnCpy(config[i].fname, L"01-", 3);
+                       StrnCat(config[i].fname, str, maxlen-10);
+                       StrnCat(config[i++].fname, CONFIG_EXTENSION, maxlen-1);
+               }
                if (non_zero(ipaddr, m)) {
-                       int nr = (m==16)? 10 : 6;
-                       int st = (m==16)? 2 : 1;
-                       m <<= 1;
-                       StrnCpy(config[i].fname, str, m);
-                       StrnCat(config[i++].fname,
-                               CONFIG_EXTENSION, maxlen - m);
-                       while (i <= nr) {
-                               int stub = m - (i+1)*st;
+                       int step = (m==16)? 4 : 2;
+                       int stub = m<<1;
+                       convert_ip2hex(ipaddr, stub, str);
+                       StrnCpy(config[i].fname, str, stub);
+                       StrnCat(config[i++].fname, CONFIG_EXTENSION, maxlen-1);
+                       while ( i+3 < MAX_DEFAULT_CONFIGS && stub > step) {
+                               stub -= step;
                                StrnCpy(config[i].fname, str, stub);
                                StrnCat(config[i++].fname,
-                                       CONFIG_ARCH_EXTENSION, maxlen - m);
+                                       CONFIG_ARCH_EXTENSION, maxlen-1);
                                StrnCpy(config[i].fname, str, stub);
                                StrnCat(config[i++].fname,
-                                       CONFIG_EXTENSION, maxlen - m);
+                                       CONFIG_EXTENSION, maxlen-1);
                        }
                }
-               if (non_zero(info.hw_addr, 6)) {
-                       convert_mac2hex(info.hw_addr,6,str);
-                       StrnCpy(config[i].fname, str, maxlen-1);
-                       StrnCpy(config[i++].fname+17, CONFIG_EXTENSION, 6);
-               }
 #else
+               convert_ip2hex(ipaddr, m, str);
                StrnCpy(config[0].fname, str, maxlen-1);
                StrnCpy(config[0].fname+8, CONFIG_EXTENSION, 6);
 
++++++ elilo-max-conf.diff ++++++
---
 fileops.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

--- a/fileops.c
+++ b/fileops.c
@@ -396,12 +396,13 @@ fops_setdefaults(struct config_file *def
                 boot_dev->fops->setdefaults(boot_dev->fops->intf, defconf, 
kname, maxlen, devpath);
         }
         i=0; while (i<MAX_DEFAULT_CONFIGS && defconf[i].fname[0] != CHAR_NULL) 
i += 1;
+        if ((i+1) >= MAX_DEFAULT_CONFIGS) {
 #ifdef ELILO_DEBUG
-        if ((i+3) >= MAX_DEFAULT_CONFIGS) {
-            Print(L"ERROR: i = %d, MAX_DEFAULT_CONFIGS is not large enough\n", 
i);
-            return EFI_INVALID_PARAMETER;
-        }
+            Print(L"Warning: MAX_DEFAULT_CONFIGS(%d) is not large enough\n",
+               MAX_DEFAULT_CONFIGS);
 #endif
+           i = MAX_DEFAULT_CONFIGS-2;
+        }
         StrnCpy(defconf[i].fname, FILEOPS_ARCH_DEFAULT_CONFIG, maxlen-1);
         StrnCpy(defconf[i+1].fname, FILEOPS_DEFAULT_CONFIG, maxlen-1);
 
@@ -409,7 +410,7 @@ fops_setdefaults(struct config_file *def
         VERB_PRT(3,Print(L"Default config filename list:\n"));
         for (i=0; i<MAX_DEFAULT_CONFIGS; i++) {
                 if (defconf[i].fname[0] == CHAR_NULL) { break; }
-                        VERB_PRT(3,Print(L"\t%s\n", defconf[i].fname));
+                VERB_PRT(3,Print(L"\t%2d. %s\n", i+1, defconf[i].fname));
         }
 #endif
         
++++++ elilo-text-mode.diff ++++++
--- /var/tmp/diff_new_pack.tBERHP/_old  2013-10-29 09:23:30.000000000 +0100
+++ /var/tmp/diff_new_pack.tBERHP/_new  2013-10-29 09:23:30.000000000 +0100
@@ -1,95 +1,37 @@
 ---
- x86_64/config.c  |   19 ++++++++++++++++---
- x86_64/sysdeps.h |    4 +++-
- x86_64/system.c  |    4 ++++
- 3 files changed, 23 insertions(+), 4 deletions(-)
+ x86_64/system.c |   24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
 
---- a/x86_64/config.c
-+++ b/x86_64/config.c
-@@ -33,15 +33,23 @@
- 
- typedef struct {
-       UINTN legacy_free_boot;
-+      UINTN text_mode;
- } x86_64_global_config_t;
- 
- 
-+#define x86_64_opt_offsetof(option)    (&((sys_img_options_t *)(0x0))->option)
-+
- static x86_64_global_config_t x86_64_gconf;
- 
- static config_option_t sysdeps_global_options[]={
-       {OPT_BOOL,      OPT_GLOBAL, L"legacy-free",     NULL,   NULL,   
&x86_64_gconf.legacy_free_boot}
- };
- 
-+static config_option_t sysdeps_image_options[]={
-+      {OPT_BOOL,      OPT_IMAGE_SYS, L"text-mode",    NULL,   NULL,   
x86_64_opt_offsetof(text_mode)}
-+};
-+
-+
- /*
-  * X86_64 operations that need to be done only once and just before 
-  * entering the main loop of the loader
-@@ -81,6 +89,14 @@ x86_64_use_legacy_free_boot(VOID)
-       return x86_64_gconf.legacy_free_boot ? 1 : 0;
- }
- 
-+
-+INTN
-+x86_64_text_mode(VOID)
-+{
-+      return (elilo_opt.sys_img_opts &&
-+              elilo_opt.sys_img_opts->text_mode == TRUE) ? 1 : 0;
-+}
-+
- INTN
- sysdeps_register_options(VOID)
- {
-@@ -89,14 +105,11 @@ sysdeps_register_options(VOID)
-       ret = register_config_options(sysdeps_global_options, 
-                                     
sizeof(sysdeps_global_options)/sizeof(config_option_t),
-                                     OPTIONS_GROUP_GLOBAL);
--#if 0
--      /* no per image options yet */
-       if (ret == -1 ) return ret;
- 
-       ret = register_config_options(sysdeps_image_options, 
-                                     
sizeof(sysdeps_image_options)/sizeof(config_option_t),
-                                     OPTIONS_GROUP_IMAGE);
--#endif
- 
-       return ret;
- }
---- a/x86_64/sysdeps.h
-+++ b/x86_64/sysdeps.h
-@@ -364,6 +364,7 @@ extern UINT8 rmswitch_image[];
- extern UINTN rmswitch_size;
- 
- extern INTN x86_64_use_legacy_free_boot();
-+extern INTN x86_64_text_mode();
- 
- /*
-  * How to jump to kernel code
-@@ -457,7 +458,8 @@ start_kernel(VOID *kentry, boot_params_t
- }
- 
- typedef struct sys_img_options {
--      UINT8 nothing_yet;
-+      UINT8 dummy;     /* forces non-zero offset for first field */
-+      UINT8 text_mode; /* do not try to initialize Graphics Output Protocol */
- } sys_img_options_t;
- 
- #endif /* __ELILO_SYSDEPS_X86_64_H__ */
 --- a/x86_64/system.c
 +++ b/x86_64/system.c
-@@ -251,6 +251,10 @@ static INTN get_video_info(boot_params_t
-         UINTN size1;
-         UINT8 i;
- 
-+      if (x86_64_text_mode() == 1) {
-+              Print((L"Skip GOP init, force text-mode.\n"));
-+              return -1;
-+      }
-       efi_status = uefi_call_wrapper(
-                       BS->LocateHandle,
-                       5,
+@@ -266,18 +266,18 @@ static INTN get_video_info(boot_params_t
+       
+       if (EFI_ERROR(efi_status) && efi_status != EFI_BUFFER_TOO_SMALL) {
+               Print(L"LocateHandle GopProtocol failed.\n");
+-              Print(L"--Either no graphics head is installed,\n" \
+-                     "--efi console is set to serial, or,\n" \
+-                     "--the EFI firmware version of this machine is\n" \
+-                     "--older than UEFI 2.0. and does not support GOP");
+-              Print(L"you can SAFELY IGNORE this error. elilo will\n" \
+-                     "default to text-mode.\n Alternatively you can " \
+-                     "now force text mode by setting config variable\n" \
+-                     "text_mode=1 for x86 in elilo.conf or via cmdline.\n\n");
+-              Print(L"However if this is the last text output you see\n" \
+-                     "ensure that your kernel console command line\n " \
+-                     "variable matches up with the actual efi boot menu\n" \
+-                     "console output settings.\n\n");
++              Print(L"--Either no graphics head is installed,\n"
++                     "--EFI console is set to serial, or,\n"
++                     "--the EFI firmware version of this machine is\n"
++                     "  older than UEFI 2.0. and does not support GOP.\n\n");
++              Print(L"You can SAFELY IGNORE this error. ELILO will "
++                     "default to 'text-mode',\n"
++                     "which may be enforced by setting that config variable\n"
++                     "in elilo.conf or via cmdline.\n\n");
++              Print(L"However, if this is the last text output you see, "
++                     "ensure that your\nkernel console command line"
++                     "parameter matches up with the actual\n"
++                     "EFI boot manager console output settings.\n\n");
+               return -1;
+       }
+       Gop_handle = alloc(size, 0);

++++++ elilo.pl ++++++
++++ 1366 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/elilo/elilo.pl
++++ and /work/SRC/openSUSE:Factory/.elilo.new/elilo.pl

++++++ eliloalt-no-date.diff ++++++
---
 tools/eliloalt.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- a/tools/eliloalt.c
+++ b/tools/eliloalt.c
@@ -282,7 +282,13 @@ main(int argc, char **argv)
                switch(c) {
                        case   0: continue; /* fast path for options */
                        case   1:
-                               printf("Version %s Date: %s\n", 
ELILOALT_VERSION, __DATE__);
+                               printf("Version %s\n", ELILOALT_VERSION);
+                               /* Don't use __DATE__ here, as it causes
+                                * excessive rebuilds, which seems very
+                                * wasteful for a tool that did not change
+                                * in a very long time, and probably won't
+                                * any more...
+                                */
                                exit(0);
                        case   2:
                        case 'h':
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to