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 apic_default_calc_apicid(unsigned int cpu)11u32 apic_default_calc_apicid(unsigned int cpu) 12 { 13 return per_cpu(x86_cpu_to_apicid, cpu); 14 } 15 apic_flat_calc_apicid(unsigned int cpu)16u32 apic_flat_calc_apicid(unsigned int cpu) 17 { 18 return 1U << cpu; 19 } 20 default_cpu_present_to_apicid(int mps_cpu)21u32 default_cpu_present_to_apicid(int mps_cpu) 22 { 23 if (mps_cpu < nr_cpu_ids && cpu_present(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 */ default_init_apic_ldr(void)34void 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