blob: c689fc23d08fa9dc3e59662a11614f1c32f5126c [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Graeme Russ0c8c62e2008-12-07 10:29:01 +11002/*
Graeme Russ77290ee2009-02-24 21:13:40 +11003 * (C) Copyright 2009
Graeme Russ0c8c62e2008-12-07 10:29:01 +11004 * Graeme Russ, graeme.russ@gmail.com
5 *
Graeme Russ77290ee2009-02-24 21:13:40 +11006 * (C) Copyright 2002
Albert ARIBAUD60fbc8d2011-08-04 18:45:45 +02007 * Daniel Engström, Omicron Ceti AB, daniel@omicron.se
Graeme Russ0c8c62e2008-12-07 10:29:01 +11008 */
9
10#ifndef __ASM_INTERRUPT_H_
11#define __ASM_INTERRUPT_H_ 1
12
Simon Glass9a4a9522025-03-15 14:25:35 +000013#include <stdbool.h>
Graeme Russ43261532010-10-07 20:03:23 +110014#include <asm/types.h>
15
Bin Menge7a76e52015-10-22 19:13:26 -070016#define SYS_NUM_IRQS 16
17
Bin Meng9ff054b2015-07-10 10:38:32 +080018/* Architecture defined exceptions */
19enum x86_exception {
20 EXC_DE = 0,
21 EXC_DB,
22 EXC_NMI,
23 EXC_BP,
24 EXC_OF,
25 EXC_BR,
26 EXC_UD,
27 EXC_NM,
28 EXC_DF,
29 EXC_CSO,
30 EXC_TS,
31 EXC_NP,
32 EXC_SS,
33 EXC_GP,
34 EXC_PF,
35 EXC_MF = 16,
36 EXC_AC,
37 EXC_MC,
38 EXC_XM,
39 EXC_VE
40};
41
Simon Glass495afca2020-11-04 09:57:28 -070042/**
43 * struct idt_ptr - Holds the IDT (Interrupt Descriptor Table)
44 *
45 * @size: Size of IDT in bytes
46 */
47struct idt_ptr {
48 unsigned short size;
49 unsigned long address;
50} __packed;
51
Graeme Russcbfce1d2011-04-13 19:43:28 +100052/* arch/x86/cpu/interrupts.c */
Graeme Russ77290ee2009-02-24 21:13:40 +110053void set_vector(u8 intnum, void *routine);
54
Graeme Russ77290ee2009-02-24 21:13:40 +110055/* Architecture specific functions */
56void mask_irq(int irq);
57void unmask_irq(int irq);
58void specific_eoi(int irq);
59
60extern char exception_stack[];
61
Simon Glass0e9c6332014-11-14 18:18:31 -070062/**
63 * configure_irq_trigger() - Configure IRQ triggering
64 *
65 * Switch the given interrupt to be level / edge triggered
66 *
67 * @param int_num legacy interrupt number (3-7, 9-15)
68 * @param is_level_triggered true for level triggered interrupt, false for
69 * edge triggered interrupt
70 */
71void configure_irq_trigger(int int_num, bool is_level_triggered);
72
Simon Glass98d7e982015-04-28 20:25:16 -060073void *x86_get_idt(void);
74
Simon Glass495afca2020-11-04 09:57:28 -070075/**
76 * interrupt_read_idt() - Read the IDT
77 *
78 * @ptr: Place to put IDT contents
79 */
80void interrupt_read_idt(struct idt_ptr *ptr);
81
Graeme Russ0c8c62e2008-12-07 10:29:01 +110082#endif