1*fc30b644Skettenis /* $OpenBSD: intrdefs.h,v 1.24 2024/05/26 13:37:31 kettenis Exp $ */ 2f5df1827Smickey /* $NetBSD: intrdefs.h,v 1.2 2003/05/04 22:01:56 fvdl Exp $ */ 3f5df1827Smickey 4161a6d1dSderaadt #ifndef _AMD64_INTRDEFS_H 5161a6d1dSderaadt #define _AMD64_INTRDEFS_H 6f5df1827Smickey 7f5df1827Smickey /* 8f5df1827Smickey * Interrupt priority levels. 9f5df1827Smickey * 10f5df1827Smickey * There are tty, network and disk drivers that use free() at interrupt 11f5df1827Smickey * time, so imp > (tty | net | bio). 12f5df1827Smickey * 13f5df1827Smickey * Since run queues may be manipulated by both the statclock and tty, 14f5df1827Smickey * network, and disk drivers, clock > imp. 15f5df1827Smickey * 16f5df1827Smickey * IPL_HIGH must block everything that can manipulate a run queue. 17f5df1827Smickey * 18f5df1827Smickey * The level numbers are picked to fit into APIC vector priorities. 19f5df1827Smickey * 20f5df1827Smickey */ 21f5df1827Smickey #define IPL_NONE 0x0 /* nothing */ 22e7fbb990Skettenis #define IPL_SOFTCLOCK 0x1 /* timeouts */ 23e7fbb990Skettenis #define IPL_SOFTNET 0x2 /* protocol stacks */ 24e7fbb990Skettenis #define IPL_BIO 0x3 /* block I/O */ 25e7fbb990Skettenis #define IPL_NET 0x4 /* network */ 26a2cd3cc4Skettenis #define IPL_SOFTTTY 0x8 /* delayed terminal handling */ 27f5df1827Smickey #define IPL_TTY 0x9 /* terminal */ 28f5df1827Smickey #define IPL_VM 0xa /* memory allocation */ 29f5df1827Smickey #define IPL_AUDIO 0xb /* audio */ 30f5df1827Smickey #define IPL_CLOCK 0xc /* clock */ 31f5df1827Smickey #define IPL_SCHED IPL_CLOCK 32f5df1827Smickey #define IPL_STATCLOCK IPL_CLOCK 33f5df1827Smickey #define IPL_HIGH 0xd /* everything */ 34f5df1827Smickey #define IPL_IPI 0xe /* inter-processor interrupts */ 35f5df1827Smickey #define NIPL 16 36f5df1827Smickey 374965d1a4Smpi #define IPL_MPFLOOR IPL_TTY 38483e3bc5Skettenis #define IPL_MPSAFE 0x100 39*fc30b644Skettenis #define IPL_WAKEUP 0x200 40483e3bc5Skettenis 41f5df1827Smickey /* Interrupt sharing types. */ 42f5df1827Smickey #define IST_NONE 0 /* none */ 43f5df1827Smickey #define IST_PULSE 1 /* pulsed */ 44f5df1827Smickey #define IST_EDGE 2 /* edge-triggered */ 45f5df1827Smickey #define IST_LEVEL 3 /* level-triggered */ 46f5df1827Smickey 47f5df1827Smickey /* 48f5df1827Smickey * Local APIC masks. Must not conflict with SIR_* above, and must 49f5df1827Smickey * be >= NUM_LEGACY_IRQs. Note that LIR_IPI must be first. 50f5df1827Smickey */ 51092bf81aSkettenis #define LIR_IPI 63 52092bf81aSkettenis #define LIR_TIMER 62 53f5df1827Smickey 54f5df1827Smickey /* Soft interrupt masks. */ 55092bf81aSkettenis #define SIR_CLOCK 61 56092bf81aSkettenis #define SIR_NET 60 57092bf81aSkettenis #define SIR_TTY 59 58f5df1827Smickey 59ad5f3503Smikeb #define LIR_XEN 58 60218ead0bSmikeb #define LIR_HYPERV 57 61f5df1827Smickey 62f5df1827Smickey /* 63092bf81aSkettenis * Maximum # of interrupt sources per CPU. 64 to fit in one word. 64f5df1827Smickey * ioapics can theoretically produce more, but it's not likely to 65f5df1827Smickey * happen. For multiple ioapics, things can be routed to different 66f5df1827Smickey * CPUs. 67f5df1827Smickey */ 68092bf81aSkettenis #define MAX_INTR_SOURCES 64 69f5df1827Smickey #define NUM_LEGACY_IRQS 16 70f5df1827Smickey 71f5df1827Smickey /* 72f5df1827Smickey * Low and high boundaries between which interrupt gates will 73f5df1827Smickey * be allocated in the IDT. 74f5df1827Smickey */ 75f5df1827Smickey #define IDT_INTR_LOW (0x20 + NUM_LEGACY_IRQS) 76f5df1827Smickey #define IDT_INTR_HIGH 0xef 77f5df1827Smickey 78f5df1827Smickey #define X86_IPI_HALT 0x00000001 7902befdbeSart #define X86_IPI_NOP 0x00000002 800a894fa6Sdv #define X86_IPI_VMCLEAR_VMM 0x00000004 8170cf982aSguenther #define X86_IPI_PCTR 0x00000010 82f5df1827Smickey #define X86_IPI_MTRR 0x00000020 83fd94711fSguenther #define X86_IPI_SETPERF 0x00000040 8417e58ef0Sandreas #define X86_IPI_DDB 0x00000080 8577d6d4a2Smlarkin #define X86_IPI_START_VMM 0x00000100 8677d6d4a2Smlarkin #define X86_IPI_STOP_VMM 0x00000200 873fb0e55cSjsg #define X86_IPI_WBINVD 0x00000400 88f5df1827Smickey 890a894fa6Sdv #define X86_NIPI 12 90f5df1827Smickey 91f5df1827Smickey #define IREENT_MAGIC 0x18041969 92f5df1827Smickey 93161a6d1dSderaadt #endif /* _AMD64_INTRDEFS_H */ 94