1#ifndef __LINUX_SMP_H 2#define __LINUX_SMP_H 3 4/* 5 * Generic SMP support 6 * Alan Cox. <alan@redhat.com> 7 */ 8 9#include <linux/config.h> 10#include <asm/smp.h> 11 12#ifdef CONFIG_SMP 13 14#include <linux/kernel.h> 15 16/* 17 * main cross-CPU interfaces, handles INIT, TLB flush, STOP, etc. 18 * (defined in asm header): 19 */ 20 21/* 22 * stops all CPUs but the current one: 23 */ 24extern void smp_send_stop(void); 25 26/* 27 * sends a 'reschedule' event to another CPU: 28 */ 29extern void FASTCALL(smp_send_reschedule(int cpu)); 30 31 32/* 33 * Boot processor call to load the other CPU's 34 */ 35extern void smp_boot_cpus(void); 36 37/* 38 * Processor call in. Must hold processors until .. 39 */ 40extern void smp_callin(void); 41 42/* 43 * Multiprocessors may now schedule 44 */ 45extern void smp_commence(void); 46 47/* 48 * Call a function on all other processors 49 */ 50extern int smp_call_function (void (*func) (void *info), void *info, 51 int retry, int wait); 52 53/* 54 * True once the per process idle is forked 55 */ 56extern int smp_threads_ready; 57 58extern int smp_num_cpus; 59 60extern volatile unsigned long smp_msg_data; 61extern volatile int smp_src_cpu; 62extern volatile int smp_msg_id; 63 64#define MSG_ALL_BUT_SELF 0x8000 /* Assume <32768 CPU's */ 65#define MSG_ALL 0x8001 66 67#define MSG_INVALIDATE_TLB 0x0001 /* Remote processor TLB invalidate */ 68#define MSG_STOP_CPU 0x0002 /* Sent to shut down slave CPU's 69 * when rebooting 70 */ 71#define MSG_RESCHEDULE 0x0003 /* Reschedule request from master CPU*/ 72#define MSG_CALL_FUNCTION 0x0004 /* Call function on all other CPUs */ 73 74#else 75 76/* 77 * These macros fold the SMP functionality into a single CPU system 78 */ 79 80#define smp_num_cpus 1 81#define smp_processor_id() 0 82#define hard_smp_processor_id() 0 83#define smp_threads_ready 1 84#define kernel_lock() 85#define cpu_logical_map(cpu) 0 86#define cpu_number_map(cpu) 0 87#define smp_call_function(func,info,retry,wait) ({ 0; }) 88#define cpu_online_map 1 89 90#endif 91#endif 92