提交 f7a2aeee 编写于 作者: S Simon Glass

dtoc: Move a few more common functions into fdt.py

Some functions have the same code in the subclasses. Move these into the
superclass to avoid duplication.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 c322a850
......@@ -164,6 +164,26 @@ class NodeBase:
self.subnodes = []
self.props = {}
def _FindNode(self, name):
"""Find a node given its name
Args:
name: Node name to look for
Returns:
Node object if found, else None
"""
for subnode in self.subnodes:
if subnode.name == name:
return subnode
return None
def Scan(self):
"""Scan the subnodes of a node
This should be implemented by subclasses
"""
raise NotImplementedError()
class Fdt:
"""Provides simple access to a flat device tree blob.
......@@ -173,3 +193,40 @@ class Fdt:
"""
def __init__(self, fname):
self._fname = fname
def Scan(self, root='/'):
"""Scan a device tree, building up a tree of Node objects
This fills in the self._root property
Args:
root: Ignored
TODO(sjg@chromium.org): Implement the 'root' parameter
"""
self._root = self.Node(self, 0, '/', '/')
self._root.Scan()
def GetRoot(self):
"""Get the root Node of the device tree
Returns:
The root Node object
"""
return self._root
def GetNode(self, path):
"""Look up a node from its path
Args:
path: Path to look up, e.g. '/microcode/update@0'
Returns:
Node object, or None if not found
"""
node = self._root
for part in path.split('/')[1:]:
node = node._FindNode(part)
if not node:
return None
return node
......@@ -81,22 +81,6 @@ class FdtFallback(Fdt):
def __init__(self, fname):
Fdt.__init__(self, fname)
def Scan(self):
"""Scan a device tree, building up a tree of Node objects
This fills in the self._root property
"""
self._root = Node(self, 0, '/', '/')
self._root.Scan()
def GetRoot(self):
"""Get the root Node of the device tree
Returns:
The root Node object
"""
return self._root
def GetSubNodes(self, node):
"""Returns a list of sub-nodes of a given node
......
......@@ -94,22 +94,6 @@ class FdtNormal(Fdt):
"""
return self._fdt
def Scan(self):
"""Scan a device tree, building up a tree of Node objects
This fills in the self._root property
"""
self._root = Node(self, 0, '/', '/')
self._root.Scan()
def GetRoot(self):
"""Get the root Node of the device tree
Returns:
The root Node object
"""
return self._root
def GetProps(self, node):
"""Get all properties from a node.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册