/* * Copyright (c) STMicroelectronics Limited * Author: Stuart Menefy * * Derived from mm/bigphysarea.c which was: * Copyright (c) 1996 by Matt Welsh. * Extended by Roger Butenuth (butenuth@uni-paderborn.de), October 1997 * Extended for linux-2.1.121 till 2.4.0 (June 2000) * by Pauline Middelink * * This is a set of routines which allow you to reserve a large (?) * amount of physical memory at boot-time, which can be allocated/deallocated * by drivers. This memory is intended to be used for devices such as * video framegrabbers which need a lot of physical RAM (above the amount * allocated by kmalloc). This is by no means efficient or recommended; * to be used only in extreme circumstances. */ #ifndef __LINUX_BPA2_H #define __LINUX_BPA2_H #include /* * BPA2 Interface */ #define BPA2_NORMAL 0x00000001 struct bpa2_partition_desc { const char *name; unsigned long start; unsigned long size; unsigned long flags; const char **aka; }; struct bpa2_part; void bpa2_init(struct bpa2_partition_desc *partdescs, int nparts); struct bpa2_part *bpa2_find_part(const char *name); int bpa2_low_part(struct bpa2_part *part); #if defined(CONFIG_BPA2_ALLOC_TRACE) #define bpa2_alloc_pages(part, count, align, priority) \ __bpa2_alloc_pages(part, count, align, priority, \ __FILE__, __LINE__) #else #define bpa2_alloc_pages(part, count, align, priority) \ __bpa2_alloc_pages(part, count, align, priority, NULL, 0) #endif unsigned long __bpa2_alloc_pages(struct bpa2_part *part, int count, int align, int priority, const char *trace_file, int trace_line); void bpa2_free_pages(struct bpa2_part *part, unsigned long base); void bpa2_memory(struct bpa2_part *part, unsigned long *base, unsigned long *size); /* * Backward compatibility interface (bigphysarea) */ /* Original interface */ #define bigphysarea_alloc(size) \ bigphysarea_alloc_pages(PAGE_ALIGN(size) >> PAGE_SHIFT, \ 1, GFP_KERNEL) #define bigphysarea_free(addr, size) \ bigphysarea_free_pages(addr) /* New(er) interface */ #if defined(CONFIG_BPA2_ALLOC_TRACE) #define bigphysarea_alloc_pages(count, align, priority) \ __bigphysarea_alloc_pages(count, align, priority, \ __FILE__, __LINE__) #else #define bigphysarea_alloc_pages(count, align, priority) \ __bigphysarea_alloc_pages(count, align, priority, NULL, 0) #endif caddr_t __bigphysarea_alloc_pages(int count, int align, int priority, const char *trace_file, int trace_line); void bigphysarea_free_pages(caddr_t base); /* low level interface */ void bigphysarea_memory(unsigned long *base, unsigned long *size); #endif /* __LINUX_BPA2_H */