1 // SPDX-License-Identifier: GPL-2.0
5 * Does almost nothing and should be substituted by a real apic driver via
8 * Though in case if apic is disabled (for some reason) we try
9 * to not uglify the caller's code and allow to call (some) apic routines
10 * like self-ipi, etc...
12 * FIXME: Remove this gunk. The above argument which was intentionally left
13 * in place is silly to begin with because none of the callbacks except for
14 * APIC::read/write() have a WARN_ON_ONCE() in them. Sigh...
16 #include <linux/cpumask.h>
17 #include <linux/thread_info.h>
23 static void noop_send_IPI(int cpu
, int vector
) { }
24 static void noop_send_IPI_mask(const struct cpumask
*cpumask
, int vector
) { }
25 static void noop_send_IPI_mask_allbutself(const struct cpumask
*cpumask
, int vector
) { }
26 static void noop_send_IPI_allbutself(int vector
) { }
27 static void noop_send_IPI_all(int vector
) { }
28 static void noop_send_IPI_self(int vector
) { }
29 static void noop_apic_icr_write(u32 low
, u32 id
) { }
30 static int noop_wakeup_secondary_cpu(u32 apicid
, unsigned long start_eip
) { return -1; }
31 static u64
noop_apic_icr_read(void) { return 0; }
32 static u32
noop_get_apic_id(u32 apicid
) { return 0; }
33 static void noop_apic_eoi(void) { }
35 static u32
noop_apic_read(u32 reg
)
37 WARN_ON_ONCE(boot_cpu_has(X86_FEATURE_APIC
) && !apic_is_disabled
);
41 static void noop_apic_write(u32 reg
, u32 val
)
43 WARN_ON_ONCE(boot_cpu_has(X86_FEATURE_APIC
) && !apic_is_disabled
);
46 struct apic apic_noop __ro_after_init
= {
49 .dest_mode_logical
= true,
53 .cpu_present_to_apicid
= default_cpu_present_to_apicid
,
56 .get_apic_id
= noop_get_apic_id
,
58 .calc_dest_apicid
= apic_flat_calc_apicid
,
60 .send_IPI
= noop_send_IPI
,
61 .send_IPI_mask
= noop_send_IPI_mask
,
62 .send_IPI_mask_allbutself
= noop_send_IPI_mask_allbutself
,
63 .send_IPI_allbutself
= noop_send_IPI_allbutself
,
64 .send_IPI_all
= noop_send_IPI_all
,
65 .send_IPI_self
= noop_send_IPI_self
,
67 .wakeup_secondary_cpu
= noop_wakeup_secondary_cpu
,
69 .read
= noop_apic_read
,
70 .write
= noop_apic_write
,
72 .icr_read
= noop_apic_icr_read
,
73 .icr_write
= noop_apic_icr_write
,