xref: /rk3399_rockchip-uboot/include/lmb.h (revision a16028da63c78001823bfb375b3f6d9d86e5a534)
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  *
114ed6552fSKumar Gala  * This program is free software; you can redistribute it and/or
124ed6552fSKumar Gala  * modify it under the terms of the GNU General Public License
134ed6552fSKumar Gala  * as published by the Free Software Foundation; either version
144ed6552fSKumar Gala  * 2 of the License, or (at your option) any later version.
154ed6552fSKumar Gala  */
164ed6552fSKumar Gala 
174ed6552fSKumar Gala #define MAX_LMB_REGIONS 8
184ed6552fSKumar Gala 
194ed6552fSKumar Gala struct lmb_property {
20391fd93aSBecky Bruce 	phys_addr_t base;
21391fd93aSBecky Bruce 	phys_size_t size;
224ed6552fSKumar Gala };
234ed6552fSKumar Gala 
244ed6552fSKumar Gala struct lmb_region {
254ed6552fSKumar Gala 	unsigned long cnt;
26391fd93aSBecky Bruce 	phys_size_t size;
274ed6552fSKumar Gala 	struct lmb_property region[MAX_LMB_REGIONS+1];
284ed6552fSKumar Gala };
294ed6552fSKumar Gala 
304ed6552fSKumar Gala struct lmb {
314ed6552fSKumar Gala 	struct lmb_region memory;
324ed6552fSKumar Gala 	struct lmb_region reserved;
334ed6552fSKumar Gala };
344ed6552fSKumar Gala 
354ed6552fSKumar Gala extern struct lmb lmb;
364ed6552fSKumar Gala 
374ed6552fSKumar Gala extern void lmb_init(struct lmb *lmb);
38391fd93aSBecky Bruce extern long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size);
39391fd93aSBecky Bruce extern long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size);
40391fd93aSBecky Bruce extern phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align);
41391fd93aSBecky Bruce extern phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
42391fd93aSBecky Bruce 			    phys_addr_t max_addr);
43391fd93aSBecky Bruce extern phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
44391fd93aSBecky Bruce 			      phys_addr_t max_addr);
45391fd93aSBecky Bruce extern int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr);
4698874ff3SAndy Fleming extern long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size);
474ed6552fSKumar Gala 
484ed6552fSKumar Gala extern void lmb_dump_all(struct lmb *lmb);
494ed6552fSKumar Gala 
50391fd93aSBecky Bruce static inline phys_size_t
514ed6552fSKumar Gala lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
524ed6552fSKumar Gala {
534ed6552fSKumar Gala 	return type->region[region_nr].size;
544ed6552fSKumar Gala }
55*a16028daSMike Frysinger 
56*a16028daSMike Frysinger void board_lmb_reserve(struct lmb *lmb);
57*a16028daSMike Frysinger void arch_lmb_reserve(struct lmb *lmb);
58*a16028daSMike Frysinger 
594ed6552fSKumar Gala #endif /* __KERNEL__ */
604ed6552fSKumar Gala 
614ed6552fSKumar Gala #endif /* _LINUX_LMB_H */
62