Lines Matching full:element
60 struct e820_element *element;
62 element = calloc(1, sizeof(*element));
63 if (element == NULL) {
67 element->base = base;
68 element->end = end;
69 element->type = type;
71 return (element);
94 struct e820_element *element;
100 TAILQ_FOREACH(element, &e820_table, chain) {
102 element->base, element->end,
103 e820_get_type_name(element->type));
113 struct e820_element *element;
118 TAILQ_FOREACH(element, &e820_table, chain) {
140 TAILQ_FOREACH(element, &e820_table, chain) {
143 entry->base = element->base;
144 entry->length = element->end - element->base;
145 entry->type = element->type;
158 struct e820_element *element;
173 TAILQ_FOREACH(element, &e820_table, chain) {
174 if (element->end > base) {
184 * base is larger than of any existing element. Add new system
187 if (element == NULL) {
193 * System memory shouldn't overlap with any existing element.
195 assert(end >= element->base);
197 TAILQ_INSERT_BEFORE(element, new_element, chain);
210 if (element == NULL || element->type != E820_TYPE_MEMORY ||
211 (base < element->base || end > element->end))
214 if (base == element->base && end == element->end) {
219 * [ 0x1000, 0x4000] RAM <-- element
223 TAILQ_INSERT_BEFORE(element, new_element, chain);
224 TAILQ_REMOVE(&e820_table, element, chain);
225 free(element);
226 } else if (base == element->base) {
228 * New element at system memory base boundary. Add new
229 * element before current and adjust the base of the old
230 * element.
233 * [ 0x1000, 0x4000] RAM <-- element
236 * [ 0x2000, 0x4000] RAM <-- element
238 TAILQ_INSERT_BEFORE(element, new_element, chain);
239 element->base = end;
240 } else if (end == element->end) {
242 * New element at system memory end boundary. Add new
243 * element after current and adjust the end of the
244 * current element.
247 * [ 0x1000, 0x4000] RAM <-- element
249 * [ 0x1000, 0x3000] RAM <-- element
252 TAILQ_INSERT_AFTER(&e820_table, element, new_element, chain);
253 element->end = base;
256 * New element inside system memory entry. Split it by
257 * adding a system memory element and the new element
261 * [ 0x1000, 0x4000] RAM <-- element
265 * [ 0x3000, 0x4000] RAM <-- element
267 ram_element = e820_element_alloc(element->base, base,
272 TAILQ_INSERT_BEFORE(element, ram_element, chain);
273 TAILQ_INSERT_BEFORE(element, new_element, chain);
274 element->base = end;
278 * If the previous element has the same type and ends at our base
291 * If the next element has the same type and starts at our end
298 /* Merge new element into subsequent one. */
310 struct e820_element *element;
317 * search for an element which end is larger than the base parameter.
319 TAILQ_FOREACH(element, &e820_table, chain) {
320 if (element->end > base) {
325 if (element == NULL || end <= element->base) {
331 assert(element->type == E820_TYPE_MEMORY);
333 if (base == element->base) {
342 element->base = end;
343 } else if (end == element->end) {
352 element->end = base;
358 * [ 0x1000, 0x4000] RAM <-- element
361 * [ 0x3000, 0x4000] RAM <-- element
363 ram_element = e820_element_alloc(element->base, base,
368 TAILQ_INSERT_BEFORE(element, ram_element, chain);
369 element->base = end;
379 struct e820_element *element;
381 TAILQ_FOREACH_REVERSE(element, &e820_table, e820_table, chain) {
384 end = MIN(max_address, element->end);
385 base = roundup2(element->base, alignment);
392 if (element->type != E820_TYPE_MEMORY || end < base ||
413 struct e820_element *element;
415 TAILQ_FOREACH(element, &e820_table, chain) {
418 end = element->end;
419 base = MAX(min_address, roundup2(element->base, alignment));
426 if (element->type != E820_TYPE_MEMORY || end < base ||