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