From 1975b2b1574e691b00d6b4943a0727f14d63363b Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Fri, 8 Jan 2016 19:11:59 +0000 Subject: [PATCH] Error code constants for selector-based error codes Provide symbolic constant support as well. Signed-off-by: Andrew Cooper --- include/arch/x86/processor.h | 14 +++++++++++++ include/arch/x86/symbolic-const.h | 33 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/include/arch/x86/processor.h b/include/arch/x86/processor.h index d1346f6..62ea832 100644 --- a/include/arch/x86/processor.h +++ b/include/arch/x86/processor.h @@ -123,6 +123,20 @@ /* Number of reserved vectors for exceptions. */ #define X86_NR_RESERVED_VECTORS 32 +/* + * Error Code mnemonics. + */ +/* Segment-based Error Code - architecturally defined. */ +#define X86_EC_EXT (1U << 0) /* External event. */ +#define X86_EC_IDT (1U << 1) /* Descriptor Location. IDT, or LDT/GDT */ +#define X86_EC_TI (1U << 2) /* Only if !IDT. LDT or GDT. */ + +/* Segment-based Error Code - supplemental constants. */ +#define X86_EC_TABLE_MASK (3U << 1) +#define X86_EC_SEL_MASK (-1L << 3) +#define X86_EC_GDT 0 +#define X86_EC_LDT X86_EC_TI + #endif /* XTF_X86_PROCESSOR_H */ /* diff --git a/include/arch/x86/symbolic-const.h b/include/arch/x86/symbolic-const.h index 2aa1eca..9d762a3 100644 --- a/include/arch/x86/symbolic-const.h +++ b/include/arch/x86/symbolic-const.h @@ -9,6 +9,7 @@ #include #include +#include /** * Tokenise and OR together. @@ -54,6 +55,38 @@ #define INIT_GDTE_SYM(base, limit, ...) \ INIT_GDTE(base, limit, TOK_OR(SEG_ATTR_, ##__VA_ARGS__)) +/** + * Create a selector based error code using X86_EC_ mnemonics. + * + * @param sel Selector value. + * @param ... Partial X86_EC_ tokens. + * + * Example usage: + * - EXC_EC_SYM(0, GDT) + * - Uses @ref X86_EC_GDT. + * + * - EXC_EC_SYM(0, IDT, EXT) + * - Uses @ref X86_EC_IDT and @ref X86_EC_EXT. + */ +#define SEL_EC_SYM(sel, ...) (sel | TOK_OR(X86_EC_, ##__VA_ARGS__)) + +/** + * Create an exception selector based error code using mnemonics, with + * implicit @ref X86_EC_IDT. + * + * @param exc Partial X86_EXC_ token for selector. + * @param ... Partial X86_EC_ tokens. + * + * Example usage: + * - EXC_EC_SYM(DE) + * - Uses @ref X86_EXC_DE and @ref X86_EC_IDT. + * + * - EXC_EC_SYM(DB, EXT) + * - Uses @ref X86_EXC_DB, @ref X86_EC_IDT and @ref X86_EC_EXT. + */ +#define EXC_EC_SYM(exc, ...) \ + SEL_EC_SYM(((X86_EXC_ ## exc) << 3), IDT, ##__VA_ARGS__) + #endif /* XTF_X86_SYMBOLIC_CONST_H */ /* -- 2.39.5