wakecpu.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #ifndef __ASM_NUMAQ_WAKECPU_H
  2. #define __ASM_NUMAQ_WAKECPU_H
  3. /* This file copes with machines that wakeup secondary CPUs by NMIs */
  4. #define NUMAQ_TRAMPOLINE_PHYS_LOW (0x8)
  5. #define NUMAQ_TRAMPOLINE_PHYS_HIGH (0xa)
  6. /*
  7. * Because we use NMIs rather than the INIT-STARTUP sequence to
  8. * bootstrap the CPUs, the APIC may be in a weird state. Kick it.
  9. */
  10. static inline void smp_callin_clear_local_apic(void)
  11. {
  12. clear_local_APIC();
  13. }
  14. static inline void store_NMI_vector(unsigned short *high, unsigned short *low)
  15. {
  16. printk("Storing NMI vector\n");
  17. *high =
  18. *((volatile unsigned short *)phys_to_virt(NUMAQ_TRAMPOLINE_PHYS_HIGH));
  19. *low =
  20. *((volatile unsigned short *)phys_to_virt(NUMAQ_TRAMPOLINE_PHYS_LOW));
  21. }
  22. static inline void restore_NMI_vector(unsigned short *high, unsigned short *low)
  23. {
  24. printk("Restoring NMI vector\n");
  25. *((volatile unsigned short *)phys_to_virt(NUMAQ_TRAMPOLINE_PHYS_HIGH)) =
  26. *high;
  27. *((volatile unsigned short *)phys_to_virt(NUMAQ_TRAMPOLINE_PHYS_LOW)) =
  28. *low;
  29. }
  30. static inline void inquire_remote_apic(int apicid)
  31. {
  32. }
  33. #endif /* __ASM_NUMAQ_WAKECPU_H */