blob: 78eef6afd33c36c6ab961a80478a4c9b39d63443 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0 */
Simon Glass3eafce02014-11-12 22:42:27 -07002/*
Bin Meng63d54a62015-06-17 11:15:38 +08003 * From coreboot file of same name
Simon Glass3eafce02014-11-12 22:42:27 -07004 *
5 * Copyright (C) 2014 Google, Inc
Simon Glass3eafce02014-11-12 22:42:27 -07006 */
7
8#ifndef _ARCH_ASM_LAPIC_H
9#define _ARCH_ASM_LAPIC_H
10
Bin Meng63d54a62015-06-17 11:15:38 +080011#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)
Simon Glass0c9075e2014-11-24 21:18:15 -070062
Bin Menga2d73fd2015-06-23 12:18:50 +080063unsigned long lapic_read(unsigned long reg);
Simon Glass3eafce02014-11-12 22:42:27 -070064
Bin Menga2d73fd2015-06-23 12:18:50 +080065void lapic_write(unsigned long reg, unsigned long v);
Simon Glass3eafce02014-11-12 22:42:27 -070066
Bin Menga2d73fd2015-06-23 12:18:50 +080067void enable_lapic(void);
Simon Glass3eafce02014-11-12 22:42:27 -070068
Bin Menga2d73fd2015-06-23 12:18:50 +080069void disable_lapic(void);
Simon Glass3eafce02014-11-12 22:42:27 -070070
Bin Menga2d73fd2015-06-23 12:18:50 +080071unsigned long lapicid(void);
Simon Glass3eafce02014-11-12 22:42:27 -070072
Bin Menga2d73fd2015-06-23 12:18:50 +080073int lapic_remote_read(int apicid, int reg, unsigned long *pvalue);
Simon Glass0c9075e2014-11-24 21:18:15 -070074
Simon Glass0c9075e2014-11-24 21:18:15 -070075void lapic_setup(void);
76
Simon Glass3eafce02014-11-12 22:42:27 -070077#endif