physmem_info
memcpy(res, physmem_info.reserved, sizeof(res));
physmem_info.info_source = MEM_DETECT_DIAG500_STOR_LIMIT;
physmem_info.info_source = MEM_DETECT_SCLP_READ_INFO;
physmem_info.info_source = MEM_DETECT_BIN_SEARCH;
struct physmem_info __bootdata(physmem_info);
physmem_info.info_source = MEM_DETECT_SCLP_STOR_INFO;
} else if (physmem_info.info_source == MEM_DETECT_DIAG500_STOR_LIMIT) {
physmem_info.info_source = MEM_DETECT_SCLP_READ_INFO;
physmem_info.info_source = MEM_DETECT_DIAG260;
physmem_info.usable = limit;
get_physmem_info_source(), physmem_info.info_source);
physmem_info.reserved[type].start = addr;
physmem_info.reserved[type].end = addr + size;
boot_debug("%-14s 0x%016lx-0x%016lx %s\n", "Free:", physmem_info.reserved[type].start,
physmem_info.reserved[type].end, get_rr_type_name(type));
physmem_info.reserved[type].start = 0;
physmem_info.reserved[type].end = 0;
unsigned int nranges = from_ranges ?: physmem_info.range_count;
return &physmem_info.online[n];
if (unlikely(!physmem_info.online_extended)) {
physmem_info.online_extended = (struct physmem_range *)physmem_alloc_range(
struct reserved_range *range = &physmem_info.reserved[type];
return &physmem_info.online_extended[n - MEM_INLINED_ENTRIES];
if (physmem_info.range_count) {
range = __get_physmem_range_ptr(physmem_info.range_count - 1);
range = __get_physmem_range_ptr(physmem_info.range_count);
physmem_info.range_count++;
if (memgap_start && physmem_info.info_source == MEM_DETECT_DIAG260) {
switch (physmem_info.info_source) {
for (range = &physmem_info.reserved[t], *p_start = range->start, *p_end = range->end; \
range = &physmem_info.reserved[*t];
range = &physmem_info.reserved[*t];
*addr = physmem_info.reserved[type].start;
*size = physmem_info.reserved[type].end - physmem_info.reserved[type].start;
#define AMODE31_START (physmem_info.reserved[RR_AMODE31].start)
#define AMODE31_END (physmem_info.reserved[RR_AMODE31].end)
extern struct physmem_info physmem_info;
if (n >= physmem_info.range_count) {
*start = (unsigned long)physmem_info.online[n].start;
*end = (unsigned long)physmem_info.online[n].end;
*start = (unsigned long)physmem_info.online_extended[n - MEM_INLINED_ENTRIES].start;
*end = (unsigned long)physmem_info.online_extended[n - MEM_INLINED_ENTRIES].end;
if (respect_usable_limit && physmem_info.usable) {
if (*start >= physmem_info.usable)
if (*end > physmem_info.usable)
*end = physmem_info.usable;
struct physmem_info __bootdata(physmem_info);
get_physmem_info_source(), physmem_info.info_source);
memblock_reserve(physmem_info.reserved[RR_AMODE31].start, __eamode31 - __samode31);
memmove((void *)physmem_info.reserved[RR_AMODE31].start, __samode31, amode31_size);
physmem_info.range_count = 0;