1d4b6f156SHuacai Chen /* SPDX-License-Identifier: GPL-2.0 */ 2d4b6f156SHuacai Chen /* 3d4b6f156SHuacai Chen * Author: Jianmin Lv <lvjianmin@loongson.cn> 4d4b6f156SHuacai Chen * Huacai Chen <chenhuacai@loongson.cn> 5d4b6f156SHuacai Chen * 6d4b6f156SHuacai Chen * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 7d4b6f156SHuacai Chen */ 8d4b6f156SHuacai Chen 9d4b6f156SHuacai Chen #ifndef _ASM_LOONGARCH_NUMA_H 10d4b6f156SHuacai Chen #define _ASM_LOONGARCH_NUMA_H 11d4b6f156SHuacai Chen 12d4b6f156SHuacai Chen #include <linux/nodemask.h> 13d4b6f156SHuacai Chen 14d4b6f156SHuacai Chen #define NODE_ADDRSPACE_SHIFT 44 15d4b6f156SHuacai Chen 16d4b6f156SHuacai Chen #define pa_to_nid(addr) (((addr) & 0xf00000000000) >> NODE_ADDRSPACE_SHIFT) 17d4b6f156SHuacai Chen #define nid_to_addrbase(nid) (_ULCAST_(nid) << NODE_ADDRSPACE_SHIFT) 18d4b6f156SHuacai Chen 19d4b6f156SHuacai Chen #ifdef CONFIG_NUMA 20d4b6f156SHuacai Chen 21d4b6f156SHuacai Chen extern int numa_off; 22d4b6f156SHuacai Chen extern s16 __cpuid_to_node[CONFIG_NR_CPUS]; 23d4b6f156SHuacai Chen extern nodemask_t numa_nodes_parsed __initdata; 24d4b6f156SHuacai Chen 25d4b6f156SHuacai Chen struct numa_memblk { 26d4b6f156SHuacai Chen u64 start; 27d4b6f156SHuacai Chen u64 end; 28d4b6f156SHuacai Chen int nid; 29d4b6f156SHuacai Chen }; 30d4b6f156SHuacai Chen 31d4b6f156SHuacai Chen #define NR_NODE_MEMBLKS (MAX_NUMNODES*2) 32d4b6f156SHuacai Chen struct numa_meminfo { 33d4b6f156SHuacai Chen int nr_blks; 34d4b6f156SHuacai Chen struct numa_memblk blk[NR_NODE_MEMBLKS]; 35d4b6f156SHuacai Chen }; 36d4b6f156SHuacai Chen 37d4b6f156SHuacai Chen extern int __init numa_add_memblk(int nodeid, u64 start, u64 end); 38d4b6f156SHuacai Chen 39d4b6f156SHuacai Chen extern void __init early_numa_add_cpu(int cpuid, s16 node); 40d4b6f156SHuacai Chen extern void numa_add_cpu(unsigned int cpu); 41d4b6f156SHuacai Chen extern void numa_remove_cpu(unsigned int cpu); 42d4b6f156SHuacai Chen numa_clear_node(int cpu)43d4b6f156SHuacai Chenstatic inline void numa_clear_node(int cpu) 44d4b6f156SHuacai Chen { 45d4b6f156SHuacai Chen } 46d4b6f156SHuacai Chen set_cpuid_to_node(int cpuid,s16 node)47d4b6f156SHuacai Chenstatic inline void set_cpuid_to_node(int cpuid, s16 node) 48d4b6f156SHuacai Chen { 49d4b6f156SHuacai Chen __cpuid_to_node[cpuid] = node; 50d4b6f156SHuacai Chen } 51d4b6f156SHuacai Chen 52d4b6f156SHuacai Chen extern int early_cpu_to_node(int cpu); 53d4b6f156SHuacai Chen 54d4b6f156SHuacai Chen #else 55d4b6f156SHuacai Chen early_numa_add_cpu(int cpuid,s16 node)56d4b6f156SHuacai Chenstatic inline void early_numa_add_cpu(int cpuid, s16 node) { } numa_add_cpu(unsigned int cpu)57d4b6f156SHuacai Chenstatic inline void numa_add_cpu(unsigned int cpu) { } numa_remove_cpu(unsigned int cpu)58d4b6f156SHuacai Chenstatic inline void numa_remove_cpu(unsigned int cpu) { } set_cpuid_to_node(int cpuid,s16 node)59*ae9e39a2SJiaxun Yangstatic inline void set_cpuid_to_node(int cpuid, s16 node) { } 60d4b6f156SHuacai Chen early_cpu_to_node(int cpu)61d4b6f156SHuacai Chenstatic inline int early_cpu_to_node(int cpu) 62d4b6f156SHuacai Chen { 63d4b6f156SHuacai Chen return 0; 64d4b6f156SHuacai Chen } 65d4b6f156SHuacai Chen 66d4b6f156SHuacai Chen #endif /* CONFIG_NUMA */ 67d4b6f156SHuacai Chen 68d4b6f156SHuacai Chen #endif /* _ASM_LOONGARCH_NUMA_H */ 69