home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / cpu.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.5 KB  |  89 lines

  1. /*
  2.  * include/linux/cpu.h - generic cpu definition
  3.  *
  4.  * This is mainly for topological representation. We define the 
  5.  * basic 'struct cpu' here, which can be embedded in per-arch 
  6.  * definitions of processors.
  7.  *
  8.  * Basic handling of the devices is done in drivers/base/cpu.c
  9.  * and system devices are handled in drivers/base/sys.c. 
  10.  *
  11.  * CPUs are exported via sysfs in the class/cpu/devices/
  12.  * directory. 
  13.  *
  14.  * Per-cpu interfaces can be implemented using a struct device_interface. 
  15.  * See the following for how to do this: 
  16.  * - drivers/base/intf.c 
  17.  * - Documentation/driver-model/interface.txt
  18.  */
  19. #ifndef _LINUX_CPU_H_
  20. #define _LINUX_CPU_H_
  21.  
  22. #include <linux/sysdev.h>
  23. #include <linux/node.h>
  24. #include <linux/compiler.h>
  25. #include <linux/cpumask.h>
  26. #include <asm/semaphore.h>
  27.  
  28. struct cpu {
  29.     int node_id;        /* The node which contains the CPU */
  30.     int no_control;        /* Should the sysfs control file be created? */
  31.     struct sys_device sysdev;
  32. };
  33.  
  34. extern int register_cpu(struct cpu *, int, struct node *);
  35. extern struct sys_device *get_cpu_sysdev(unsigned cpu);
  36. #ifdef CONFIG_HOTPLUG_CPU
  37. extern void unregister_cpu(struct cpu *, struct node *);
  38. #endif
  39. struct notifier_block;
  40.  
  41. #ifdef CONFIG_SMP
  42. /* Need to know about CPUs going up/down? */
  43. extern int register_cpu_notifier(struct notifier_block *nb);
  44. extern void unregister_cpu_notifier(struct notifier_block *nb);
  45. extern int current_in_cpu_hotplug(void);
  46.  
  47. int cpu_up(unsigned int cpu);
  48.  
  49. #else
  50.  
  51. static inline int register_cpu_notifier(struct notifier_block *nb)
  52. {
  53.     return 0;
  54. }
  55. static inline void unregister_cpu_notifier(struct notifier_block *nb)
  56. {
  57. }
  58. static inline int current_in_cpu_hotplug(void)
  59. {
  60.     return 0;
  61. }
  62.  
  63. #endif /* CONFIG_SMP */
  64. extern struct sysdev_class cpu_sysdev_class;
  65.  
  66. #ifdef CONFIG_HOTPLUG_CPU
  67. /* Stop CPUs going up and down. */
  68. extern void lock_cpu_hotplug(void);
  69. extern void unlock_cpu_hotplug(void);
  70. extern int lock_cpu_hotplug_interruptible(void);
  71. #define hotcpu_notifier(fn, pri) {                \
  72.     static struct notifier_block fn##_nb =            \
  73.         { .notifier_call = fn, .priority = pri };    \
  74.     register_cpu_notifier(&fn##_nb);            \
  75. }
  76. int cpu_down(unsigned int cpu);
  77. #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
  78. #else
  79. #define lock_cpu_hotplug()    do { } while (0)
  80. #define unlock_cpu_hotplug()    do { } while (0)
  81. #define lock_cpu_hotplug_interruptible() 0
  82. #define hotcpu_notifier(fn, pri)
  83.  
  84. /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */
  85. static inline int cpu_is_offline(int cpu) { return 0; }
  86. #endif
  87.  
  88. #endif /* _LINUX_CPU_H_ */
  89.