linux-yocto/Documentation/ABI/testing/sysfs-firmware-memmap
Bernhard Walle 97bef7dd05 Bernhard has moved
Since I don't work for SUSE any more and the bwalle@suse.de address is
invalid, correct it in the copyright headers and documentation.

Signed-off-by: Bernhard Walle <bernhard.walle@gmx.de>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-02-18 15:37:56 -08:00

2.3 KiB

What: /sys/firmware/memmap/ Date: June 2008 Contact: Bernhard Walle bernhard.walle@gmx.de Description: On all platforms, the firmware provides a memory map which the kernel reads. The resources from that memory map are registered in the kernel resource tree and exposed to userspace via /proc/iomem (together with other resources).

	However, on most architectures that firmware-provided memory
	map is modified afterwards by the kernel itself, either because
	the kernel merges that memory map with other information or
	just because the user overwrites that memory map via command
	line.

	kexec needs the raw firmware-provided memory map to setup the
	parameter segment of the kernel that should be booted with
	kexec. Also, the raw memory map is useful for debugging. For
	that reason, /sys/firmware/memmap is an interface that provides
	the raw memory map to userspace.

	The structure is as follows: Under /sys/firmware/memmap there
	are subdirectories with the number of the entry as their name:

		/sys/firmware/memmap/0
		/sys/firmware/memmap/1
		/sys/firmware/memmap/2
		/sys/firmware/memmap/3
		...

	The maximum depends on the number of memory map entries provided
	by the firmware. The order is just the order that the firmware
	provides.

	Each directory contains three files:

	start	: The start address (as hexadecimal number with the
		  '0x' prefix).
	end	: The end address, inclusive (regardless whether the
		  firmware provides inclusive or exclusive ranges).
	type	: Type of the entry as string. See below for a list of
		  valid types.

	So, for example:

		/sys/firmware/memmap/0/start
		/sys/firmware/memmap/0/end
		/sys/firmware/memmap/0/type
		/sys/firmware/memmap/1/start
		...

	Currently following types exist:

	  - System RAM
	  - ACPI Tables
	  - ACPI Non-volatile Storage
	  - reserved

	Following shell snippet can be used to display that memory
	map in a human-readable format:

	-------------------- 8< ----------------------------------------
	  #!/bin/bash
	  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 ----------------------------------------