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 / asm-i386 / apic.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.7 KB  |  155 lines

  1. #ifndef __ASM_APIC_H
  2. #define __ASM_APIC_H
  3.  
  4. #include <linux/pm.h>
  5. #include <asm/fixmap.h>
  6. #include <asm/apicdef.h>
  7. #include <asm/processor.h>
  8. #include <asm/system.h>
  9.  
  10. #define Dprintk(x...)
  11.  
  12. /*
  13.  * Debugging macros
  14.  */
  15. #define APIC_QUIET   0
  16. #define APIC_VERBOSE 1
  17. #define APIC_DEBUG   2
  18.  
  19. extern int enable_local_apic;
  20. extern int apic_verbosity;
  21.  
  22. static inline void lapic_disable(void)
  23. {
  24.     enable_local_apic = -1;
  25.     clear_bit(X86_FEATURE_APIC, boot_cpu_data.x86_capability);
  26. }
  27.  
  28. static inline void lapic_enable(void)
  29. {
  30.     enable_local_apic = 1;
  31. }
  32.  
  33. /*
  34.  * Define the default level of output to be very little
  35.  * This can be turned up by using apic=verbose for more
  36.  * information and apic=debug for _lots_ of information.
  37.  * apic_verbosity is defined in apic.c
  38.  */
  39. #define apic_printk(v, s, a...) do {       \
  40.         if ((v) <= apic_verbosity) \
  41.             printk(s, ##a);    \
  42.     } while (0)
  43.  
  44.  
  45. #ifdef CONFIG_X86_LOCAL_APIC
  46.  
  47. /*
  48.  * Basic functions accessing APICs.
  49.  */
  50.  
  51. static __inline void apic_write(unsigned long reg, unsigned long v)
  52. {
  53.     *((volatile unsigned long *)(APIC_BASE+reg)) = v;
  54. }
  55.  
  56. static __inline void apic_write_atomic(unsigned long reg, unsigned long v)
  57. {
  58.     xchg((volatile unsigned long *)(APIC_BASE+reg), v);
  59. }
  60.  
  61. static __inline unsigned long apic_read(unsigned long reg)
  62. {
  63.     return *((volatile unsigned long *)(APIC_BASE+reg));
  64. }
  65.  
  66. static __inline__ void apic_wait_icr_idle(void)
  67. {
  68.     while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY )
  69.         cpu_relax();
  70. }
  71.  
  72. int get_physical_broadcast(void);
  73.  
  74. #ifdef CONFIG_X86_GOOD_APIC
  75. # define FORCE_READ_AROUND_WRITE 0
  76. # define apic_read_around(x)
  77. # define apic_write_around(x,y) apic_write((x),(y))
  78. #else
  79. # define FORCE_READ_AROUND_WRITE 1
  80. # define apic_read_around(x) apic_read(x)
  81. # define apic_write_around(x,y) apic_write_atomic((x),(y))
  82. #endif
  83.  
  84. #ifdef CONFIG_X86_UP_APIC_DEFAULT_OFF
  85. # define X86_APIC_DEFAULT_OFF 1
  86. #else
  87. # define X86_APIC_DEFAULT_OFF 0
  88. #endif
  89.  
  90. static inline void ack_APIC_irq(void)
  91. {
  92.     /*
  93.      * ack_APIC_irq() actually gets compiled as a single instruction:
  94.      * - a single rmw on Pentium/82489DX
  95.      * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC)
  96.      * ... yummie.
  97.      */
  98.  
  99.     /* Docs say use 0 for future compatibility */
  100.     apic_write_around(APIC_EOI, 0);
  101. }
  102.  
  103. extern void (*wait_timer_tick)(void);
  104.  
  105. extern int get_maxlvt(void);
  106. extern void clear_local_APIC(void);
  107. extern void connect_bsp_APIC (void);
  108. extern void disconnect_bsp_APIC (int virt_wire_setup);
  109. extern void disable_local_APIC (void);
  110. extern void lapic_shutdown (void);
  111. extern int verify_local_APIC (void);
  112. extern void cache_APIC_registers (void);
  113. extern void sync_Arb_IDs (void);
  114. extern void init_bsp_APIC (void);
  115. extern void setup_local_APIC (void);
  116. extern void init_apic_mappings (void);
  117. extern void smp_local_timer_interrupt (struct pt_regs * regs);
  118. extern void setup_boot_APIC_clock (void);
  119. extern void setup_secondary_APIC_clock (void);
  120. extern void setup_apic_nmi_watchdog (void);
  121. extern int reserve_lapic_nmi(void);
  122. extern void release_lapic_nmi(void);
  123. extern void disable_timer_nmi_watchdog(void);
  124. extern void enable_timer_nmi_watchdog(void);
  125. extern void nmi_watchdog_tick (struct pt_regs * regs);
  126. extern int APIC_init_uniprocessor (void);
  127. extern void disable_APIC_timer(void);
  128. extern void enable_APIC_timer(void);
  129.  
  130. extern void enable_NMI_through_LVT0 (void * dummy);
  131.  
  132. extern unsigned int nmi_watchdog;
  133. #define NMI_NONE    0
  134. #define NMI_IO_APIC    1
  135. #define NMI_LOCAL_APIC    2
  136. #define NMI_INVALID    3
  137.  
  138. extern int disable_timer_pin_1;
  139.  
  140. void smp_send_timer_broadcast_ipi(struct pt_regs *regs);
  141. void switch_APIC_timer_to_ipi(void *cpumask);
  142. void switch_ipi_to_APIC_timer(void *cpumask);
  143. #define ARCH_APICTIMER_STOPS_ON_C3    1
  144.  
  145. extern int timer_over_8254;
  146.  
  147. extern int modern_apic(void);
  148.  
  149. #else /* !CONFIG_X86_LOCAL_APIC */
  150. static inline void lapic_shutdown(void) { }
  151.  
  152. #endif /* !CONFIG_X86_LOCAL_APIC */
  153.  
  154. #endif /* __ASM_APIC_H */
  155.