local.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Historical copyright notices:
  4. *
  5. * Copyright 2004 James Cleverdon, IBM.
  6. * (c) 1995 Alan Cox, Building #3 <[email protected]>
  7. * (c) 1998-99, 2000 Ingo Molnar <[email protected]>
  8. * (c) 2002,2003 Andi Kleen, SuSE Labs.
  9. */
  10. #include <linux/jump_label.h>
  11. #include <asm/irq_vectors.h>
  12. #include <asm/apic.h>
  13. /* APIC flat 64 */
  14. void flat_init_apic_ldr(void);
  15. /* X2APIC */
  16. int x2apic_apic_id_valid(u32 apicid);
  17. int x2apic_apic_id_registered(void);
  18. void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest);
  19. unsigned int x2apic_get_apic_id(unsigned long id);
  20. u32 x2apic_set_apic_id(unsigned int id);
  21. int x2apic_phys_pkg_id(int initial_apicid, int index_msb);
  22. void x2apic_send_IPI_self(int vector);
  23. void __x2apic_send_IPI_shorthand(int vector, u32 which);
  24. /* IPI */
  25. DECLARE_STATIC_KEY_FALSE(apic_use_ipi_shorthand);
  26. static inline unsigned int __prepare_ICR(unsigned int shortcut, int vector,
  27. unsigned int dest)
  28. {
  29. unsigned int icr = shortcut | dest;
  30. switch (vector) {
  31. default:
  32. icr |= APIC_DM_FIXED | vector;
  33. break;
  34. case NMI_VECTOR:
  35. icr |= APIC_DM_NMI;
  36. break;
  37. }
  38. return icr;
  39. }
  40. void __default_send_IPI_shortcut(unsigned int shortcut, int vector);
  41. /*
  42. * This is used to send an IPI with no shorthand notation (the destination is
  43. * specified in bits 56 to 63 of the ICR).
  44. */
  45. void __default_send_IPI_dest_field(unsigned int mask, int vector, unsigned int dest);
  46. void default_send_IPI_single(int cpu, int vector);
  47. void default_send_IPI_single_phys(int cpu, int vector);
  48. void default_send_IPI_mask_sequence_phys(const struct cpumask *mask, int vector);
  49. void default_send_IPI_mask_allbutself_phys(const struct cpumask *mask, int vector);
  50. void default_send_IPI_allbutself(int vector);
  51. void default_send_IPI_all(int vector);
  52. void default_send_IPI_self(int vector);
  53. #ifdef CONFIG_X86_32
  54. void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector);
  55. void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector);
  56. void default_send_IPI_mask_logical(const struct cpumask *mask, int vector);
  57. #endif