1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * From coreboot file of same name
4 *
5 * Copyright (C) 2014 Google, Inc
6 */
7
8#ifndef _ARCH_ASM_LAPIC_H
9#define _ARCH_ASM_LAPIC_H
10
11#define LAPIC_DEFAULT_BASE		0xfee00000
12
13#define LAPIC_ID			0x020
14#define LAPIC_LVR			0x030
15
16#define LAPIC_TASKPRI			0x080
17#define LAPIC_TPRI_MASK			0xff
18
19#define LAPIC_RRR			0x0c0
20
21#define LAPIC_SPIV			0x0f0
22#define LAPIC_SPIV_ENABLE		0x100
23
24#define LAPIC_ICR			0x300
25#define LAPIC_DEST_SELF			0x40000
26#define LAPIC_DEST_ALLINC		0x80000
27#define LAPIC_DEST_ALLBUT		0xc0000
28#define LAPIC_ICR_RR_MASK		0x30000
29#define LAPIC_ICR_RR_INVALID		0x00000
30#define LAPIC_ICR_RR_INPROG		0x10000
31#define LAPIC_ICR_RR_VALID		0x20000
32#define LAPIC_INT_LEVELTRIG		0x08000
33#define LAPIC_INT_ASSERT		0x04000
34#define LAPIC_ICR_BUSY			0x01000
35#define LAPIC_DEST_LOGICAL		0x00800
36#define LAPIC_DM_FIXED			0x00000
37#define LAPIC_DM_LOWEST			0x00100
38#define LAPIC_DM_SMI			0x00200
39#define LAPIC_DM_REMRD			0x00300
40#define LAPIC_DM_NMI			0x00400
41#define LAPIC_DM_INIT			0x00500
42#define LAPIC_DM_STARTUP		0x00600
43#define LAPIC_DM_EXTINT			0x00700
44#define LAPIC_VECTOR_MASK		0x000ff
45
46#define LAPIC_ICR2			0x310
47#define GET_LAPIC_DEST_FIELD(x)		(((x) >> 24) & 0xff)
48#define SET_LAPIC_DEST_FIELD(x)		((x) << 24)
49
50#define LAPIC_LVT0			0x350
51#define LAPIC_LVT1			0x360
52#define LAPIC_LVT_MASKED		(1 << 16)
53#define LAPIC_LVT_LEVEL_TRIGGER		(1 << 15)
54#define LAPIC_LVT_REMOTE_IRR		(1 << 14)
55#define LAPIC_INPUT_POLARITY		(1 << 13)
56#define LAPIC_SEND_PENDING		(1 << 12)
57#define LAPIC_LVT_RESERVED_1		(1 << 11)
58#define LAPIC_DELIVERY_MODE_MASK	(7 << 8)
59#define LAPIC_DELIVERY_MODE_FIXED	(0 << 8)
60#define LAPIC_DELIVERY_MODE_NMI		(4 << 8)
61#define LAPIC_DELIVERY_MODE_EXTINT	(7 << 8)
62
63unsigned long lapic_read(unsigned long reg);
64
65void lapic_write(unsigned long reg, unsigned long v);
66
67void enable_lapic(void);
68
69void disable_lapic(void);
70
71unsigned long lapicid(void);
72
73int lapic_remote_read(int apicid, int reg, unsigned long *pvalue);
74
75void lapic_setup(void);
76
77#endif
78