14ed6552fSKumar Gala #ifndef _LINUX_LMB_H
24ed6552fSKumar Gala #define _LINUX_LMB_H
34ed6552fSKumar Gala #ifdef __KERNEL__
44ed6552fSKumar Gala
54ed6552fSKumar Gala #include <asm/types.h>
64ed6552fSKumar Gala /*
74ed6552fSKumar Gala * Logical memory blocks.
84ed6552fSKumar Gala *
94ed6552fSKumar Gala * Copyright (C) 2001 Peter Bergner, IBM Corp.
104ed6552fSKumar Gala *
111a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+
124ed6552fSKumar Gala */
134ed6552fSKumar Gala
14*a78c73bbSJoseph Chen #define MAX_LMB_REGIONS 16
154ed6552fSKumar Gala
164ed6552fSKumar Gala struct lmb_property {
17391fd93aSBecky Bruce phys_addr_t base;
18391fd93aSBecky Bruce phys_size_t size;
194ed6552fSKumar Gala };
204ed6552fSKumar Gala
214ed6552fSKumar Gala struct lmb_region {
224ed6552fSKumar Gala unsigned long cnt;
23391fd93aSBecky Bruce phys_size_t size;
244ed6552fSKumar Gala struct lmb_property region[MAX_LMB_REGIONS+1];
254ed6552fSKumar Gala };
264ed6552fSKumar Gala
274ed6552fSKumar Gala struct lmb {
284ed6552fSKumar Gala struct lmb_region memory;
294ed6552fSKumar Gala struct lmb_region reserved;
304ed6552fSKumar Gala };
314ed6552fSKumar Gala
324ed6552fSKumar Gala extern struct lmb lmb;
334ed6552fSKumar Gala
344ed6552fSKumar Gala extern void lmb_init(struct lmb *lmb);
35391fd93aSBecky Bruce extern long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size);
36391fd93aSBecky Bruce extern long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size);
37391fd93aSBecky Bruce extern phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align);
38391fd93aSBecky Bruce extern phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
39391fd93aSBecky Bruce phys_addr_t max_addr);
40391fd93aSBecky Bruce extern phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
41391fd93aSBecky Bruce phys_addr_t max_addr);
42391fd93aSBecky Bruce extern int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr);
4398874ff3SAndy Fleming extern long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size);
444ed6552fSKumar Gala
454ed6552fSKumar Gala extern void lmb_dump_all(struct lmb *lmb);
464ed6552fSKumar Gala
47391fd93aSBecky Bruce static inline phys_size_t
lmb_size_bytes(struct lmb_region * type,unsigned long region_nr)484ed6552fSKumar Gala lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
494ed6552fSKumar Gala {
504ed6552fSKumar Gala return type->region[region_nr].size;
514ed6552fSKumar Gala }
52a16028daSMike Frysinger
53a16028daSMike Frysinger void board_lmb_reserve(struct lmb *lmb);
54a16028daSMike Frysinger void arch_lmb_reserve(struct lmb *lmb);
55a16028daSMike Frysinger
564ed6552fSKumar Gala #endif /* __KERNEL__ */
574ed6552fSKumar Gala
584ed6552fSKumar Gala #endif /* _LINUX_LMB_H */
59