Lines Matching full:base

24 		debug("    memory.reg[0x%lx].base   = 0x%llx\n", i,  in lmb_dump_all()
25 (unsigned long long)lmb->memory.region[i].base); in lmb_dump_all()
35 debug(" reserved.reg[0x%lx].base = 0x%llx\n", i, in lmb_dump_all()
36 (unsigned long long)lmb->reserved.region[i].base); in lmb_dump_all()
66 phys_addr_t base1 = rgn->region[r1].base; in lmb_regions_adjacent()
68 phys_addr_t base2 = rgn->region[r2].base; in lmb_regions_adjacent()
79 rgn->region[i].base = rgn->region[i + 1].base; in lmb_remove_region()
85 /* Assumption: base addr of region 1 < base addr of region 2 */
133 void lmb_init_and_reserve_range(struct lmb *lmb, phys_addr_t base, in lmb_init_and_reserve_range() argument
137 lmb_add(lmb, base, size); in lmb_init_and_reserve_range()
142 static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t size) in lmb_add_region() argument
148 rgn->region[0].base = base; in lmb_add_region()
156 phys_addr_t rgnbase = rgn->region[i].base; in lmb_add_region()
159 if ((rgnbase == base) && (rgnsize == size)) in lmb_add_region()
163 adjacent = lmb_addrs_adjacent(base, size, rgnbase, rgnsize); in lmb_add_region()
165 rgn->region[i].base -= size; in lmb_add_region()
173 } else if (lmb_addrs_overlap(base, size, rgnbase, rgnsize)) { in lmb_add_region()
191 if (base < rgn->region[i].base) { in lmb_add_region()
192 rgn->region[i + 1].base = rgn->region[i].base; in lmb_add_region()
195 rgn->region[i + 1].base = base; in lmb_add_region()
201 if (base < rgn->region[0].base) { in lmb_add_region()
202 rgn->region[0].base = base; in lmb_add_region()
212 long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size) in lmb_add() argument
216 return lmb_add_region(_rgn, base, size); in lmb_add()
219 long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size) in lmb_free() argument
223 phys_addr_t end = base + size - 1; in lmb_free()
228 /* Find the region where (base, size) belongs to */ in lmb_free()
230 rgnbegin = rgn->region[i].base; in lmb_free()
233 if ((rgnbegin <= base) && (end <= rgnend)) in lmb_free()
242 if ((rgnbegin == base) && (rgnend == end)) { in lmb_free()
248 if (rgnbegin == base) { in lmb_free()
249 rgn->region[i].base = end + 1; in lmb_free()
264 rgn->region[i].size = base - rgn->region[i].base; in lmb_free()
268 long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size) in lmb_reserve() argument
272 return lmb_add_region(_rgn, base, size); in lmb_reserve()
275 static long lmb_overlaps_region(struct lmb_region *rgn, phys_addr_t base, in lmb_overlaps_region() argument
281 phys_addr_t rgnbase = rgn->region[i].base; in lmb_overlaps_region()
283 if (lmb_addrs_overlap(base, size, rgnbase, rgnsize)) in lmb_overlaps_region()
316 phys_addr_t base = 0; in __lmb_alloc_base() local
320 phys_addr_t lmbbase = lmb->memory.region[i].base; in __lmb_alloc_base()
326 base = lmb_align_down(lmbbase + lmbsize - size, align); in __lmb_alloc_base()
328 base = lmbbase + lmbsize; in __lmb_alloc_base()
329 if (base < lmbbase) in __lmb_alloc_base()
330 base = -1; in __lmb_alloc_base()
331 base = min(base, max_addr); in __lmb_alloc_base()
332 base = lmb_align_down(base - size, align); in __lmb_alloc_base()
336 while (base && lmbbase <= base) { in __lmb_alloc_base()
337 rgn = lmb_overlaps_region(&lmb->reserved, base, size); in __lmb_alloc_base()
340 if (lmb_add_region(&lmb->reserved, base, in __lmb_alloc_base()
343 return base; in __lmb_alloc_base()
345 res_base = lmb->reserved.region[rgn].base; in __lmb_alloc_base()
348 base = lmb_align_down(res_base - size, align); in __lmb_alloc_base()
358 phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size) in lmb_alloc_addr() argument
363 rgn = lmb_overlaps_region(&lmb->memory, base, size); in lmb_alloc_addr()
369 if (lmb_addrs_overlap(lmb->memory.region[rgn].base, in lmb_alloc_addr()
371 base + size - 1, 1)) { in lmb_alloc_addr()
373 if (lmb_reserve(lmb, base, size) >= 0) in lmb_alloc_addr()
374 return base; in lmb_alloc_addr()
390 if (addr < lmb->reserved.region[i].base) { in lmb_get_free_size()
392 return lmb->reserved.region[i].base - addr; in lmb_get_free_size()
394 if (lmb->reserved.region[i].base + in lmb_get_free_size()
401 return lmb->memory.region[lmb->memory.cnt - 1].base + in lmb_get_free_size()
412 phys_addr_t upper = lmb->reserved.region[i].base + in lmb_is_reserved()
414 if ((addr >= lmb->reserved.region[i].base) && (addr <= upper)) in lmb_is_reserved()