162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
362306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
462306a36Sopenharmony_ci * for more details.
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (c) 2000 Silicon Graphics, Inc.  All rights reserved.
762306a36Sopenharmony_ci * Copyright (c) 2002 NEC Corp.
862306a36Sopenharmony_ci * Copyright (c) 2002 Erich Focht <efocht@ess.nec.de>
962306a36Sopenharmony_ci * Copyright (c) 2002 Kimio Suganuma <k-suganuma@da.jp.nec.com>
1062306a36Sopenharmony_ci */
1162306a36Sopenharmony_ci#ifndef _ASM_IA64_NODEDATA_H
1262306a36Sopenharmony_ci#define _ASM_IA64_NODEDATA_H
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include <linux/numa.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#include <asm/percpu.h>
1762306a36Sopenharmony_ci#include <asm/mmzone.h>
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#ifdef CONFIG_NUMA
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/*
2262306a36Sopenharmony_ci * Node Data. One of these structures is located on each node of a NUMA system.
2362306a36Sopenharmony_ci */
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistruct pglist_data;
2662306a36Sopenharmony_cistruct ia64_node_data {
2762306a36Sopenharmony_ci	short			active_cpu_count;
2862306a36Sopenharmony_ci	short			node;
2962306a36Sopenharmony_ci	struct pglist_data	*pg_data_ptrs[MAX_NUMNODES];
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci/*
3462306a36Sopenharmony_ci * Return a pointer to the node_data structure for the executing cpu.
3562306a36Sopenharmony_ci */
3662306a36Sopenharmony_ci#define local_node_data		(local_cpu_data->node_data)
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci/*
3962306a36Sopenharmony_ci * Given a node id, return a pointer to the pg_data_t for the node.
4062306a36Sopenharmony_ci *
4162306a36Sopenharmony_ci * NODE_DATA 	- should be used in all code not related to system
4262306a36Sopenharmony_ci *		  initialization. It uses pernode data structures to minimize
4362306a36Sopenharmony_ci *		  offnode memory references. However, these structure are not
4462306a36Sopenharmony_ci *		  present during boot. This macro can be used once cpu_init
4562306a36Sopenharmony_ci *		  completes.
4662306a36Sopenharmony_ci */
4762306a36Sopenharmony_ci#define NODE_DATA(nid)		(local_node_data->pg_data_ptrs[nid])
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci/*
5062306a36Sopenharmony_ci * LOCAL_DATA_ADDR - This is to calculate the address of other node's
5162306a36Sopenharmony_ci *		     "local_node_data" at hot-plug phase. The local_node_data
5262306a36Sopenharmony_ci *		     is pointed by per_cpu_page. Kernel usually use it for
5362306a36Sopenharmony_ci *		     just executing cpu. However, when new node is hot-added,
5462306a36Sopenharmony_ci *		     the addresses of local data for other nodes are necessary
5562306a36Sopenharmony_ci *		     to update all of them.
5662306a36Sopenharmony_ci */
5762306a36Sopenharmony_ci#define LOCAL_DATA_ADDR(pgdat)  			\
5862306a36Sopenharmony_ci	((struct ia64_node_data *)((u64)(pgdat) + 	\
5962306a36Sopenharmony_ci				   L1_CACHE_ALIGN(sizeof(struct pglist_data))))
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci#endif /* CONFIG_NUMA */
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#endif /* _ASM_IA64_NODEDATA_H */
64