/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef _MM_INTERNAL_H
#define _MM_INTERNAL_H

/*
 * Enable memblock_dbg() messages
 */
#ifdef MEMBLOCK_DEBUG
static int memblock_debug = 1;
#endif

#define pr_warn_ratelimited(fmt, ...)    printf(fmt, ##__VA_ARGS__)

#define K(x) ((x) << (PAGE_SHIFT-10))

bool mirrored_kernelcore = false;

struct page {};
static inline void *page_address(struct page *page)
{
	BUG();
	return page;
}

static inline struct page *virt_to_page(void *virt)
{
	BUG();
	return virt;
}

#define for_each_valid_pfn(pfn, start_pfn, end_pfn)			 \
	for ((pfn) = (start_pfn); (pfn) < (end_pfn); (pfn)++)

static inline void *kasan_reset_tag(const void *addr)
{
	return (void *)addr;
}

static inline bool __is_kernel(unsigned long addr)
{
	return false;
}

#define for_each_valid_pfn(pfn, start_pfn, end_pfn)                     \
       for ((pfn) = (start_pfn); (pfn) < (end_pfn); (pfn)++)

#define __SetPageReserved(p)	((void)(p))

static inline bool kho_scratch_overlap(phys_addr_t phys, size_t size)
{
	return false;
}

#endif
