3 Provide access to physical memory information.
4 Copyright 2014, 2017 Cray Inc. All Rights Reserved
7 from pykdump.API import *
12 """Generates /proc/iomem by traversing iomem Resource tree."""
13 def __init__(self, resource):
14 self.resource = resource
17 def resource_start(self):
18 return self.resource.start
19 start = property(resource_start)
21 def resource_end(self):
22 return self.resource.end
23 end = property(resource_end)
25 def resource_name(self):
26 return self.resource.name
27 name = property(resource_name)
30 return Addr(self.resource)
33 return '{0:08x}-{1:08x} : {2}'.format(self.start, self.end, self.name)
36 if self.resource.child:
37 return Resource(self.resource.child)
41 def get_sibling(self):
42 if self.resource.sibling:
43 return Resource(self.resource.sibling)
47 def _walk(self, lvl=0):
50 child = self.get_child()
52 for res in child._walk(lvl+1):
54 next = self.get_sibling()
56 for res in next._walk(lvl):
60 """ returns /proc/iomem tree generator """
61 return self.get_child()._walk()
63 def is_System_RAM(self):
64 return self.name == "System RAM"
67 """ generator wrapper function for iomem """
68 iomem_resource = Resource(readSymbol('iomem_resource'))
69 return iomem_resource.iomem()
72 """Define a single entry for a memory map.
74 A MemMapEntry consists of three attributes:
76 start - first address within the range
77 end - first address past the end of the range
78 name - name of address space type
84 def __init__(self, start_addr, end_addr, name_str):
85 self.start = int(start_addr)
86 self.end = int(end_addr)
91 """Define a physical memory map.
93 Returns the physical memory map as a list by extracting system ram
94 ranges from iomem Resource class above.
95 The list defines the physical address map as provided the iomem
96 and will be a list of objects of type MemMapEntry.
100 for ent in get_iomem():
101 # get System RAM from iomem resource
102 if ent.is_System_RAM():
103 memmap.append(MemMapEntry(ent.start, ent.end+1, ent.name))
107 # --------------------------------------------------------------------------
109 # Create shared objects.
111 crashlib.cid.physmap = GetPhysMemMap()