+#define AST_PREEMPT 0x01
+#define AST_QUANTUM 0x02
+#define AST_URGENT 0x04
+#define AST_HANDOFF 0x08
+#define AST_YIELD 0x10
+#define AST_APC 0x20 /* migration APC hook */
+#define AST_LEDGER 0x40
+#define AST_BSD 0x80
+#define AST_KPERF 0x100 /* kernel profiling */
+#define AST_MACF 0x200 /* MACF user ret pending */
+#define AST_RESET_PCS 0x400 /* restartable ranges */
+#define AST_ARCADE 0x800 /* arcade subsciption support */
+#define AST_GUARD 0x1000
+#define AST_TELEMETRY_USER 0x2000 /* telemetry sample requested on interrupt from userspace */
+#define AST_TELEMETRY_KERNEL 0x4000 /* telemetry sample requested on interrupt from kernel */
+#define AST_TELEMETRY_PMI 0x8000 /* telemetry sample requested on PMI */
+#define AST_SFI 0x10000 /* Evaluate if SFI wait is needed before return to userspace */
+#define AST_DTRACE 0x20000
+#define AST_TELEMETRY_IO 0x40000 /* telemetry sample requested for I/O */
+#define AST_KEVENT 0x80000
+#define AST_REBALANCE 0x100000 /* thread context switched due to rebalancing */
+#define AST_UNQUIESCE 0x200000 /* catch unquiesced processor before returning to userspace */
+
+#define AST_NONE 0x00
+#define AST_ALL (~AST_NONE)
+
+#define AST_SCHEDULING (AST_PREEMPTION | AST_YIELD | AST_HANDOFF)
+#define AST_PREEMPTION (AST_PREEMPT | AST_QUANTUM | AST_URGENT)
+
+#define AST_TELEMETRY_ALL (AST_TELEMETRY_USER | AST_TELEMETRY_KERNEL | \
+ AST_TELEMETRY_PMI | AST_TELEMETRY_IO)
+
+/* Per-thread ASTs follow the thread at context-switch time. */
+#define AST_PER_THREAD (AST_APC | AST_BSD | AST_MACF | AST_RESET_PCS | \
+ AST_ARCADE | AST_LEDGER | AST_GUARD | AST_TELEMETRY_ALL | AST_KEVENT)
+
+/* Handle AST_URGENT detected while in the kernel */
+extern void ast_taken_kernel(void);
+
+/* Handle an AST flag set while returning to user mode (may continue via thread_exception_return) */
+extern void ast_taken_user(void);