uboot/include/lmb.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2#ifndef _LINUX_LMB_H
   3#define _LINUX_LMB_H
   4#ifdef __KERNEL__
   5
   6#include <asm/types.h>
   7#include <asm/u-boot.h>
   8
   9/*
  10 * Logical memory blocks.
  11 *
  12 * Copyright (C) 2001 Peter Bergner, IBM Corp.
  13 */
  14
  15#define MAX_LMB_REGIONS 8
  16
  17struct lmb_property {
  18        phys_addr_t base;
  19        phys_size_t size;
  20};
  21
  22struct lmb_region {
  23        unsigned long cnt;
  24        phys_size_t size;
  25        struct lmb_property region[MAX_LMB_REGIONS+1];
  26};
  27
  28struct lmb {
  29        struct lmb_region memory;
  30        struct lmb_region reserved;
  31};
  32
  33extern void lmb_init(struct lmb *lmb);
  34extern void lmb_init_and_reserve(struct lmb *lmb, struct bd_info *bd,
  35                                 void *fdt_blob);
  36extern void lmb_init_and_reserve_range(struct lmb *lmb, phys_addr_t base,
  37                                       phys_size_t size, void *fdt_blob);
  38extern long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size);
  39extern long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size);
  40extern phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align);
  41extern phys_addr_t lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
  42                            phys_addr_t max_addr);
  43extern phys_addr_t __lmb_alloc_base(struct lmb *lmb, phys_size_t size, ulong align,
  44                              phys_addr_t max_addr);
  45extern phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base,
  46                                  phys_size_t size);
  47extern phys_size_t lmb_get_free_size(struct lmb *lmb, phys_addr_t addr);
  48extern int lmb_is_reserved(struct lmb *lmb, phys_addr_t addr);
  49extern long lmb_free(struct lmb *lmb, phys_addr_t base, phys_size_t size);
  50
  51extern void lmb_dump_all(struct lmb *lmb);
  52extern void lmb_dump_all_force(struct lmb *lmb);
  53
  54static inline phys_size_t
  55lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
  56{
  57        return type->region[region_nr].size;
  58}
  59
  60void board_lmb_reserve(struct lmb *lmb);
  61void arch_lmb_reserve(struct lmb *lmb);
  62
  63#endif /* __KERNEL__ */
  64
  65#endif /* _LINUX_LMB_H */
  66