numaq.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * APIC driver for the IBM NUMAQ chipset.
  3. */
  4. #define APIC_DEFINITION 1
  5. #include <linux/threads.h>
  6. #include <linux/cpumask.h>
  7. #include <asm/mpspec.h>
  8. #include <asm/genapic.h>
  9. #include <asm/fixmap.h>
  10. #include <asm/apicdef.h>
  11. #include <linux/kernel.h>
  12. #include <linux/string.h>
  13. #include <linux/init.h>
  14. #include <asm/numaq/apicdef.h>
  15. #include <linux/smp.h>
  16. #include <asm/numaq/apic.h>
  17. #include <asm/numaq/ipi.h>
  18. #include <asm/numaq/mpparse.h>
  19. #include <asm/numaq/wakecpu.h>
  20. #include <asm/numaq.h>
  21. static int mps_oem_check(struct mpc_table *mpc, char *oem, char *productid)
  22. {
  23. numaq_mps_oem_check(mpc, oem, productid);
  24. return found_numaq;
  25. }
  26. static int probe_numaq(void)
  27. {
  28. /* already know from get_memcfg_numaq() */
  29. return found_numaq;
  30. }
  31. /* Hook from generic ACPI tables.c */
  32. static int acpi_madt_oem_check(char *oem_id, char *oem_table_id)
  33. {
  34. return 0;
  35. }
  36. static void vector_allocation_domain(int cpu, cpumask_t *retmask)
  37. {
  38. /* Careful. Some cpus do not strictly honor the set of cpus
  39. * specified in the interrupt destination when using lowest
  40. * priority interrupt delivery mode.
  41. *
  42. * In particular there was a hyperthreading cpu observed to
  43. * deliver interrupts to the wrong hyperthread when only one
  44. * hyperthread was specified in the interrupt desitination.
  45. */
  46. *retmask = (cpumask_t){ { [0] = APIC_ALL_CPUS, } };
  47. }
  48. struct genapic apic_numaq = APIC_INIT("NUMAQ", probe_numaq);