linux/drivers/firmware
Bernhard Walle 69ac9cd629 sysfs: add /sys/firmware/memmap
This patch adds /sys/firmware/memmap interface that represents the BIOS
(or Firmware) provided memory map. The tree looks like:

    /sys/firmware/memmap/0/start   (hex number)
                           end     (hex number)
                           type    (string)
    ...                 /1/start
                           end
                           type

With the following shell snippet one can print the memory map in the same form
the kernel prints itself when booting on x86 (the E820 map).

  --------- 8< --------------------------
    #!/bin/sh
    cd /sys/firmware/memmap
    for dir in * ; do
        start=$(cat $dir/start)
        end=$(cat $dir/end)
        type=$(cat $dir/type)
        printf "%016x-%016x (%s)\n" $start $[ $end +1] "$type"
    done
  --------- >8 --------------------------

That patch only provides the needed interface:

 1. The sysfs interface.
 2. The structure and enumeration definition.
 3. The function firmware_map_add() and firmware_map_add_early()
    that should be called from architecture code (E820/EFI, for
    example) to add the contents to the interface.

If the kernel is compiled without CONFIG_FIRMWARE_MEMMAP, the interface does
nothing without cluttering the architecture-specific code with #ifdef's.

The purpose of the new interface is kexec: While /proc/iomem represents
the *used* memory map (e.g. modified via kernel parameters like 'memmap'
and 'mem'), the /sys/firmware/memmap tree represents the unmodified memory
map provided via the firmware. So kexec can:

 - use the original memory map for rebooting,
 - use the /proc/iomem for setting up the ELF core headers for kdump
   case that should only represent the memory of the system.

The patch has been tested on i386 and x86_64.

Signed-off-by: Bernhard Walle <bwalle@suse.de>
Acked-by: Greg KH <gregkh@suse.de>
Acked-by: Vivek Goyal <vgoyal@redhat.com>
Cc: kexec@lists.infradead.org
Cc: yhlu.kernel@gmail.com
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-07-08 17:55:41 +02:00
..
Kconfig sysfs: add /sys/firmware/memmap 2008-07-08 17:55:41 +02:00
Makefile sysfs: add /sys/firmware/memmap 2008-07-08 17:55:41 +02:00
dcdbas.c firmware: replace remaining __FUNCTION__ occurrences 2008-04-29 08:06:03 -07:00
dcdbas.h define global BIT macro 2007-10-19 11:53:42 -07:00
dell_rbu.c firmware: replace remaining __FUNCTION__ occurrences 2008-04-29 08:06:03 -07:00
dmi-id.c Remove inclusions of <linux/autoconf.h> 2008-02-06 10:41:00 -08:00
dmi_scan.c x86 boot: add header comment to dmi.h stating what it is 2008-05-25 10:55:11 +02:00
edd.c edd: fix incorrect return of 1 from module_init 2008-06-06 11:29:09 -07:00
efivars.c Kobject: convert drivers/* from kobject_unregister() to kobject_put() 2008-01-24 20:40:40 -08:00
iscsi_ibft.c Firmware: add iSCSI iBFT Support 2008-04-19 19:10:28 -07:00
iscsi_ibft_find.c drivers: fix integer as NULL pointer warnings 2008-04-28 17:31:13 -07:00
memmap.c sysfs: add /sys/firmware/memmap 2008-07-08 17:55:41 +02:00
pcdp.c serial: convert early_uart to earlycon for 8250 2007-07-16 09:05:35 -07:00
pcdp.h