1 | /* |
---|---|
2 | * Common functions shared between the various APIC flavours |
3 | * |
4 | * SPDX-License-Identifier: GPL-2.0 |
5 | */ |
6 | #include <linux/irq.h> |
7 | #include <asm/apic.h> |
8 | |
9 | #include "local.h" |
10 | |
11 | u32 apic_default_calc_apicid(unsigned int cpu) |
12 | { |
13 | return per_cpu(x86_cpu_to_apicid, cpu); |
14 | } |
15 | |
16 | u32 apic_flat_calc_apicid(unsigned int cpu) |
17 | { |
18 | return 1U << cpu; |
19 | } |
20 | |
21 | u32 default_cpu_present_to_apicid(int mps_cpu) |
22 | { |
23 | if (mps_cpu < nr_cpu_ids && cpu_present(cpu: mps_cpu)) |
24 | return (int)per_cpu(x86_cpu_to_apicid, mps_cpu); |
25 | else |
26 | return BAD_APICID; |
27 | } |
28 | EXPORT_SYMBOL_GPL(default_cpu_present_to_apicid); |
29 | |
30 | /* |
31 | * Set up the logical destination ID when the APIC operates in logical |
32 | * destination mode. |
33 | */ |
34 | void default_init_apic_ldr(void) |
35 | { |
36 | unsigned long val; |
37 | |
38 | apic_write(APIC_DFR, APIC_DFR_FLAT); |
39 | val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; |
40 | val |= SET_APIC_LOGICAL_ID(1UL << smp_processor_id()); |
41 | apic_write(APIC_LDR, val); |
42 | } |
43 |