2 * From Coreboot file of same name
4 * Copyright (C) 2014 Google, Inc
6 * SPDX-License-Identifier: GPL-2.0
9 #ifndef _ARCH_ASM_LAPIC_H
10 #define _ARCH_ASM_LAPIC_H
13 #include <asm/lapic_def.h>
15 #include <asm/processor.h>
17 static inline __attribute__((always_inline))
18 unsigned long lapic_read(unsigned long reg)
20 return readl(LAPIC_DEFAULT_BASE + reg);
23 static inline __attribute__((always_inline))
24 void lapic_write(unsigned long reg, unsigned long val)
26 writel(val, LAPIC_DEFAULT_BASE + reg);
29 static inline __attribute__((always_inline)) void lapic_wait_icr_idle(void)
31 do { } while (lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY);
34 static inline void enable_lapic(void)
38 msr = msr_read(LAPIC_BASE_MSR);
41 msr.lo |= LAPIC_DEFAULT_BASE | (1 << 11);
42 msr_write(LAPIC_BASE_MSR, msr);
45 static inline void disable_lapic(void)
49 msr = msr_read(LAPIC_BASE_MSR);
51 msr_write(LAPIC_BASE_MSR, msr);
54 static inline __attribute__((always_inline)) unsigned long lapicid(void)
56 return lapic_read(LAPIC_ID) >> 24;