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