18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 38c2ecf20Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 48c2ecf20Sopenharmony_ci * for more details. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * This file contains NUMA specific prototypes and definitions. 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * 2002/08/05 Erich Focht <efocht@ess.nec.de> 98c2ecf20Sopenharmony_ci * 108c2ecf20Sopenharmony_ci */ 118c2ecf20Sopenharmony_ci#ifndef _ASM_IA64_NUMA_H 128c2ecf20Sopenharmony_ci#define _ASM_IA64_NUMA_H 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#ifdef CONFIG_NUMA 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#include <linux/cache.h> 188c2ecf20Sopenharmony_ci#include <linux/cpumask.h> 198c2ecf20Sopenharmony_ci#include <linux/numa.h> 208c2ecf20Sopenharmony_ci#include <linux/smp.h> 218c2ecf20Sopenharmony_ci#include <linux/threads.h> 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#include <asm/mmzone.h> 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ciextern u16 cpu_to_node_map[NR_CPUS] __cacheline_aligned; 268c2ecf20Sopenharmony_ciextern cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned; 278c2ecf20Sopenharmony_ciextern pg_data_t *pgdat_list[MAX_NUMNODES]; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/* Stuff below this line could be architecture independent */ 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ciextern int num_node_memblks; /* total number of memory chunks */ 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci/* 348c2ecf20Sopenharmony_ci * List of node memory chunks. Filled when parsing SRAT table to 358c2ecf20Sopenharmony_ci * obtain information about memory nodes. 368c2ecf20Sopenharmony_ci*/ 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistruct node_memblk_s { 398c2ecf20Sopenharmony_ci unsigned long start_paddr; 408c2ecf20Sopenharmony_ci unsigned long size; 418c2ecf20Sopenharmony_ci int nid; /* which logical node contains this chunk? */ 428c2ecf20Sopenharmony_ci int bank; /* which mem bank on this node */ 438c2ecf20Sopenharmony_ci}; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistruct node_cpuid_s { 468c2ecf20Sopenharmony_ci u16 phys_id; /* id << 8 | eid */ 478c2ecf20Sopenharmony_ci int nid; /* logical node containing this CPU */ 488c2ecf20Sopenharmony_ci}; 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ciextern struct node_memblk_s node_memblk[NR_NODE_MEMBLKS]; 518c2ecf20Sopenharmony_ciextern struct node_cpuid_s node_cpuid[NR_CPUS]; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci/* 548c2ecf20Sopenharmony_ci * ACPI 2.0 SLIT (System Locality Information Table) 558c2ecf20Sopenharmony_ci * http://devresource.hp.com/devresource/Docs/TechPapers/IA64/slit.pdf 568c2ecf20Sopenharmony_ci * 578c2ecf20Sopenharmony_ci * This is a matrix with "distances" between nodes, they should be 588c2ecf20Sopenharmony_ci * proportional to the memory access latency ratios. 598c2ecf20Sopenharmony_ci */ 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ciextern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES]; 628c2ecf20Sopenharmony_ci#define slit_distance(from,to) (numa_slit[(from) * MAX_NUMNODES + (to)]) 638c2ecf20Sopenharmony_ciextern int __node_distance(int from, int to); 648c2ecf20Sopenharmony_ci#define node_distance(from,to) __node_distance(from, to) 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ciextern int paddr_to_nid(unsigned long paddr); 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci#define local_nodeid (cpu_to_node_map[smp_processor_id()]) 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci#define numa_off 0 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ciextern void map_cpu_to_node(int cpu, int nid); 738c2ecf20Sopenharmony_ciextern void unmap_cpu_from_node(int cpu, int nid); 748c2ecf20Sopenharmony_ciextern void numa_clear_node(int cpu); 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci#else /* !CONFIG_NUMA */ 778c2ecf20Sopenharmony_ci#define map_cpu_to_node(cpu, nid) do{}while(0) 788c2ecf20Sopenharmony_ci#define unmap_cpu_from_node(cpu, nid) do{}while(0) 798c2ecf20Sopenharmony_ci#define paddr_to_nid(addr) 0 808c2ecf20Sopenharmony_ci#define numa_clear_node(cpu) do { } while (0) 818c2ecf20Sopenharmony_ci#endif /* CONFIG_NUMA */ 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci#endif /* _ASM_IA64_NUMA_H */ 84