Lines Matching +full:entry +full:- +full:name
4 # SPDX-License-Identifier: GPL-2.0+
12 import entry
13 from entry import Entry
27 _name: Image name
30 _pad_before: Number of bytes before the first entry starts. This
31 effectively changes the place where entry position 0 starts
32 _pad_after: Number of bytes after the last entry ends. The last
33 entry will finish on or before this boundary
34 _pad_byte: Byte to use to pad the image where there is no entry
37 must be in-order in the device tree description
38 _skip_at_start: Number of bytes before the first entry starts. These
40 if _pad_before is 16, then the first entry would start at 16.
41 An entry with pos = 20 would in fact be written at position 4
45 memory address (like 0xff800000) is the first entry position.
50 def __init__(self, name, node): argument
52 self._name = name
70 self._align_size = fdt_util.GetInt(self._node, 'align-size')
74 self._pad_before = fdt_util.GetInt(self._node, 'pad-before', 0)
75 self._pad_after = fdt_util.GetInt(self._node, 'pad-after', 0)
76 self._pad_byte = fdt_util.GetInt(self._node, 'pad-byte', 0)
80 self._sort = fdt_util.GetBool(self._node, 'sort-by-pos')
81 self._end_4gb = fdt_util.GetBool(self._node, 'end-at-4gb')
83 self._Raise("Image size must be provided when using end-at-4gb")
85 self._skip_at_start = 0x100000000 - self._size
90 for entry in self._entries.values():
91 contents_size = max(contents_size, entry.pos + entry.size)
93 contents_size -= self._skip_at_start
106 self._Raise("Size %#x (%d) does not match align-size %#x (%d)" %
121 self._entries[node.name] = Entry.Create(self, node)
124 """Find an entry type in the image
127 etype: Entry type to find
129 entry matching that type, or None if not found
131 for entry in self._entries.values():
132 if entry.etype == etype:
133 return entry
137 """Call ObtainContents() for each entry
139 This calls each entry's ObtainContents() a few times until they all
140 return True. We stop calling an entry's function once it returns
141 True. This allows the contents of one entry to depend on another.
148 for entry in todo:
149 if not entry.ObtainContents():
150 next_todo.append(entry)
155 def _SetEntryPosSize(self, name, pos, size): argument
156 """Set the position and size of an entry
159 name: Entry name to update
163 entry = self._entries.get(name)
164 if not entry:
165 self._Raise("Unable to set pos/size for unknown entry '%s'" % name)
166 entry.SetPositionSize(self._skip_at_start + pos, size)
171 This calls each entry's GetPositions() method. If it returns a list
174 for entry in self._entries.values():
175 pos_dict = entry.GetPositions()
176 for name, info in pos_dict.iteritems():
177 self._SetEntryPosSize(name, *info)
182 for entry in self._entries.values():
183 pos = entry.Pack(pos)
187 entries = sorted(self._entries.values(), key=lambda entry: entry.pos)
189 for entry in entries:
190 self._entries[entry._node.name] = entry
198 for entry in self._entries.values():
199 if (entry.pos < self._skip_at_start or
200 entry.pos >= self._skip_at_start + self._size):
201 entry.Raise("Position %#x (%d) is outside the image starting "
203 (entry.pos, entry.pos, self._skip_at_start,
205 if entry.pos < pos:
206 entry.Raise("Position %#x (%d) overlaps with previous entry '%s' "
208 (entry.pos, entry.pos, prev_name, pos, pos))
209 pos = entry.pos + entry.size
210 prev_name = entry.GetPath()
213 """Call the ProcessContents() method for each entry
215 This is intended to adjust the contents as needed by the entry type.
217 for entry in self._entries.values():
218 entry.ProcessContents()
226 for entry in self._entries.values():
227 data = entry.GetData()
228 fd.seek(self._pad_before + entry.pos - self._skip_at_start)