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