linux/arch/x86/kernel/apic/local.h
<<
>>
Prefs
   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 <alan@redhat.com>
   7 * (c) 1998-99, 2000 Ingo Molnar <mingo@redhat.com>
   8 * (c) 2002,2003 Andi Kleen, SuSE Labs.
   9 */
  10
  11#include <linux/jump_label.h>
  12
  13#include <asm/apic.h>
  14
  15/* APIC flat 64 */
  16void flat_init_apic_ldr(void);
  17
  18/* X2APIC */
  19int x2apic_apic_id_valid(u32 apicid);
  20int x2apic_apic_id_registered(void);
  21void __x2apic_send_IPI_dest(unsigned int apicid, int vector, unsigned int dest);
  22unsigned int x2apic_get_apic_id(unsigned long id);
  23u32 x2apic_set_apic_id(unsigned int id);
  24int x2apic_phys_pkg_id(int initial_apicid, int index_msb);
  25void x2apic_send_IPI_self(int vector);
  26void __x2apic_send_IPI_shorthand(int vector, u32 which);
  27
  28/* IPI */
  29
  30DECLARE_STATIC_KEY_FALSE(apic_use_ipi_shorthand);
  31
  32static inline unsigned int __prepare_ICR(unsigned int shortcut, int vector,
  33                                         unsigned int dest)
  34{
  35        unsigned int icr = shortcut | dest;
  36
  37        switch (vector) {
  38        default:
  39                icr |= APIC_DM_FIXED | vector;
  40                break;
  41        case NMI_VECTOR:
  42                icr |= APIC_DM_NMI;
  43                break;
  44        }
  45        return icr;
  46}
  47
  48void __default_send_IPI_shortcut(unsigned int shortcut, int vector);
  49
  50/*
  51 * This is used to send an IPI with no shorthand notation (the destination is
  52 * specified in bits 56 to 63 of the ICR).
  53 */
  54void __default_send_IPI_dest_field(unsigned int mask, int vector, unsigned int dest);
  55
  56void default_send_IPI_single(int cpu, int vector);
  57void default_send_IPI_single_phys(int cpu, int vector);
  58void default_send_IPI_mask_sequence_phys(const struct cpumask *mask, int vector);
  59void default_send_IPI_mask_allbutself_phys(const struct cpumask *mask, int vector);
  60void default_send_IPI_allbutself(int vector);
  61void default_send_IPI_all(int vector);
  62void default_send_IPI_self(int vector);
  63
  64#ifdef CONFIG_X86_32
  65void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector);
  66void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector);
  67void default_send_IPI_mask_logical(const struct cpumask *mask, int vector);
  68#endif
  69