+/* Generated from i386_isrdef.c.j2. Do NOT modify */
+
#include "i386_intr.h"
#include <lunaix/types.h>
#define DECLARE_ISR(iv) extern void _asm_isr##iv();
-#define ISR_INSTALL(idt, iv, isr) \
- _idt[iv] = ((ptr_t)isr & 0xffff0000) | IDT_ATTR(0, IDT_INTERRUPT); \
- _idt[iv] <<= 32; \
- _idt[iv] |= (KERNEL_CS << 16) | ((ptr_t)isr & 0x0000ffff);
+#define ISR_INSTALL(idt, iv, isr, dpl) \
+ _idt[iv] = ((ptr_t)isr & 0xffff0000) | IDT_ATTR(dpl, IDT_INTERRUPT); \
+ _idt[iv] <<= 32; \
+ _idt[iv] |= (KERNEL_CS << 16) | ((ptr_t)isr & 0x0000ffff); \
u64_t _idt[IDT_ENTRY];
u16_t _idt_limit = sizeof(_idt) - 1;
void
exception_install_handler()
{
- ISR_INSTALL(_idt, 0, _asm_isr0)
- ISR_INSTALL(_idt, 1, _asm_isr1)
- ISR_INSTALL(_idt, 2, _asm_isr2)
- ISR_INSTALL(_idt, 3, _asm_isr3)
- ISR_INSTALL(_idt, 4, _asm_isr4)
- ISR_INSTALL(_idt, 5, _asm_isr5)
- ISR_INSTALL(_idt, 6, _asm_isr6)
- ISR_INSTALL(_idt, 7, _asm_isr7)
- ISR_INSTALL(_idt, 8, _asm_isr8)
- ISR_INSTALL(_idt, 9, _asm_isr9)
- ISR_INSTALL(_idt, 10, _asm_isr10)
- ISR_INSTALL(_idt, 11, _asm_isr11)
- ISR_INSTALL(_idt, 12, _asm_isr12)
- ISR_INSTALL(_idt, 13, _asm_isr13)
- ISR_INSTALL(_idt, 14, _asm_isr14)
- ISR_INSTALL(_idt, 15, _asm_isr15)
- ISR_INSTALL(_idt, 16, _asm_isr16)
- ISR_INSTALL(_idt, 17, _asm_isr17)
- ISR_INSTALL(_idt, 18, _asm_isr18)
- ISR_INSTALL(_idt, 19, _asm_isr19)
- ISR_INSTALL(_idt, 20, _asm_isr20)
- ISR_INSTALL(_idt, 21, _asm_isr21)
- ISR_INSTALL(_idt, 22, _asm_isr22)
- ISR_INSTALL(_idt, 23, _asm_isr23)
- ISR_INSTALL(_idt, 24, _asm_isr24)
- ISR_INSTALL(_idt, 25, _asm_isr25)
- ISR_INSTALL(_idt, 26, _asm_isr26)
- ISR_INSTALL(_idt, 27, _asm_isr27)
- ISR_INSTALL(_idt, 28, _asm_isr28)
- ISR_INSTALL(_idt, 29, _asm_isr29)
- ISR_INSTALL(_idt, 30, _asm_isr30)
- ISR_INSTALL(_idt, 31, _asm_isr31)
- ISR_INSTALL(_idt, 32, _asm_isr32)
- ISR_INSTALL(_idt, 33, _asm_isr33)
- ISR_INSTALL(_idt, 34, _asm_isr34)
- ISR_INSTALL(_idt, 35, _asm_isr35)
- ISR_INSTALL(_idt, 36, _asm_isr36)
- ISR_INSTALL(_idt, 37, _asm_isr37)
- ISR_INSTALL(_idt, 38, _asm_isr38)
- ISR_INSTALL(_idt, 39, _asm_isr39)
- ISR_INSTALL(_idt, 40, _asm_isr40)
- ISR_INSTALL(_idt, 41, _asm_isr41)
- ISR_INSTALL(_idt, 42, _asm_isr42)
- ISR_INSTALL(_idt, 43, _asm_isr43)
- ISR_INSTALL(_idt, 44, _asm_isr44)
- ISR_INSTALL(_idt, 45, _asm_isr45)
- ISR_INSTALL(_idt, 46, _asm_isr46)
- ISR_INSTALL(_idt, 47, _asm_isr47)
- ISR_INSTALL(_idt, 48, _asm_isr48)
- ISR_INSTALL(_idt, 49, _asm_isr49)
- ISR_INSTALL(_idt, 50, _asm_isr50)
- ISR_INSTALL(_idt, 51, _asm_isr51)
- ISR_INSTALL(_idt, 52, _asm_isr52)
- ISR_INSTALL(_idt, 53, _asm_isr53)
- ISR_INSTALL(_idt, 54, _asm_isr54)
- ISR_INSTALL(_idt, 55, _asm_isr55)
- ISR_INSTALL(_idt, 56, _asm_isr56)
- ISR_INSTALL(_idt, 57, _asm_isr57)
- ISR_INSTALL(_idt, 58, _asm_isr58)
- ISR_INSTALL(_idt, 59, _asm_isr59)
- ISR_INSTALL(_idt, 60, _asm_isr60)
- ISR_INSTALL(_idt, 61, _asm_isr61)
- ISR_INSTALL(_idt, 62, _asm_isr62)
- ISR_INSTALL(_idt, 63, _asm_isr63)
- ISR_INSTALL(_idt, 64, _asm_isr64)
- ISR_INSTALL(_idt, 65, _asm_isr65)
- ISR_INSTALL(_idt, 66, _asm_isr66)
- ISR_INSTALL(_idt, 67, _asm_isr67)
- ISR_INSTALL(_idt, 68, _asm_isr68)
- ISR_INSTALL(_idt, 69, _asm_isr69)
- ISR_INSTALL(_idt, 70, _asm_isr70)
- ISR_INSTALL(_idt, 71, _asm_isr71)
- ISR_INSTALL(_idt, 72, _asm_isr72)
- ISR_INSTALL(_idt, 73, _asm_isr73)
- ISR_INSTALL(_idt, 74, _asm_isr74)
- ISR_INSTALL(_idt, 75, _asm_isr75)
- ISR_INSTALL(_idt, 76, _asm_isr76)
- ISR_INSTALL(_idt, 77, _asm_isr77)
- ISR_INSTALL(_idt, 78, _asm_isr78)
- ISR_INSTALL(_idt, 79, _asm_isr79)
- ISR_INSTALL(_idt, 80, _asm_isr80)
- ISR_INSTALL(_idt, 81, _asm_isr81)
- ISR_INSTALL(_idt, 82, _asm_isr82)
- ISR_INSTALL(_idt, 83, _asm_isr83)
- ISR_INSTALL(_idt, 84, _asm_isr84)
- ISR_INSTALL(_idt, 85, _asm_isr85)
- ISR_INSTALL(_idt, 86, _asm_isr86)
- ISR_INSTALL(_idt, 87, _asm_isr87)
- ISR_INSTALL(_idt, 88, _asm_isr88)
- ISR_INSTALL(_idt, 89, _asm_isr89)
- ISR_INSTALL(_idt, 90, _asm_isr90)
- ISR_INSTALL(_idt, 91, _asm_isr91)
- ISR_INSTALL(_idt, 92, _asm_isr92)
- ISR_INSTALL(_idt, 93, _asm_isr93)
- ISR_INSTALL(_idt, 94, _asm_isr94)
- ISR_INSTALL(_idt, 95, _asm_isr95)
- ISR_INSTALL(_idt, 96, _asm_isr96)
- ISR_INSTALL(_idt, 97, _asm_isr97)
- ISR_INSTALL(_idt, 98, _asm_isr98)
- ISR_INSTALL(_idt, 99, _asm_isr99)
- ISR_INSTALL(_idt, 100, _asm_isr100)
- ISR_INSTALL(_idt, 101, _asm_isr101)
- ISR_INSTALL(_idt, 102, _asm_isr102)
- ISR_INSTALL(_idt, 103, _asm_isr103)
- ISR_INSTALL(_idt, 104, _asm_isr104)
- ISR_INSTALL(_idt, 105, _asm_isr105)
- ISR_INSTALL(_idt, 106, _asm_isr106)
- ISR_INSTALL(_idt, 107, _asm_isr107)
- ISR_INSTALL(_idt, 108, _asm_isr108)
- ISR_INSTALL(_idt, 109, _asm_isr109)
- ISR_INSTALL(_idt, 110, _asm_isr110)
- ISR_INSTALL(_idt, 111, _asm_isr111)
- ISR_INSTALL(_idt, 112, _asm_isr112)
- ISR_INSTALL(_idt, 113, _asm_isr113)
- ISR_INSTALL(_idt, 114, _asm_isr114)
- ISR_INSTALL(_idt, 115, _asm_isr115)
- ISR_INSTALL(_idt, 116, _asm_isr116)
- ISR_INSTALL(_idt, 117, _asm_isr117)
- ISR_INSTALL(_idt, 118, _asm_isr118)
- ISR_INSTALL(_idt, 119, _asm_isr119)
- ISR_INSTALL(_idt, 120, _asm_isr120)
- ISR_INSTALL(_idt, 121, _asm_isr121)
- ISR_INSTALL(_idt, 122, _asm_isr122)
- ISR_INSTALL(_idt, 123, _asm_isr123)
- ISR_INSTALL(_idt, 124, _asm_isr124)
- ISR_INSTALL(_idt, 125, _asm_isr125)
- ISR_INSTALL(_idt, 126, _asm_isr126)
- ISR_INSTALL(_idt, 127, _asm_isr127)
- ISR_INSTALL(_idt, 128, _asm_isr128)
- ISR_INSTALL(_idt, 129, _asm_isr129)
- ISR_INSTALL(_idt, 130, _asm_isr130)
- ISR_INSTALL(_idt, 131, _asm_isr131)
- ISR_INSTALL(_idt, 132, _asm_isr132)
- ISR_INSTALL(_idt, 133, _asm_isr133)
- ISR_INSTALL(_idt, 134, _asm_isr134)
- ISR_INSTALL(_idt, 135, _asm_isr135)
- ISR_INSTALL(_idt, 136, _asm_isr136)
- ISR_INSTALL(_idt, 137, _asm_isr137)
- ISR_INSTALL(_idt, 138, _asm_isr138)
- ISR_INSTALL(_idt, 139, _asm_isr139)
- ISR_INSTALL(_idt, 140, _asm_isr140)
- ISR_INSTALL(_idt, 141, _asm_isr141)
- ISR_INSTALL(_idt, 142, _asm_isr142)
- ISR_INSTALL(_idt, 143, _asm_isr143)
- ISR_INSTALL(_idt, 144, _asm_isr144)
- ISR_INSTALL(_idt, 145, _asm_isr145)
- ISR_INSTALL(_idt, 146, _asm_isr146)
- ISR_INSTALL(_idt, 147, _asm_isr147)
- ISR_INSTALL(_idt, 148, _asm_isr148)
- ISR_INSTALL(_idt, 149, _asm_isr149)
- ISR_INSTALL(_idt, 150, _asm_isr150)
- ISR_INSTALL(_idt, 151, _asm_isr151)
- ISR_INSTALL(_idt, 152, _asm_isr152)
- ISR_INSTALL(_idt, 153, _asm_isr153)
- ISR_INSTALL(_idt, 154, _asm_isr154)
- ISR_INSTALL(_idt, 155, _asm_isr155)
- ISR_INSTALL(_idt, 156, _asm_isr156)
- ISR_INSTALL(_idt, 157, _asm_isr157)
- ISR_INSTALL(_idt, 158, _asm_isr158)
- ISR_INSTALL(_idt, 159, _asm_isr159)
- ISR_INSTALL(_idt, 160, _asm_isr160)
- ISR_INSTALL(_idt, 161, _asm_isr161)
- ISR_INSTALL(_idt, 162, _asm_isr162)
- ISR_INSTALL(_idt, 163, _asm_isr163)
- ISR_INSTALL(_idt, 164, _asm_isr164)
- ISR_INSTALL(_idt, 165, _asm_isr165)
- ISR_INSTALL(_idt, 166, _asm_isr166)
- ISR_INSTALL(_idt, 167, _asm_isr167)
- ISR_INSTALL(_idt, 168, _asm_isr168)
- ISR_INSTALL(_idt, 169, _asm_isr169)
- ISR_INSTALL(_idt, 170, _asm_isr170)
- ISR_INSTALL(_idt, 171, _asm_isr171)
- ISR_INSTALL(_idt, 172, _asm_isr172)
- ISR_INSTALL(_idt, 173, _asm_isr173)
- ISR_INSTALL(_idt, 174, _asm_isr174)
- ISR_INSTALL(_idt, 175, _asm_isr175)
- ISR_INSTALL(_idt, 176, _asm_isr176)
- ISR_INSTALL(_idt, 177, _asm_isr177)
- ISR_INSTALL(_idt, 178, _asm_isr178)
- ISR_INSTALL(_idt, 179, _asm_isr179)
- ISR_INSTALL(_idt, 180, _asm_isr180)
- ISR_INSTALL(_idt, 181, _asm_isr181)
- ISR_INSTALL(_idt, 182, _asm_isr182)
- ISR_INSTALL(_idt, 183, _asm_isr183)
- ISR_INSTALL(_idt, 184, _asm_isr184)
- ISR_INSTALL(_idt, 185, _asm_isr185)
- ISR_INSTALL(_idt, 186, _asm_isr186)
- ISR_INSTALL(_idt, 187, _asm_isr187)
- ISR_INSTALL(_idt, 188, _asm_isr188)
- ISR_INSTALL(_idt, 189, _asm_isr189)
- ISR_INSTALL(_idt, 190, _asm_isr190)
- ISR_INSTALL(_idt, 191, _asm_isr191)
- ISR_INSTALL(_idt, 192, _asm_isr192)
- ISR_INSTALL(_idt, 193, _asm_isr193)
- ISR_INSTALL(_idt, 194, _asm_isr194)
- ISR_INSTALL(_idt, 195, _asm_isr195)
- ISR_INSTALL(_idt, 196, _asm_isr196)
- ISR_INSTALL(_idt, 197, _asm_isr197)
- ISR_INSTALL(_idt, 198, _asm_isr198)
- ISR_INSTALL(_idt, 199, _asm_isr199)
- ISR_INSTALL(_idt, 200, _asm_isr200)
- ISR_INSTALL(_idt, 201, _asm_isr201)
- ISR_INSTALL(_idt, 202, _asm_isr202)
- ISR_INSTALL(_idt, 203, _asm_isr203)
- ISR_INSTALL(_idt, 204, _asm_isr204)
- ISR_INSTALL(_idt, 205, _asm_isr205)
- ISR_INSTALL(_idt, 206, _asm_isr206)
- ISR_INSTALL(_idt, 207, _asm_isr207)
- ISR_INSTALL(_idt, 208, _asm_isr208)
- ISR_INSTALL(_idt, 209, _asm_isr209)
- ISR_INSTALL(_idt, 210, _asm_isr210)
- ISR_INSTALL(_idt, 211, _asm_isr211)
- ISR_INSTALL(_idt, 212, _asm_isr212)
- ISR_INSTALL(_idt, 213, _asm_isr213)
- ISR_INSTALL(_idt, 214, _asm_isr214)
- ISR_INSTALL(_idt, 215, _asm_isr215)
- ISR_INSTALL(_idt, 216, _asm_isr216)
- ISR_INSTALL(_idt, 217, _asm_isr217)
- ISR_INSTALL(_idt, 218, _asm_isr218)
- ISR_INSTALL(_idt, 219, _asm_isr219)
- ISR_INSTALL(_idt, 220, _asm_isr220)
- ISR_INSTALL(_idt, 221, _asm_isr221)
- ISR_INSTALL(_idt, 222, _asm_isr222)
- ISR_INSTALL(_idt, 223, _asm_isr223)
- ISR_INSTALL(_idt, 224, _asm_isr224)
- ISR_INSTALL(_idt, 225, _asm_isr225)
- ISR_INSTALL(_idt, 226, _asm_isr226)
- ISR_INSTALL(_idt, 227, _asm_isr227)
- ISR_INSTALL(_idt, 228, _asm_isr228)
- ISR_INSTALL(_idt, 229, _asm_isr229)
- ISR_INSTALL(_idt, 230, _asm_isr230)
- ISR_INSTALL(_idt, 231, _asm_isr231)
- ISR_INSTALL(_idt, 232, _asm_isr232)
- ISR_INSTALL(_idt, 233, _asm_isr233)
- ISR_INSTALL(_idt, 234, _asm_isr234)
- ISR_INSTALL(_idt, 235, _asm_isr235)
- ISR_INSTALL(_idt, 236, _asm_isr236)
- ISR_INSTALL(_idt, 237, _asm_isr237)
- ISR_INSTALL(_idt, 238, _asm_isr238)
- ISR_INSTALL(_idt, 239, _asm_isr239)
- ISR_INSTALL(_idt, 240, _asm_isr240)
- ISR_INSTALL(_idt, 241, _asm_isr241)
- ISR_INSTALL(_idt, 242, _asm_isr242)
- ISR_INSTALL(_idt, 243, _asm_isr243)
- ISR_INSTALL(_idt, 244, _asm_isr244)
- ISR_INSTALL(_idt, 245, _asm_isr245)
- ISR_INSTALL(_idt, 246, _asm_isr246)
- ISR_INSTALL(_idt, 247, _asm_isr247)
- ISR_INSTALL(_idt, 248, _asm_isr248)
- ISR_INSTALL(_idt, 249, _asm_isr249)
- ISR_INSTALL(_idt, 250, _asm_isr250)
- ISR_INSTALL(_idt, 251, _asm_isr251)
- ISR_INSTALL(_idt, 252, _asm_isr252)
- ISR_INSTALL(_idt, 253, _asm_isr253)
- ISR_INSTALL(_idt, 254, _asm_isr254)
- ISR_INSTALL(_idt, 255, _asm_isr255)
+ ISR_INSTALL(_idt, 0, _asm_isr0, 0)
+ ISR_INSTALL(_idt, 1, _asm_isr1, 0)
+ ISR_INSTALL(_idt, 2, _asm_isr2, 0)
+ ISR_INSTALL(_idt, 3, _asm_isr3, 0)
+ ISR_INSTALL(_idt, 4, _asm_isr4, 0)
+ ISR_INSTALL(_idt, 5, _asm_isr5, 0)
+ ISR_INSTALL(_idt, 6, _asm_isr6, 0)
+ ISR_INSTALL(_idt, 7, _asm_isr7, 0)
+ ISR_INSTALL(_idt, 8, _asm_isr8, 0)
+ ISR_INSTALL(_idt, 9, _asm_isr9, 0)
+ ISR_INSTALL(_idt, 10, _asm_isr10, 0)
+ ISR_INSTALL(_idt, 11, _asm_isr11, 0)
+ ISR_INSTALL(_idt, 12, _asm_isr12, 0)
+ ISR_INSTALL(_idt, 13, _asm_isr13, 0)
+ ISR_INSTALL(_idt, 14, _asm_isr14, 0)
+ ISR_INSTALL(_idt, 15, _asm_isr15, 0)
+ ISR_INSTALL(_idt, 16, _asm_isr16, 0)
+ ISR_INSTALL(_idt, 17, _asm_isr17, 0)
+ ISR_INSTALL(_idt, 18, _asm_isr18, 0)
+ ISR_INSTALL(_idt, 19, _asm_isr19, 0)
+ ISR_INSTALL(_idt, 20, _asm_isr20, 0)
+ ISR_INSTALL(_idt, 21, _asm_isr21, 0)
+ ISR_INSTALL(_idt, 22, _asm_isr22, 0)
+ ISR_INSTALL(_idt, 23, _asm_isr23, 0)
+ ISR_INSTALL(_idt, 24, _asm_isr24, 0)
+ ISR_INSTALL(_idt, 25, _asm_isr25, 0)
+ ISR_INSTALL(_idt, 26, _asm_isr26, 0)
+ ISR_INSTALL(_idt, 27, _asm_isr27, 0)
+ ISR_INSTALL(_idt, 28, _asm_isr28, 0)
+ ISR_INSTALL(_idt, 29, _asm_isr29, 0)
+ ISR_INSTALL(_idt, 30, _asm_isr30, 0)
+ ISR_INSTALL(_idt, 31, _asm_isr31, 0)
+ ISR_INSTALL(_idt, 32, _asm_isr32, 0)
+ ISR_INSTALL(_idt, 33, _asm_isr33, 3)
+ ISR_INSTALL(_idt, 34, _asm_isr34, 0)
+ ISR_INSTALL(_idt, 35, _asm_isr35, 0)
+ ISR_INSTALL(_idt, 36, _asm_isr36, 0)
+ ISR_INSTALL(_idt, 37, _asm_isr37, 0)
+ ISR_INSTALL(_idt, 38, _asm_isr38, 0)
+ ISR_INSTALL(_idt, 39, _asm_isr39, 0)
+ ISR_INSTALL(_idt, 40, _asm_isr40, 0)
+ ISR_INSTALL(_idt, 41, _asm_isr41, 0)
+ ISR_INSTALL(_idt, 42, _asm_isr42, 0)
+ ISR_INSTALL(_idt, 43, _asm_isr43, 0)
+ ISR_INSTALL(_idt, 44, _asm_isr44, 0)
+ ISR_INSTALL(_idt, 45, _asm_isr45, 0)
+ ISR_INSTALL(_idt, 46, _asm_isr46, 0)
+ ISR_INSTALL(_idt, 47, _asm_isr47, 0)
+ ISR_INSTALL(_idt, 48, _asm_isr48, 0)
+ ISR_INSTALL(_idt, 49, _asm_isr49, 0)
+ ISR_INSTALL(_idt, 50, _asm_isr50, 0)
+ ISR_INSTALL(_idt, 51, _asm_isr51, 0)
+ ISR_INSTALL(_idt, 52, _asm_isr52, 0)
+ ISR_INSTALL(_idt, 53, _asm_isr53, 0)
+ ISR_INSTALL(_idt, 54, _asm_isr54, 0)
+ ISR_INSTALL(_idt, 55, _asm_isr55, 0)
+ ISR_INSTALL(_idt, 56, _asm_isr56, 0)
+ ISR_INSTALL(_idt, 57, _asm_isr57, 0)
+ ISR_INSTALL(_idt, 58, _asm_isr58, 0)
+ ISR_INSTALL(_idt, 59, _asm_isr59, 0)
+ ISR_INSTALL(_idt, 60, _asm_isr60, 0)
+ ISR_INSTALL(_idt, 61, _asm_isr61, 0)
+ ISR_INSTALL(_idt, 62, _asm_isr62, 0)
+ ISR_INSTALL(_idt, 63, _asm_isr63, 0)
+ ISR_INSTALL(_idt, 64, _asm_isr64, 0)
+ ISR_INSTALL(_idt, 65, _asm_isr65, 0)
+ ISR_INSTALL(_idt, 66, _asm_isr66, 0)
+ ISR_INSTALL(_idt, 67, _asm_isr67, 0)
+ ISR_INSTALL(_idt, 68, _asm_isr68, 0)
+ ISR_INSTALL(_idt, 69, _asm_isr69, 0)
+ ISR_INSTALL(_idt, 70, _asm_isr70, 0)
+ ISR_INSTALL(_idt, 71, _asm_isr71, 0)
+ ISR_INSTALL(_idt, 72, _asm_isr72, 0)
+ ISR_INSTALL(_idt, 73, _asm_isr73, 0)
+ ISR_INSTALL(_idt, 74, _asm_isr74, 0)
+ ISR_INSTALL(_idt, 75, _asm_isr75, 0)
+ ISR_INSTALL(_idt, 76, _asm_isr76, 0)
+ ISR_INSTALL(_idt, 77, _asm_isr77, 0)
+ ISR_INSTALL(_idt, 78, _asm_isr78, 0)
+ ISR_INSTALL(_idt, 79, _asm_isr79, 0)
+ ISR_INSTALL(_idt, 80, _asm_isr80, 0)
+ ISR_INSTALL(_idt, 81, _asm_isr81, 0)
+ ISR_INSTALL(_idt, 82, _asm_isr82, 0)
+ ISR_INSTALL(_idt, 83, _asm_isr83, 0)
+ ISR_INSTALL(_idt, 84, _asm_isr84, 0)
+ ISR_INSTALL(_idt, 85, _asm_isr85, 0)
+ ISR_INSTALL(_idt, 86, _asm_isr86, 0)
+ ISR_INSTALL(_idt, 87, _asm_isr87, 0)
+ ISR_INSTALL(_idt, 88, _asm_isr88, 0)
+ ISR_INSTALL(_idt, 89, _asm_isr89, 0)
+ ISR_INSTALL(_idt, 90, _asm_isr90, 0)
+ ISR_INSTALL(_idt, 91, _asm_isr91, 0)
+ ISR_INSTALL(_idt, 92, _asm_isr92, 0)
+ ISR_INSTALL(_idt, 93, _asm_isr93, 0)
+ ISR_INSTALL(_idt, 94, _asm_isr94, 0)
+ ISR_INSTALL(_idt, 95, _asm_isr95, 0)
+ ISR_INSTALL(_idt, 96, _asm_isr96, 0)
+ ISR_INSTALL(_idt, 97, _asm_isr97, 0)
+ ISR_INSTALL(_idt, 98, _asm_isr98, 0)
+ ISR_INSTALL(_idt, 99, _asm_isr99, 0)
+ ISR_INSTALL(_idt, 100, _asm_isr100, 0)
+ ISR_INSTALL(_idt, 101, _asm_isr101, 0)
+ ISR_INSTALL(_idt, 102, _asm_isr102, 0)
+ ISR_INSTALL(_idt, 103, _asm_isr103, 0)
+ ISR_INSTALL(_idt, 104, _asm_isr104, 0)
+ ISR_INSTALL(_idt, 105, _asm_isr105, 0)
+ ISR_INSTALL(_idt, 106, _asm_isr106, 0)
+ ISR_INSTALL(_idt, 107, _asm_isr107, 0)
+ ISR_INSTALL(_idt, 108, _asm_isr108, 0)
+ ISR_INSTALL(_idt, 109, _asm_isr109, 0)
+ ISR_INSTALL(_idt, 110, _asm_isr110, 0)
+ ISR_INSTALL(_idt, 111, _asm_isr111, 0)
+ ISR_INSTALL(_idt, 112, _asm_isr112, 0)
+ ISR_INSTALL(_idt, 113, _asm_isr113, 0)
+ ISR_INSTALL(_idt, 114, _asm_isr114, 0)
+ ISR_INSTALL(_idt, 115, _asm_isr115, 0)
+ ISR_INSTALL(_idt, 116, _asm_isr116, 0)
+ ISR_INSTALL(_idt, 117, _asm_isr117, 0)
+ ISR_INSTALL(_idt, 118, _asm_isr118, 0)
+ ISR_INSTALL(_idt, 119, _asm_isr119, 0)
+ ISR_INSTALL(_idt, 120, _asm_isr120, 0)
+ ISR_INSTALL(_idt, 121, _asm_isr121, 0)
+ ISR_INSTALL(_idt, 122, _asm_isr122, 0)
+ ISR_INSTALL(_idt, 123, _asm_isr123, 0)
+ ISR_INSTALL(_idt, 124, _asm_isr124, 0)
+ ISR_INSTALL(_idt, 125, _asm_isr125, 0)
+ ISR_INSTALL(_idt, 126, _asm_isr126, 0)
+ ISR_INSTALL(_idt, 127, _asm_isr127, 0)
+ ISR_INSTALL(_idt, 128, _asm_isr128, 0)
+ ISR_INSTALL(_idt, 129, _asm_isr129, 0)
+ ISR_INSTALL(_idt, 130, _asm_isr130, 0)
+ ISR_INSTALL(_idt, 131, _asm_isr131, 0)
+ ISR_INSTALL(_idt, 132, _asm_isr132, 0)
+ ISR_INSTALL(_idt, 133, _asm_isr133, 0)
+ ISR_INSTALL(_idt, 134, _asm_isr134, 0)
+ ISR_INSTALL(_idt, 135, _asm_isr135, 0)
+ ISR_INSTALL(_idt, 136, _asm_isr136, 0)
+ ISR_INSTALL(_idt, 137, _asm_isr137, 0)
+ ISR_INSTALL(_idt, 138, _asm_isr138, 0)
+ ISR_INSTALL(_idt, 139, _asm_isr139, 0)
+ ISR_INSTALL(_idt, 140, _asm_isr140, 0)
+ ISR_INSTALL(_idt, 141, _asm_isr141, 0)
+ ISR_INSTALL(_idt, 142, _asm_isr142, 0)
+ ISR_INSTALL(_idt, 143, _asm_isr143, 0)
+ ISR_INSTALL(_idt, 144, _asm_isr144, 0)
+ ISR_INSTALL(_idt, 145, _asm_isr145, 0)
+ ISR_INSTALL(_idt, 146, _asm_isr146, 0)
+ ISR_INSTALL(_idt, 147, _asm_isr147, 0)
+ ISR_INSTALL(_idt, 148, _asm_isr148, 0)
+ ISR_INSTALL(_idt, 149, _asm_isr149, 0)
+ ISR_INSTALL(_idt, 150, _asm_isr150, 0)
+ ISR_INSTALL(_idt, 151, _asm_isr151, 0)
+ ISR_INSTALL(_idt, 152, _asm_isr152, 0)
+ ISR_INSTALL(_idt, 153, _asm_isr153, 0)
+ ISR_INSTALL(_idt, 154, _asm_isr154, 0)
+ ISR_INSTALL(_idt, 155, _asm_isr155, 0)
+ ISR_INSTALL(_idt, 156, _asm_isr156, 0)
+ ISR_INSTALL(_idt, 157, _asm_isr157, 0)
+ ISR_INSTALL(_idt, 158, _asm_isr158, 0)
+ ISR_INSTALL(_idt, 159, _asm_isr159, 0)
+ ISR_INSTALL(_idt, 160, _asm_isr160, 0)
+ ISR_INSTALL(_idt, 161, _asm_isr161, 0)
+ ISR_INSTALL(_idt, 162, _asm_isr162, 0)
+ ISR_INSTALL(_idt, 163, _asm_isr163, 0)
+ ISR_INSTALL(_idt, 164, _asm_isr164, 0)
+ ISR_INSTALL(_idt, 165, _asm_isr165, 0)
+ ISR_INSTALL(_idt, 166, _asm_isr166, 0)
+ ISR_INSTALL(_idt, 167, _asm_isr167, 0)
+ ISR_INSTALL(_idt, 168, _asm_isr168, 0)
+ ISR_INSTALL(_idt, 169, _asm_isr169, 0)
+ ISR_INSTALL(_idt, 170, _asm_isr170, 0)
+ ISR_INSTALL(_idt, 171, _asm_isr171, 0)
+ ISR_INSTALL(_idt, 172, _asm_isr172, 0)
+ ISR_INSTALL(_idt, 173, _asm_isr173, 0)
+ ISR_INSTALL(_idt, 174, _asm_isr174, 0)
+ ISR_INSTALL(_idt, 175, _asm_isr175, 0)
+ ISR_INSTALL(_idt, 176, _asm_isr176, 0)
+ ISR_INSTALL(_idt, 177, _asm_isr177, 0)
+ ISR_INSTALL(_idt, 178, _asm_isr178, 0)
+ ISR_INSTALL(_idt, 179, _asm_isr179, 0)
+ ISR_INSTALL(_idt, 180, _asm_isr180, 0)
+ ISR_INSTALL(_idt, 181, _asm_isr181, 0)
+ ISR_INSTALL(_idt, 182, _asm_isr182, 0)
+ ISR_INSTALL(_idt, 183, _asm_isr183, 0)
+ ISR_INSTALL(_idt, 184, _asm_isr184, 0)
+ ISR_INSTALL(_idt, 185, _asm_isr185, 0)
+ ISR_INSTALL(_idt, 186, _asm_isr186, 0)
+ ISR_INSTALL(_idt, 187, _asm_isr187, 0)
+ ISR_INSTALL(_idt, 188, _asm_isr188, 0)
+ ISR_INSTALL(_idt, 189, _asm_isr189, 0)
+ ISR_INSTALL(_idt, 190, _asm_isr190, 0)
+ ISR_INSTALL(_idt, 191, _asm_isr191, 0)
+ ISR_INSTALL(_idt, 192, _asm_isr192, 0)
+ ISR_INSTALL(_idt, 193, _asm_isr193, 0)
+ ISR_INSTALL(_idt, 194, _asm_isr194, 0)
+ ISR_INSTALL(_idt, 195, _asm_isr195, 0)
+ ISR_INSTALL(_idt, 196, _asm_isr196, 0)
+ ISR_INSTALL(_idt, 197, _asm_isr197, 0)
+ ISR_INSTALL(_idt, 198, _asm_isr198, 0)
+ ISR_INSTALL(_idt, 199, _asm_isr199, 0)
+ ISR_INSTALL(_idt, 200, _asm_isr200, 0)
+ ISR_INSTALL(_idt, 201, _asm_isr201, 0)
+ ISR_INSTALL(_idt, 202, _asm_isr202, 0)
+ ISR_INSTALL(_idt, 203, _asm_isr203, 0)
+ ISR_INSTALL(_idt, 204, _asm_isr204, 0)
+ ISR_INSTALL(_idt, 205, _asm_isr205, 0)
+ ISR_INSTALL(_idt, 206, _asm_isr206, 0)
+ ISR_INSTALL(_idt, 207, _asm_isr207, 0)
+ ISR_INSTALL(_idt, 208, _asm_isr208, 0)
+ ISR_INSTALL(_idt, 209, _asm_isr209, 0)
+ ISR_INSTALL(_idt, 210, _asm_isr210, 0)
+ ISR_INSTALL(_idt, 211, _asm_isr211, 0)
+ ISR_INSTALL(_idt, 212, _asm_isr212, 0)
+ ISR_INSTALL(_idt, 213, _asm_isr213, 0)
+ ISR_INSTALL(_idt, 214, _asm_isr214, 0)
+ ISR_INSTALL(_idt, 215, _asm_isr215, 0)
+ ISR_INSTALL(_idt, 216, _asm_isr216, 0)
+ ISR_INSTALL(_idt, 217, _asm_isr217, 0)
+ ISR_INSTALL(_idt, 218, _asm_isr218, 0)
+ ISR_INSTALL(_idt, 219, _asm_isr219, 0)
+ ISR_INSTALL(_idt, 220, _asm_isr220, 0)
+ ISR_INSTALL(_idt, 221, _asm_isr221, 0)
+ ISR_INSTALL(_idt, 222, _asm_isr222, 0)
+ ISR_INSTALL(_idt, 223, _asm_isr223, 0)
+ ISR_INSTALL(_idt, 224, _asm_isr224, 0)
+ ISR_INSTALL(_idt, 225, _asm_isr225, 0)
+ ISR_INSTALL(_idt, 226, _asm_isr226, 0)
+ ISR_INSTALL(_idt, 227, _asm_isr227, 0)
+ ISR_INSTALL(_idt, 228, _asm_isr228, 0)
+ ISR_INSTALL(_idt, 229, _asm_isr229, 0)
+ ISR_INSTALL(_idt, 230, _asm_isr230, 0)
+ ISR_INSTALL(_idt, 231, _asm_isr231, 0)
+ ISR_INSTALL(_idt, 232, _asm_isr232, 0)
+ ISR_INSTALL(_idt, 233, _asm_isr233, 0)
+ ISR_INSTALL(_idt, 234, _asm_isr234, 0)
+ ISR_INSTALL(_idt, 235, _asm_isr235, 0)
+ ISR_INSTALL(_idt, 236, _asm_isr236, 0)
+ ISR_INSTALL(_idt, 237, _asm_isr237, 0)
+ ISR_INSTALL(_idt, 238, _asm_isr238, 0)
+ ISR_INSTALL(_idt, 239, _asm_isr239, 0)
+ ISR_INSTALL(_idt, 240, _asm_isr240, 0)
+ ISR_INSTALL(_idt, 241, _asm_isr241, 0)
+ ISR_INSTALL(_idt, 242, _asm_isr242, 0)
+ ISR_INSTALL(_idt, 243, _asm_isr243, 0)
+ ISR_INSTALL(_idt, 244, _asm_isr244, 0)
+ ISR_INSTALL(_idt, 245, _asm_isr245, 0)
+ ISR_INSTALL(_idt, 246, _asm_isr246, 0)
+ ISR_INSTALL(_idt, 247, _asm_isr247, 0)
+ ISR_INSTALL(_idt, 248, _asm_isr248, 0)
+ ISR_INSTALL(_idt, 249, _asm_isr249, 0)
+ ISR_INSTALL(_idt, 250, _asm_isr250, 0)
+ ISR_INSTALL(_idt, 251, _asm_isr251, 0)
+ ISR_INSTALL(_idt, 252, _asm_isr252, 0)
+ ISR_INSTALL(_idt, 253, _asm_isr253, 0)
+ ISR_INSTALL(_idt, 254, _asm_isr254, 0)
+ ISR_INSTALL(_idt, 255, _asm_isr255, 0)
}
\ No newline at end of file
import jinja2
import re
import argparse
-import sys
+import math
import json
from pathlib import Path
from abc import ABC, abstractmethod
-class ControlAction(ABC):
- def __init__(self, record) -> None:
- self.__record = record
- self._parse(record)
-
- @staticmethod
- def create(field, value):
- if field == "$range":
- return RangeAction(value)
- else:
- return value
-
- @abstractmethod
- def _parse(self, record):
+class Preprocessor:
+ reHex = re.compile(r"^0x([0-9a-fA-F]+)$")
+ reGranuel = re.compile(r"^(?P<num>[0-9]+)@(?P<g>.+)$")
+ reMacroRef = re.compile(r"^\*(?P<var>[a-zA-z0-9]+)$")
+ reInt = re.compile(r"^[0-9]+$")
+ def __init__(self) -> None:
pass
- @abstractmethod
- def action(self, data, param):
- pass
-
- def get(self):
- return self.__record
-
-class RangeAction(ControlAction):
- def __init__(self, record) -> None:
- self.__ranged_component = re.compile(r"^(?P<index>[0-9]+)$|^(?P<start>[0-9]+)..(?P<end>[0-9]+)$")
- super().__init__(record)
-
- def _parse(self, record):
- if not (record.startswith('[') and record.endswith(']')):
- raise Exception(f"'{record}' is not valid range expression")
- record = record.strip('[]')
+ @staticmethod
+ def expand_str(s: str, param_dict):
+ if Preprocessor.reInt.match(s) is not None:
+ return int(s)
- self.__value=[]
- for component in record.split(','):
- component = component.strip()
- mo = self.__ranged_component.match(component)
- if mo is None:
- raise Exception(f"value '{component}' is not valid range component")
-
- mo = mo.groupdict()
- if mo["index"] is not None:
- self.__value.append(int(mo['index']))
- else:
- start = int(mo['start'])
- end = int(mo['end'])
- self.__value += [x for x in range(start, end + 1)]
-
- self.__value = sorted(self.__value)
-
- def action(self, data, param):
- return super().action(data, param)
+ mo = Preprocessor.reHex.match(s)
+ if mo is not None:
+ return int(s, 16)
+
+ mo = Preprocessor.reGranuel.match(s)
+ if mo is not None:
+ mg = mo.groupdict()
+ num = int(mg['num'])
+ granuel = param_dict["granule"][mg['g']]
+ return num * granuel
+
+ mo = Preprocessor.reMacroRef.match(s)
+ if mo is not None:
+ mg = mo.groupdict()
+ return param_dict[mg['var']]
- def get(self):
- return self.__value
-
+ return s.format_map(param_dict)
class DataObject(ABC):
def __init__(self, name, record):
self.key = name
+ self._record = record
self.user_field = {}
self.ctrl_field = {}
self._parse(record)
@staticmethod
def create(key, record):
- if not isinstance(record, dict):
- return record
+ if PrimitiveType.can_create(record):
+ return PrimitiveType(record)
name = key
t = name if "$type" not in record else record['$type']
return Condition(record)
elif t == "data":
return PlainOldObject(name, record)
+ elif t == "define":
+ return VariableDeclarationObject(record)
+ elif t == "memory_map":
+ return MemoryMapObject(record)
else:
return RawObject(name, record)
- @abstractmethod
def _parse(self, record):
for k, v in record.items():
if k.startswith("$"):
- self.ctrl_field[k.strip("$")] = ControlAction.create(k, v)
+ self.ctrl_field[k.strip("$")] = FieldType.create(k, v)
elif k.startswith("@"):
self.ctrl_field[k.strip("@")] = DataObject.create(k, v)
else:
self.user_field[k] = DataObject.create(k, v)
- @abstractmethod
def expand(self, param={}):
- obj = { **self.user_field }
+ obj2 = {}
for f in self.ctrl_field.values():
if not isinstance(f, DataObject):
continue
- obj.update(**f.expand(param))
- return obj
+ obj2.update(**f.expand(param))
+
+ obj = {}
+ _param = {**param, **obj2}
+ for k, v in self.user_field.items():
+ if isinstance(v, DataObject):
+ obj[k] = v.expand(_param)
+ else:
+ obj[k] = v
+
+ return {**obj, **obj2}
+
+
+class FieldType:
+ def __init__(self, record) -> None:
+ self._record = record
+ self._parse(record)
+
+ @staticmethod
+ def create(field, value):
+ if field == "$range":
+ return RangeType(value)
+ else:
+ return value
+
+ @abstractmethod
+ def _parse(self, record):
+ pass
+
+ @abstractmethod
+ def get(self, param):
+ pass
+
+ def getraw(self):
+ return self.__record
+
+class PrimitiveType(DataObject):
+ def __init__(self, record) -> None:
+ super().__init__("", record)
+
+ @staticmethod
+ def can_create(value):
+ return type(value) in (str, int, bool)
+
+ def _parse(self, record):
+ if type(record) not in (str, int, bool):
+ raise Exception(f"{type(self).__name__} require primitive type input")
+ self.val = record
+
+ if type(record) == str:
+ self.__get_fn = self.__process_str
+ else:
+ self.__get_fn = lambda x: self.val
+
+ def __process_str(self, param):
+ return Preprocessor.expand_str(self.val, param)
+
+ def expand(self, param={}):
+ return self.__get_fn(param)
+
+class RangeType(FieldType):
+ def __init__(self, record) -> None:
+ self.__ranged_component = re.compile(r"^(?P<index>[^.]+)$|^(?P<start>.+?)\.\.(?P<end>.+)$")
+ super().__init__(record)
+
+ def _parse(self, record):
+ return super()._parse(record)
+
+ def get(self, param):
+ record = self._record.strip('[]')
+
+ self.__value=[]
+ for component in record.split(','):
+ component = component.strip()
+ mo = self.__ranged_component.match(component)
+ if mo is None:
+ raise Exception(f"value '{component}' is not valid range component")
+
+ mo = mo.groupdict()
+ if mo["index"] is not None:
+ self.__value.append(Preprocessor.expand_str(mo['index'], param))
+ else:
+ start = Preprocessor.expand_str(mo['start'], param)
+ end = Preprocessor.expand_str(mo['end'], param)
+ self.__value += [x for x in range(start, end + 1)]
+ return self.__value
+
+ def getraw(self):
+ return self._record
+
+class VariableDeclarationObject(DataObject):
+ def __init__(self, record):
+ super().__init__("", record)
+
+ def _parse(self, record):
+ return super()._parse(record)
+
+ def expand(self, param={}):
+ obj = super().expand(param)
+ param.update(**obj)
+ return {}
class Condition(DataObject):
def __init__(self, record):
if "true" not in self.ctrl_field:
raise Exception("condition body must contains 'True' handling case")
- self.__range_lst = self.ctrl_field["range"].get()
def expand(self, param={}):
+ self.__range_lst = self.ctrl_field["range"].get(param)
if param["index"] in self.__range_lst:
return self.ctrl_field["true"].expand(param)
elif "else" in self.ctrl_field:
return self.ctrl_field["else"].expand(param)
return {}
+
+class ArrayObject(DataObject):
+ def __init__(self, record,
+ nested_array = False,
+ el_factory = lambda x: DataObject.create("", x)):
+ self._el_factory = el_factory
+ self._nested_array = nested_array
+
+ super().__init__("", record)
+
+ def _parse(self, record):
+ if not isinstance(record, list):
+ raise Exception(f"{type(self).__name__} require array input")
+
+ self.content = []
+ for x in record:
+ self.content.append(self._el_factory(x))
+
+ def expand(self, param={}):
+ result = []
+ for x in self.content:
+ obj = x.expand(param)
+ if isinstance(obj, list) and not self._nested_array:
+ result += [*obj]
+ else:
+ result.append(obj)
+
+ return result
+
+class MemoryMapObject(DataObject):
+ class GranuleObject(DataObject):
+ def __init__(self, record):
+ super().__init__("", record)
+
+ def _parse(self, record):
+ self.__granules = {}
+ for k, v in record.items():
+ self.__granules[k] = DataObject.create(k, v)
+
+ def expand(self, param={}):
+ granules = {}
+ for k, v in self.__granules.items():
+ val = v.expand(param)
+
+ if not isinstance(val, int):
+ raise Exception("The granule definition must be either integer or int-castable string")
+
+ granules[k] = val
+
+ return {**granules}
+
+ def __init__(self, record):
+ super().__init__("", record)
+
+ def _parse(self, record):
+ if "granule" in self._record:
+ self.__g = MemoryMapObject.GranuleObject(self._record["granule"])
+ if "regions" in self._record:
+ self.__regions = ArrayObject(self._record["regions"])
+ if "width" in self._record:
+ self.__width = DataObject.create("width", self._record["width"])
+
+ def __process(self, start_addr, idx, regions, size_lookahead = False):
+ if idx >= len(regions):
+ raise Exception("Unbounded region definition")
+
+ e = regions[idx]
+
+ if "boundary" in e:
+ b = e["boundary"] - 1
+ start_addr = (start_addr + b) & ~b
+
+ if "start" not in e:
+ e["start"] = start_addr
+ elif e["start"] < start_addr:
+ raise Exception(f"starting addr {hex(e['start'])} overrlapping with {hex(start_addr)}")
+ else:
+ start_addr = e["start"]
+
+ if "size" not in e:
+ if size_lookahead:
+ raise Exception("could not infer size from unbounded region")
+ tmp_addr = self.__process(start_addr, idx + 1, regions, size_lookahead=True)
+ e["size"] = tmp_addr - start_addr
+
+ if not size_lookahead:
+ start_addr += e["size"]
+
+ return start_addr
+
+ def expand(self, param={}):
+ g = self.__g.expand(param)
+
+ param["granule"] = g
+
+ width = self.__width.expand(param)
+ if not isinstance(width, int):
+ raise Exception("'width' attribute must be integer")
+
+ regions = self.__regions.expand(param)
+
+ start_addr = 0
+ for i in range(len(regions)):
+ start_addr = self.__process(start_addr, i, regions)
+
+ if math.log2(start_addr) > width:
+ raise Exception("memory size larger than speicified address width")
+
+ return {
+ "granule": g,
+ "regions": regions
+ }
class ForEachIndexObject(DataObject):
def __init__(self, name, record):
super().__init__(name, record)
- self.conditions = []
+ self.steps = []
for k, v in record.items():
- self.conditions.append(DataObject.create(k, v))
+ self.steps.append(DataObject.create(k, v))
def _parse(self, record):
super()._parse(record)
if "index" not in param:
raise Exception(f"'{type(self).__name__}' require parameter 'index'.")
obj = {}
- for cond in self.conditions:
+ for cond in self.steps:
obj.update(**cond.expand(param))
return obj
return super()._parse(record)
def expand(self, param={}):
- return {
- self.key: super().expand(param)
- }
+ return super().expand(param)
class RangedObject(DataObject):
def __init__(self, name, record):
raise Exception("RangedObject with ranged type must have 'range' field defined")
out_lst = []
- indices = self.ctrl_field["range"].get()
+ indices = self.ctrl_field["range"].get(param)
for i in indices:
param["index"] = i
- self.user_field["index"] = i
out_lst.append(super().expand(param))
- return {
- self.key: out_lst
- }
+ return out_lst
+
+def aligned(v, a):
+ return v & ~(a - 1)
class TemplateExpander:
def __init__(self, template_path, project_path, arch) -> None:
self.tbase_path = template_path.joinpath(arch)
self.pbase_path = project_path
+ self.__helper_fns = {
+ "align": aligned,
+ "hex": lambda x: hex(x)
+ }
+
self.__load_config()
self.__load_mappings()
obj = json.loads(cfg_file.read_text())
for k, v in obj.items():
o = DataObject.create(k, v).expand()
- self.data.update(**o)
+ self.data[k] = o
def __load_mappings(self):
self.mapping = {}
with mapping_file.open() as f:
for l in f:
+ l = l.strip()
+
+ if not l:
+ continue
+
src, dest = l.split("->")
src = src.strip()
dest: Path = self.pbase_path.joinpath(v)
if not src.is_file():
continue
+
+ if not dest.parent.exists():
+ dest.parent.mkdir(parents=True)
+ self.data["template"] = k
template = jinja2.Template(src.read_text(), trim_blocks=True)
+ template.globals.update(**self.__helper_fns)
out = template.render(data=self.data)
dest.write_text(out)
print(f"rendered: {k} -> {v}")
+import pprint
def main():
parser = argparse.ArgumentParser()
args = parser.parse_args()
expander = TemplateExpander(Path(args.template_dir), Path(args.project_dir), args.arch)
+
expander.render()
+ # pprint.pprint(expander.data)
if __name__ == "__main__":
main()
\ No newline at end of file