|  | 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 | 
|  | - Unusable memory | 
|  | - Persistent Memory (legacy) | 
|  | - Persistent Memory | 
|  | - Soft Reserved | 
|  | - reserved | 
|  |  | 
|  | Following shell snippet can be used to display that memory | 
|  | map in a human-readable format:: | 
|  |  | 
|  | #!/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 |