|
@@ -25,6 +25,7 @@ enum {
|
|
MEMBLOCK_NONE = 0x0, /* No special request */
|
|
MEMBLOCK_NONE = 0x0, /* No special request */
|
|
MEMBLOCK_HOTPLUG = 0x1, /* hotpluggable region */
|
|
MEMBLOCK_HOTPLUG = 0x1, /* hotpluggable region */
|
|
MEMBLOCK_MIRROR = 0x2, /* mirrored region */
|
|
MEMBLOCK_MIRROR = 0x2, /* mirrored region */
|
|
|
|
+ MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */
|
|
};
|
|
};
|
|
|
|
|
|
struct memblock_region {
|
|
struct memblock_region {
|
|
@@ -82,6 +83,7 @@ bool memblock_overlaps_region(struct memblock_type *type,
|
|
int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size);
|
|
int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size);
|
|
int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size);
|
|
int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size);
|
|
int memblock_mark_mirror(phys_addr_t base, phys_addr_t size);
|
|
int memblock_mark_mirror(phys_addr_t base, phys_addr_t size);
|
|
|
|
+int memblock_mark_nomap(phys_addr_t base, phys_addr_t size);
|
|
ulong choose_memblock_flags(void);
|
|
ulong choose_memblock_flags(void);
|
|
|
|
|
|
/* Low level functions */
|
|
/* Low level functions */
|
|
@@ -184,6 +186,11 @@ static inline bool memblock_is_mirror(struct memblock_region *m)
|
|
return m->flags & MEMBLOCK_MIRROR;
|
|
return m->flags & MEMBLOCK_MIRROR;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline bool memblock_is_nomap(struct memblock_region *m)
|
|
|
|
+{
|
|
|
|
+ return m->flags & MEMBLOCK_NOMAP;
|
|
|
|
+}
|
|
|
|
+
|
|
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
|
|
#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
|
|
int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn,
|
|
int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn,
|
|
unsigned long *end_pfn);
|
|
unsigned long *end_pfn);
|
|
@@ -319,6 +326,7 @@ phys_addr_t memblock_start_of_DRAM(void);
|
|
phys_addr_t memblock_end_of_DRAM(void);
|
|
phys_addr_t memblock_end_of_DRAM(void);
|
|
void memblock_enforce_memory_limit(phys_addr_t memory_limit);
|
|
void memblock_enforce_memory_limit(phys_addr_t memory_limit);
|
|
int memblock_is_memory(phys_addr_t addr);
|
|
int memblock_is_memory(phys_addr_t addr);
|
|
|
|
+int memblock_is_map_memory(phys_addr_t addr);
|
|
int memblock_is_region_memory(phys_addr_t base, phys_addr_t size);
|
|
int memblock_is_region_memory(phys_addr_t base, phys_addr_t size);
|
|
int memblock_is_reserved(phys_addr_t addr);
|
|
int memblock_is_reserved(phys_addr_t addr);
|
|
bool memblock_is_region_reserved(phys_addr_t base, phys_addr_t size);
|
|
bool memblock_is_region_reserved(phys_addr_t base, phys_addr_t size);
|