home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / bootmem.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.2 KB  |  121 lines

  1. /*
  2.  * Discontiguous memory support, Kanoj Sarcar, SGI, Nov 1999
  3.  */
  4. #ifndef _LINUX_BOOTMEM_H
  5. #define _LINUX_BOOTMEM_H
  6.  
  7. #include <asm/pgtable.h>
  8. #include <asm/dma.h>
  9. #include <linux/cache.h>
  10. #include <linux/init.h>
  11. #include <linux/mmzone.h>
  12.  
  13. /*
  14.  *  simple boot-time physical memory area allocator.
  15.  */
  16.  
  17. extern unsigned long max_low_pfn;
  18. extern unsigned long min_low_pfn;
  19.  
  20. /*
  21.  * highest page
  22.  */
  23. extern unsigned long max_pfn;
  24.  
  25. #ifdef CONFIG_CRASH_DUMP
  26. extern unsigned long saved_max_pfn;
  27. #endif
  28.  
  29. /*
  30.  * node_bootmem_map is a map pointer - the bits represent all physical 
  31.  * memory pages (including holes) on the node.
  32.  */
  33. typedef struct bootmem_data {
  34.     unsigned long node_boot_start;
  35.     unsigned long node_low_pfn;
  36.     void *node_bootmem_map;
  37.     unsigned long last_offset;
  38.     unsigned long last_pos;
  39.     unsigned long last_success;    /* Previous allocation point.  To speed
  40.                      * up searching */
  41.     struct list_head list;
  42. } bootmem_data_t;
  43.  
  44. extern unsigned long __init bootmem_bootmap_pages (unsigned long);
  45. extern unsigned long __init init_bootmem (unsigned long addr, unsigned long memend);
  46. extern void __init free_bootmem (unsigned long addr, unsigned long size);
  47. extern void * __init __alloc_bootmem (unsigned long size, unsigned long align, unsigned long goal);
  48. extern void * __init __alloc_bootmem_nopanic (unsigned long size, unsigned long align, unsigned long goal);
  49. extern void * __init __alloc_bootmem_low(unsigned long size,
  50.                      unsigned long align,
  51.                      unsigned long goal);
  52. extern void * __init __alloc_bootmem_low_node(pg_data_t *pgdat,
  53.                           unsigned long size,
  54.                           unsigned long align,
  55.                           unsigned long goal);
  56. extern void * __init __alloc_bootmem_core(struct bootmem_data *bdata,
  57.         unsigned long size, unsigned long align, unsigned long goal,
  58.         unsigned long limit);
  59. #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
  60. extern void __init reserve_bootmem (unsigned long addr, unsigned long size);
  61. #define alloc_bootmem(x) \
  62.     __alloc_bootmem((x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
  63. #define alloc_bootmem_low(x) \
  64.     __alloc_bootmem_low((x), SMP_CACHE_BYTES, 0)
  65. #define alloc_bootmem_pages(x) \
  66.     __alloc_bootmem((x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
  67. #define alloc_bootmem_low_pages(x) \
  68.     __alloc_bootmem_low((x), PAGE_SIZE, 0)
  69. #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */
  70. extern unsigned long __init free_all_bootmem (void);
  71. extern void * __init __alloc_bootmem_node (pg_data_t *pgdat, unsigned long size, unsigned long align, unsigned long goal);
  72. extern unsigned long __init init_bootmem_node (pg_data_t *pgdat, unsigned long freepfn, unsigned long startpfn, unsigned long endpfn);
  73. extern void __init reserve_bootmem_node (pg_data_t *pgdat, unsigned long physaddr, unsigned long size);
  74. extern void __init free_bootmem_node (pg_data_t *pgdat, unsigned long addr, unsigned long size);
  75. extern unsigned long __init free_all_bootmem_node (pg_data_t *pgdat);
  76. #ifndef CONFIG_HAVE_ARCH_BOOTMEM_NODE
  77. #define alloc_bootmem_node(pgdat, x) \
  78.     __alloc_bootmem_node((pgdat), (x), SMP_CACHE_BYTES, __pa(MAX_DMA_ADDRESS))
  79. #define alloc_bootmem_pages_node(pgdat, x) \
  80.     __alloc_bootmem_node((pgdat), (x), PAGE_SIZE, __pa(MAX_DMA_ADDRESS))
  81. #define alloc_bootmem_low_pages_node(pgdat, x) \
  82.     __alloc_bootmem_low_node((pgdat), (x), PAGE_SIZE, 0)
  83. #endif /* !CONFIG_HAVE_ARCH_BOOTMEM_NODE */
  84.  
  85. #ifdef CONFIG_HAVE_ARCH_ALLOC_REMAP
  86. extern void *alloc_remap(int nid, unsigned long size);
  87. #else
  88. static inline void *alloc_remap(int nid, unsigned long size)
  89. {
  90.     return NULL;
  91. }
  92. #endif
  93.  
  94. extern unsigned long __initdata nr_kernel_pages;
  95. extern unsigned long __initdata nr_all_pages;
  96.  
  97. extern void *__init alloc_large_system_hash(const char *tablename,
  98.                         unsigned long bucketsize,
  99.                         unsigned long numentries,
  100.                         int scale,
  101.                         int flags,
  102.                         unsigned int *_hash_shift,
  103.                         unsigned int *_hash_mask,
  104.                         unsigned long limit);
  105.  
  106. #define HASH_HIGHMEM    0x00000001    /* Consider highmem? */
  107. #define HASH_EARLY    0x00000002    /* Allocating during early boot? */
  108.  
  109. /* Only NUMA needs hash distribution.
  110.  * IA64 is known to have sufficient vmalloc space.
  111.  */
  112. #if defined(CONFIG_NUMA) && defined(CONFIG_IA64)
  113. #define HASHDIST_DEFAULT 1
  114. #else
  115. #define HASHDIST_DEFAULT 0
  116. #endif
  117. extern int __initdata hashdist;        /* Distribute hashes across NUMA nodes? */
  118.  
  119.  
  120. #endif /* _LINUX_BOOTMEM_H */
  121.