xref: /rk3399_rockchip-uboot/include/lmb.h (revision 4ed6552f715983bfc7d212c1199a1f796f1144ad)
1*4ed6552fSKumar Gala #ifndef _LINUX_LMB_H
2*4ed6552fSKumar Gala #define _LINUX_LMB_H
3*4ed6552fSKumar Gala #ifdef __KERNEL__
4*4ed6552fSKumar Gala 
5*4ed6552fSKumar Gala #include <asm/types.h>
6*4ed6552fSKumar Gala /*
7*4ed6552fSKumar Gala  * Logical memory blocks.
8*4ed6552fSKumar Gala  *
9*4ed6552fSKumar Gala  * Copyright (C) 2001 Peter Bergner, IBM Corp.
10*4ed6552fSKumar Gala  *
11*4ed6552fSKumar Gala  * This program is free software; you can redistribute it and/or
12*4ed6552fSKumar Gala  * modify it under the terms of the GNU General Public License
13*4ed6552fSKumar Gala  * as published by the Free Software Foundation; either version
14*4ed6552fSKumar Gala  * 2 of the License, or (at your option) any later version.
15*4ed6552fSKumar Gala  */
16*4ed6552fSKumar Gala 
17*4ed6552fSKumar Gala #define MAX_LMB_REGIONS 8
18*4ed6552fSKumar Gala 
19*4ed6552fSKumar Gala struct lmb_property {
20*4ed6552fSKumar Gala 	ulong base;
21*4ed6552fSKumar Gala 	ulong size;
22*4ed6552fSKumar Gala };
23*4ed6552fSKumar Gala 
24*4ed6552fSKumar Gala struct lmb_region {
25*4ed6552fSKumar Gala 	unsigned long cnt;
26*4ed6552fSKumar Gala 	ulong size;
27*4ed6552fSKumar Gala 	struct lmb_property region[MAX_LMB_REGIONS+1];
28*4ed6552fSKumar Gala };
29*4ed6552fSKumar Gala 
30*4ed6552fSKumar Gala struct lmb {
31*4ed6552fSKumar Gala 	struct lmb_region memory;
32*4ed6552fSKumar Gala 	struct lmb_region reserved;
33*4ed6552fSKumar Gala };
34*4ed6552fSKumar Gala 
35*4ed6552fSKumar Gala extern struct lmb lmb;
36*4ed6552fSKumar Gala 
37*4ed6552fSKumar Gala extern void lmb_init(struct lmb *lmb);
38*4ed6552fSKumar Gala extern long lmb_add(struct lmb *lmb, ulong base, ulong size);
39*4ed6552fSKumar Gala extern long lmb_reserve(struct lmb *lmb, ulong base, ulong size);
40*4ed6552fSKumar Gala extern ulong lmb_alloc(struct lmb *lmb, ulong size, ulong align);
41*4ed6552fSKumar Gala extern ulong lmb_alloc_base(struct lmb *lmb, ulong size, ulong align, ulong max_addr);
42*4ed6552fSKumar Gala extern ulong __lmb_alloc_base(struct lmb *lmb, ulong size, ulong align, ulong max_addr);
43*4ed6552fSKumar Gala extern int lmb_is_reserved(struct lmb *lmb, ulong addr);
44*4ed6552fSKumar Gala 
45*4ed6552fSKumar Gala extern void lmb_dump_all(struct lmb *lmb);
46*4ed6552fSKumar Gala 
47*4ed6552fSKumar Gala static inline ulong
48*4ed6552fSKumar Gala lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
49*4ed6552fSKumar Gala {
50*4ed6552fSKumar Gala 	return type->region[region_nr].size;
51*4ed6552fSKumar Gala }
52*4ed6552fSKumar Gala #endif /* __KERNEL__ */
53*4ed6552fSKumar Gala 
54*4ed6552fSKumar Gala #endif /* _LINUX_LMB_H */
55