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 * 11*1a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 124ed6552fSKumar Gala */ 134ed6552fSKumar Gala 144ed6552fSKumar Gala #define MAX_LMB_REGIONS 8 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 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