#ifndef _SYS_MEMNODE_H
#define _SYS_MEMNODE_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
#include <sys/lgrp.h>
#define MAX_MEM_NODES_PER_LGROUP 3
#ifndef MAX_MEM_NODES
#define MAX_MEM_NODES (8 * MAX_MEM_NODES_PER_LGROUP)
#endif
#define PFN_2_MEM_NODE(pfn) \
((max_mem_nodes > 1) ? plat_pfn_to_mem_node(pfn) : 0)
#define MEM_NODE_2_LGRPHAND(mnode) \
((max_mem_nodes > 1) ? plat_mem_node_to_lgrphand(mnode) : \
LGRP_DEFAULT_HANDLE)
extern int plat_pfn_to_mem_node(pfn_t);
extern void plat_assign_lgrphand_to_mem_node(lgrp_handle_t, int);
extern lgrp_handle_t plat_mem_node_to_lgrphand(int);
extern void plat_slice_add(pfn_t, pfn_t);
extern void plat_slice_del(pfn_t, pfn_t);
#pragma weak plat_pfn_to_mem_node
#pragma weak plat_mem_node_to_lgrphand
#pragma weak plat_slice_add
#pragma weak plat_slice_del
struct mem_node_conf {
int exists;
pfn_t physbase;
pfn_t physmax;
};
struct memlist;
extern void startup_build_mem_nodes(struct memlist *);
extern void mem_node_add_slice(pfn_t, pfn_t);
extern void mem_node_del_slice(pfn_t, pfn_t);
extern int mem_node_alloc(void);
extern pgcnt_t mem_node_memlist_pages(int, struct memlist *);
extern void mem_node_add_range(pfn_t, pfn_t);
extern void mem_node_del_range(pfn_t, pfn_t);
extern int plat_mnode_xcheck(pfn_t);
extern struct mem_node_conf mem_node_config[];
extern uint64_t mem_node_physalign;
extern int mem_node_pfn_shift;
extern int max_mem_nodes;
extern uint_t lgrp_plat_node_cnt;
#endif
#ifdef __cplusplus
}
#endif
#endif