wakecpu.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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 TRAMPOLINE_PHYS_LOW (0x8)
  5. #define TRAMPOLINE_PHYS_HIGH (0xa)
  6. /* We don't do anything here because we use NMI's to boot instead */
  7. static inline void wait_for_init_deassert(atomic_t *deassert)
  8. {
  9. }
  10. /*
  11. * Because we use NMIs rather than the INIT-STARTUP sequence to
  12. * bootstrap the CPUs, the APIC may be in a weird state. Kick it.
  13. */
  14. static inline void smp_callin_clear_local_apic(void)
  15. {
  16. clear_local_APIC();
  17. }
  18. static inline void store_NMI_vector(unsigned short *high, unsigned short *low)
  19. {
  20. printk("Storing NMI vector\n");
  21. *high =
  22. *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH));
  23. *low =
  24. *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW));
  25. }
  26. static inline void restore_NMI_vector(unsigned short *high, unsigned short *low)
  27. {
  28. printk("Restoring NMI vector\n");
  29. *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) =
  30. *high;
  31. *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) =
  32. *low;
  33. }
  34. static inline void inquire_remote_apic(int apicid)
  35. {
  36. }
  37. #endif /* __ASM_NUMAQ_WAKECPU_H */