#include #include #include #define IDT_ENTRY 256 u64_t _idt[IDT_ENTRY]; u16_t _idt_limit = sizeof(_idt) - 1; static inline void _set_idt_entry(u32_t vector, u16_t seg_selector, void (*isr)(), u8_t dpl, u8_t type) { ptr_t offset = (ptr_t)isr; _idt[vector] = (offset & 0xffff0000) | IDT_ATTR(dpl, type); _idt[vector] <<= 32; _idt[vector] |= (seg_selector << 16) | (offset & 0x0000ffff); } void _init_idt() { _set_idt_entry(0, 8, _asm_isr0, 0, IDT_INTERRUPT); _set_idt_entry(1, 8, _asm_isr1, 0, IDT_INTERRUPT); _set_idt_entry(2, 8, _asm_isr2, 0, IDT_INTERRUPT); _set_idt_entry(3, 8, _asm_isr3, 0, IDT_INTERRUPT); _set_idt_entry(4, 8, _asm_isr4, 0, IDT_INTERRUPT); _set_idt_entry(5, 8, _asm_isr5, 0, IDT_INTERRUPT); _set_idt_entry(6, 8, _asm_isr6, 0, IDT_INTERRUPT); _set_idt_entry(7, 8, _asm_isr7, 0, IDT_INTERRUPT); _set_idt_entry(8, 8, _asm_isr8, 0, IDT_INTERRUPT); _set_idt_entry(9, 8, _asm_isr9, 0, IDT_INTERRUPT); _set_idt_entry(10, 8, _asm_isr10, 0, IDT_INTERRUPT); _set_idt_entry(11, 8, _asm_isr11, 0, IDT_INTERRUPT); _set_idt_entry(12, 8, _asm_isr12, 0, IDT_INTERRUPT); _set_idt_entry(13, 8, _asm_isr13, 0, IDT_INTERRUPT); _set_idt_entry(14, 8, _asm_isr14, 0, IDT_INTERRUPT); _set_idt_entry(15, 8, _asm_isr15, 0, IDT_INTERRUPT); _set_idt_entry(16, 8, _asm_isr16, 0, IDT_INTERRUPT); _set_idt_entry(17, 8, _asm_isr17, 0, IDT_INTERRUPT); _set_idt_entry(18, 8, _asm_isr18, 0, IDT_INTERRUPT); _set_idt_entry(19, 8, _asm_isr19, 0, IDT_INTERRUPT); _set_idt_entry(20, 8, _asm_isr20, 0, IDT_INTERRUPT); _set_idt_entry(21, 8, _asm_isr21, 0, IDT_INTERRUPT); _set_idt_entry(22, 8, _asm_isr22, 0, IDT_INTERRUPT); _set_idt_entry(23, 8, _asm_isr23, 0, IDT_INTERRUPT); _set_idt_entry(24, 8, _asm_isr24, 0, IDT_INTERRUPT); _set_idt_entry(25, 8, _asm_isr25, 0, IDT_INTERRUPT); _set_idt_entry(26, 8, _asm_isr26, 0, IDT_INTERRUPT); _set_idt_entry(27, 8, _asm_isr27, 0, IDT_INTERRUPT); _set_idt_entry(28, 8, _asm_isr28, 0, IDT_INTERRUPT); _set_idt_entry(29, 8, _asm_isr29, 0, IDT_INTERRUPT); _set_idt_entry(30, 8, _asm_isr30, 0, IDT_INTERRUPT); _set_idt_entry(31, 8, _asm_isr31, 0, IDT_INTERRUPT); _set_idt_entry(32, 8, _asm_isr32, 0, IDT_INTERRUPT); _set_idt_entry(33, 8, _asm_isr33, 3, IDT_INTERRUPT); _set_idt_entry(34, 8, _asm_isr34, 0, IDT_INTERRUPT); _set_idt_entry(35, 8, _asm_isr35, 0, IDT_INTERRUPT); _set_idt_entry(36, 8, _asm_isr36, 0, IDT_INTERRUPT); _set_idt_entry(37, 8, _asm_isr37, 0, IDT_INTERRUPT); _set_idt_entry(38, 8, _asm_isr38, 0, IDT_INTERRUPT); _set_idt_entry(39, 8, _asm_isr39, 0, IDT_INTERRUPT); _set_idt_entry(40, 8, _asm_isr40, 0, IDT_INTERRUPT); _set_idt_entry(41, 8, _asm_isr41, 0, IDT_INTERRUPT); _set_idt_entry(42, 8, _asm_isr42, 0, IDT_INTERRUPT); _set_idt_entry(43, 8, _asm_isr43, 0, IDT_INTERRUPT); _set_idt_entry(44, 8, _asm_isr44, 0, IDT_INTERRUPT); _set_idt_entry(45, 8, _asm_isr45, 0, IDT_INTERRUPT); _set_idt_entry(46, 8, _asm_isr46, 0, IDT_INTERRUPT); _set_idt_entry(47, 8, _asm_isr47, 0, IDT_INTERRUPT); _set_idt_entry(48, 8, _asm_isr48, 0, IDT_INTERRUPT); _set_idt_entry(49, 8, _asm_isr49, 0, IDT_INTERRUPT); _set_idt_entry(50, 8, _asm_isr50, 0, IDT_INTERRUPT); _set_idt_entry(51, 8, _asm_isr51, 0, IDT_INTERRUPT); _set_idt_entry(52, 8, _asm_isr52, 0, IDT_INTERRUPT); _set_idt_entry(53, 8, _asm_isr53, 0, IDT_INTERRUPT); _set_idt_entry(54, 8, _asm_isr54, 0, IDT_INTERRUPT); _set_idt_entry(55, 8, _asm_isr55, 0, IDT_INTERRUPT); _set_idt_entry(56, 8, _asm_isr56, 0, IDT_INTERRUPT); _set_idt_entry(57, 8, _asm_isr57, 0, IDT_INTERRUPT); _set_idt_entry(58, 8, _asm_isr58, 0, IDT_INTERRUPT); _set_idt_entry(59, 8, _asm_isr59, 0, IDT_INTERRUPT); _set_idt_entry(60, 8, _asm_isr60, 0, IDT_INTERRUPT); _set_idt_entry(61, 8, _asm_isr61, 0, IDT_INTERRUPT); _set_idt_entry(62, 8, _asm_isr62, 0, IDT_INTERRUPT); _set_idt_entry(63, 8, _asm_isr63, 0, IDT_INTERRUPT); _set_idt_entry(64, 8, _asm_isr64, 0, IDT_INTERRUPT); _set_idt_entry(65, 8, _asm_isr65, 0, IDT_INTERRUPT); _set_idt_entry(66, 8, _asm_isr66, 0, IDT_INTERRUPT); _set_idt_entry(67, 8, _asm_isr67, 0, IDT_INTERRUPT); _set_idt_entry(68, 8, _asm_isr68, 0, IDT_INTERRUPT); _set_idt_entry(69, 8, _asm_isr69, 0, IDT_INTERRUPT); _set_idt_entry(70, 8, _asm_isr70, 0, IDT_INTERRUPT); _set_idt_entry(71, 8, _asm_isr71, 0, IDT_INTERRUPT); _set_idt_entry(72, 8, _asm_isr72, 0, IDT_INTERRUPT); _set_idt_entry(73, 8, _asm_isr73, 0, IDT_INTERRUPT); _set_idt_entry(74, 8, _asm_isr74, 0, IDT_INTERRUPT); _set_idt_entry(75, 8, _asm_isr75, 0, IDT_INTERRUPT); _set_idt_entry(76, 8, _asm_isr76, 0, IDT_INTERRUPT); _set_idt_entry(77, 8, _asm_isr77, 0, IDT_INTERRUPT); _set_idt_entry(78, 8, _asm_isr78, 0, IDT_INTERRUPT); _set_idt_entry(79, 8, _asm_isr79, 0, IDT_INTERRUPT); _set_idt_entry(80, 8, _asm_isr80, 0, IDT_INTERRUPT); _set_idt_entry(81, 8, _asm_isr81, 0, IDT_INTERRUPT); _set_idt_entry(82, 8, _asm_isr82, 0, IDT_INTERRUPT); _set_idt_entry(83, 8, _asm_isr83, 0, IDT_INTERRUPT); _set_idt_entry(84, 8, _asm_isr84, 0, IDT_INTERRUPT); _set_idt_entry(85, 8, _asm_isr85, 0, IDT_INTERRUPT); _set_idt_entry(86, 8, _asm_isr86, 0, IDT_INTERRUPT); _set_idt_entry(87, 8, _asm_isr87, 0, IDT_INTERRUPT); _set_idt_entry(88, 8, _asm_isr88, 0, IDT_INTERRUPT); _set_idt_entry(89, 8, _asm_isr89, 0, IDT_INTERRUPT); _set_idt_entry(90, 8, _asm_isr90, 0, IDT_INTERRUPT); _set_idt_entry(91, 8, _asm_isr91, 0, IDT_INTERRUPT); _set_idt_entry(92, 8, _asm_isr92, 0, IDT_INTERRUPT); _set_idt_entry(93, 8, _asm_isr93, 0, IDT_INTERRUPT); _set_idt_entry(94, 8, _asm_isr94, 0, IDT_INTERRUPT); _set_idt_entry(95, 8, _asm_isr95, 0, IDT_INTERRUPT); _set_idt_entry(96, 8, _asm_isr96, 0, IDT_INTERRUPT); _set_idt_entry(97, 8, _asm_isr97, 0, IDT_INTERRUPT); _set_idt_entry(98, 8, _asm_isr98, 0, IDT_INTERRUPT); _set_idt_entry(99, 8, _asm_isr99, 0, IDT_INTERRUPT); _set_idt_entry(100, 8, _asm_isr100, 0, IDT_INTERRUPT); _set_idt_entry(101, 8, _asm_isr101, 0, IDT_INTERRUPT); _set_idt_entry(102, 8, _asm_isr102, 0, IDT_INTERRUPT); _set_idt_entry(103, 8, _asm_isr103, 0, IDT_INTERRUPT); _set_idt_entry(104, 8, _asm_isr104, 0, IDT_INTERRUPT); _set_idt_entry(105, 8, _asm_isr105, 0, IDT_INTERRUPT); _set_idt_entry(106, 8, _asm_isr106, 0, IDT_INTERRUPT); _set_idt_entry(107, 8, _asm_isr107, 0, IDT_INTERRUPT); _set_idt_entry(108, 8, _asm_isr108, 0, IDT_INTERRUPT); _set_idt_entry(109, 8, _asm_isr109, 0, IDT_INTERRUPT); _set_idt_entry(110, 8, _asm_isr110, 0, IDT_INTERRUPT); _set_idt_entry(111, 8, _asm_isr111, 0, IDT_INTERRUPT); _set_idt_entry(112, 8, _asm_isr112, 0, IDT_INTERRUPT); _set_idt_entry(113, 8, _asm_isr113, 0, IDT_INTERRUPT); _set_idt_entry(114, 8, _asm_isr114, 0, IDT_INTERRUPT); _set_idt_entry(115, 8, _asm_isr115, 0, IDT_INTERRUPT); _set_idt_entry(116, 8, _asm_isr116, 0, IDT_INTERRUPT); _set_idt_entry(117, 8, _asm_isr117, 0, IDT_INTERRUPT); _set_idt_entry(118, 8, _asm_isr118, 0, IDT_INTERRUPT); _set_idt_entry(119, 8, _asm_isr119, 0, IDT_INTERRUPT); _set_idt_entry(120, 8, _asm_isr120, 0, IDT_INTERRUPT); _set_idt_entry(121, 8, _asm_isr121, 0, IDT_INTERRUPT); _set_idt_entry(122, 8, _asm_isr122, 0, IDT_INTERRUPT); _set_idt_entry(123, 8, _asm_isr123, 0, IDT_INTERRUPT); _set_idt_entry(124, 8, _asm_isr124, 0, IDT_INTERRUPT); _set_idt_entry(125, 8, _asm_isr125, 0, IDT_INTERRUPT); _set_idt_entry(126, 8, _asm_isr126, 0, IDT_INTERRUPT); _set_idt_entry(127, 8, _asm_isr127, 0, IDT_INTERRUPT); _set_idt_entry(128, 8, _asm_isr128, 0, IDT_INTERRUPT); _set_idt_entry(129, 8, _asm_isr129, 0, IDT_INTERRUPT); _set_idt_entry(130, 8, _asm_isr130, 0, IDT_INTERRUPT); _set_idt_entry(131, 8, _asm_isr131, 0, IDT_INTERRUPT); _set_idt_entry(132, 8, _asm_isr132, 0, IDT_INTERRUPT); _set_idt_entry(133, 8, _asm_isr133, 0, IDT_INTERRUPT); _set_idt_entry(134, 8, _asm_isr134, 0, IDT_INTERRUPT); _set_idt_entry(135, 8, _asm_isr135, 0, IDT_INTERRUPT); _set_idt_entry(136, 8, _asm_isr136, 0, IDT_INTERRUPT); _set_idt_entry(137, 8, _asm_isr137, 0, IDT_INTERRUPT); _set_idt_entry(138, 8, _asm_isr138, 0, IDT_INTERRUPT); _set_idt_entry(139, 8, _asm_isr139, 0, IDT_INTERRUPT); _set_idt_entry(140, 8, _asm_isr140, 0, IDT_INTERRUPT); _set_idt_entry(141, 8, _asm_isr141, 0, IDT_INTERRUPT); _set_idt_entry(142, 8, _asm_isr142, 0, IDT_INTERRUPT); _set_idt_entry(143, 8, _asm_isr143, 0, IDT_INTERRUPT); _set_idt_entry(144, 8, _asm_isr144, 0, IDT_INTERRUPT); _set_idt_entry(145, 8, _asm_isr145, 0, IDT_INTERRUPT); _set_idt_entry(146, 8, _asm_isr146, 0, IDT_INTERRUPT); _set_idt_entry(147, 8, _asm_isr147, 0, IDT_INTERRUPT); _set_idt_entry(148, 8, _asm_isr148, 0, IDT_INTERRUPT); _set_idt_entry(149, 8, _asm_isr149, 0, IDT_INTERRUPT); _set_idt_entry(150, 8, _asm_isr150, 0, IDT_INTERRUPT); _set_idt_entry(151, 8, _asm_isr151, 0, IDT_INTERRUPT); _set_idt_entry(152, 8, _asm_isr152, 0, IDT_INTERRUPT); _set_idt_entry(153, 8, _asm_isr153, 0, IDT_INTERRUPT); _set_idt_entry(154, 8, _asm_isr154, 0, IDT_INTERRUPT); _set_idt_entry(155, 8, _asm_isr155, 0, IDT_INTERRUPT); _set_idt_entry(156, 8, _asm_isr156, 0, IDT_INTERRUPT); _set_idt_entry(157, 8, _asm_isr157, 0, IDT_INTERRUPT); _set_idt_entry(158, 8, _asm_isr158, 0, IDT_INTERRUPT); _set_idt_entry(159, 8, _asm_isr159, 0, IDT_INTERRUPT); _set_idt_entry(160, 8, _asm_isr160, 0, IDT_INTERRUPT); _set_idt_entry(161, 8, _asm_isr161, 0, IDT_INTERRUPT); _set_idt_entry(162, 8, _asm_isr162, 0, IDT_INTERRUPT); _set_idt_entry(163, 8, _asm_isr163, 0, IDT_INTERRUPT); _set_idt_entry(164, 8, _asm_isr164, 0, IDT_INTERRUPT); _set_idt_entry(165, 8, _asm_isr165, 0, IDT_INTERRUPT); _set_idt_entry(166, 8, _asm_isr166, 0, IDT_INTERRUPT); _set_idt_entry(167, 8, _asm_isr167, 0, IDT_INTERRUPT); _set_idt_entry(168, 8, _asm_isr168, 0, IDT_INTERRUPT); _set_idt_entry(169, 8, _asm_isr169, 0, IDT_INTERRUPT); _set_idt_entry(170, 8, _asm_isr170, 0, IDT_INTERRUPT); _set_idt_entry(171, 8, _asm_isr171, 0, IDT_INTERRUPT); _set_idt_entry(172, 8, _asm_isr172, 0, IDT_INTERRUPT); _set_idt_entry(173, 8, _asm_isr173, 0, IDT_INTERRUPT); _set_idt_entry(174, 8, _asm_isr174, 0, IDT_INTERRUPT); _set_idt_entry(175, 8, _asm_isr175, 0, IDT_INTERRUPT); _set_idt_entry(176, 8, _asm_isr176, 0, IDT_INTERRUPT); _set_idt_entry(177, 8, _asm_isr177, 0, IDT_INTERRUPT); _set_idt_entry(178, 8, _asm_isr178, 0, IDT_INTERRUPT); _set_idt_entry(179, 8, _asm_isr179, 0, IDT_INTERRUPT); _set_idt_entry(180, 8, _asm_isr180, 0, IDT_INTERRUPT); _set_idt_entry(181, 8, _asm_isr181, 0, IDT_INTERRUPT); _set_idt_entry(182, 8, _asm_isr182, 0, IDT_INTERRUPT); _set_idt_entry(183, 8, _asm_isr183, 0, IDT_INTERRUPT); _set_idt_entry(184, 8, _asm_isr184, 0, IDT_INTERRUPT); _set_idt_entry(185, 8, _asm_isr185, 0, IDT_INTERRUPT); _set_idt_entry(186, 8, _asm_isr186, 0, IDT_INTERRUPT); _set_idt_entry(187, 8, _asm_isr187, 0, IDT_INTERRUPT); _set_idt_entry(188, 8, _asm_isr188, 0, IDT_INTERRUPT); _set_idt_entry(189, 8, _asm_isr189, 0, IDT_INTERRUPT); _set_idt_entry(190, 8, _asm_isr190, 0, IDT_INTERRUPT); _set_idt_entry(191, 8, _asm_isr191, 0, IDT_INTERRUPT); _set_idt_entry(192, 8, _asm_isr192, 0, IDT_INTERRUPT); _set_idt_entry(193, 8, _asm_isr193, 0, IDT_INTERRUPT); _set_idt_entry(194, 8, _asm_isr194, 0, IDT_INTERRUPT); _set_idt_entry(195, 8, _asm_isr195, 0, IDT_INTERRUPT); _set_idt_entry(196, 8, _asm_isr196, 0, IDT_INTERRUPT); _set_idt_entry(197, 8, _asm_isr197, 0, IDT_INTERRUPT); _set_idt_entry(198, 8, _asm_isr198, 0, IDT_INTERRUPT); _set_idt_entry(199, 8, _asm_isr199, 0, IDT_INTERRUPT); _set_idt_entry(200, 8, _asm_isr200, 0, IDT_INTERRUPT); _set_idt_entry(201, 8, _asm_isr201, 0, IDT_INTERRUPT); _set_idt_entry(202, 8, _asm_isr202, 0, IDT_INTERRUPT); _set_idt_entry(203, 8, _asm_isr203, 0, IDT_INTERRUPT); _set_idt_entry(204, 8, _asm_isr204, 0, IDT_INTERRUPT); _set_idt_entry(205, 8, _asm_isr205, 0, IDT_INTERRUPT); _set_idt_entry(206, 8, _asm_isr206, 0, IDT_INTERRUPT); _set_idt_entry(207, 8, _asm_isr207, 0, IDT_INTERRUPT); _set_idt_entry(208, 8, _asm_isr208, 0, IDT_INTERRUPT); _set_idt_entry(209, 8, _asm_isr209, 0, IDT_INTERRUPT); _set_idt_entry(210, 8, _asm_isr210, 0, IDT_INTERRUPT); _set_idt_entry(211, 8, _asm_isr211, 0, IDT_INTERRUPT); _set_idt_entry(212, 8, _asm_isr212, 0, IDT_INTERRUPT); _set_idt_entry(213, 8, _asm_isr213, 0, IDT_INTERRUPT); _set_idt_entry(214, 8, _asm_isr214, 0, IDT_INTERRUPT); _set_idt_entry(215, 8, _asm_isr215, 0, IDT_INTERRUPT); _set_idt_entry(216, 8, _asm_isr216, 0, IDT_INTERRUPT); _set_idt_entry(217, 8, _asm_isr217, 0, IDT_INTERRUPT); _set_idt_entry(218, 8, _asm_isr218, 0, IDT_INTERRUPT); _set_idt_entry(219, 8, _asm_isr219, 0, IDT_INTERRUPT); _set_idt_entry(220, 8, _asm_isr220, 0, IDT_INTERRUPT); _set_idt_entry(221, 8, _asm_isr221, 0, IDT_INTERRUPT); _set_idt_entry(222, 8, _asm_isr222, 0, IDT_INTERRUPT); _set_idt_entry(223, 8, _asm_isr223, 0, IDT_INTERRUPT); _set_idt_entry(224, 8, _asm_isr224, 0, IDT_INTERRUPT); _set_idt_entry(225, 8, _asm_isr225, 0, IDT_INTERRUPT); _set_idt_entry(226, 8, _asm_isr226, 0, IDT_INTERRUPT); _set_idt_entry(227, 8, _asm_isr227, 0, IDT_INTERRUPT); _set_idt_entry(228, 8, _asm_isr228, 0, IDT_INTERRUPT); _set_idt_entry(229, 8, _asm_isr229, 0, IDT_INTERRUPT); _set_idt_entry(230, 8, _asm_isr230, 0, IDT_INTERRUPT); _set_idt_entry(231, 8, _asm_isr231, 0, IDT_INTERRUPT); _set_idt_entry(232, 8, _asm_isr232, 0, IDT_INTERRUPT); _set_idt_entry(233, 8, _asm_isr233, 0, IDT_INTERRUPT); _set_idt_entry(234, 8, _asm_isr234, 0, IDT_INTERRUPT); _set_idt_entry(235, 8, _asm_isr235, 0, IDT_INTERRUPT); _set_idt_entry(236, 8, _asm_isr236, 0, IDT_INTERRUPT); _set_idt_entry(237, 8, _asm_isr237, 0, IDT_INTERRUPT); _set_idt_entry(238, 8, _asm_isr238, 0, IDT_INTERRUPT); _set_idt_entry(239, 8, _asm_isr239, 0, IDT_INTERRUPT); _set_idt_entry(240, 8, _asm_isr240, 0, IDT_INTERRUPT); _set_idt_entry(241, 8, _asm_isr241, 0, IDT_INTERRUPT); _set_idt_entry(242, 8, _asm_isr242, 0, IDT_INTERRUPT); _set_idt_entry(243, 8, _asm_isr243, 0, IDT_INTERRUPT); _set_idt_entry(244, 8, _asm_isr244, 0, IDT_INTERRUPT); _set_idt_entry(245, 8, _asm_isr245, 0, IDT_INTERRUPT); _set_idt_entry(246, 8, _asm_isr246, 0, IDT_INTERRUPT); _set_idt_entry(247, 8, _asm_isr247, 0, IDT_INTERRUPT); _set_idt_entry(248, 8, _asm_isr248, 0, IDT_INTERRUPT); _set_idt_entry(249, 8, _asm_isr249, 0, IDT_INTERRUPT); _set_idt_entry(250, 8, _asm_isr250, 0, IDT_INTERRUPT); _set_idt_entry(251, 8, _asm_isr251, 0, IDT_INTERRUPT); _set_idt_entry(252, 8, _asm_isr252, 0, IDT_INTERRUPT); _set_idt_entry(253, 8, _asm_isr253, 0, IDT_INTERRUPT); _set_idt_entry(254, 8, _asm_isr254, 0, IDT_INTERRUPT); _set_idt_entry(255, 8, _asm_isr255, 0, IDT_INTERRUPT); }