xref: /rk3399_rockchip-uboot/include/lmb.h (revision a78c73bb661fb82d665f69745fc5b80d5c32b57f)
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