Example #1
0
File: pit.c Project: ablakely/xnix
void timer_install(u32int freq)
{
	interrupt_install_handler(IRQ0, timer_handler, "PIT");

	u32int d = 11913180 / freq;
	outportb(0x43, 0x36);

	u8int	l = (u8int)(d & 0xFF);
	u8int	h = (u8int)((d >> 8) & 0xFF);

	outportb(0x40, l);
	outportb(0x40, h);
}
Example #2
0
void keyboard_enable()
{
    int i = 0;
    asm_disable_interrupt();
#ifdef _USE_GAZ
    /* This is for debugging purposes. */
    set_vector(keyb_ISR, M_VEC+1, D_PRESENT + D_INT + D_DPL3, KERNEL_CS);
    enable_irq(1);
#else /* Default - use OX driver logic. */
    printk("initializing Keyboard driver version 1.0\n");
    interrupt_install_handler(1,
                              IRQ_EXCL,
                              keyboard_handler,
                              keyboard_info);
    printk("done initializing Keyboard driver version 1.0\n");
    /* irq_enable(1); */
    enable_irq(1);
#endif
    led_status = 0; /* All leds off */
    setleds();
}
Example #3
0
general_error irq_init(void)
{
     /* Send both PICs initialization word ICW1. */
     outb(IRQ_MASTER | IRQ_CMD, IRQ_ICW1 | IRQ_ICW4_COMING);
     outb(IRQ_SLAVE | IRQ_CMD, IRQ_ICW1 | IRQ_ICW4_COMING);

     /* Send both PICs remapping information. */
     outb(IRQ_MASTER | IRQ_DATA, IRQ_REMAP_MASK & 0x20);
     outb(IRQ_SLAVE | IRQ_DATA, IRQ_REMAP_MASK & 0x2F);

     /* Tell both PICs where the slave is mapped.  */
     outb(IRQ_MASTER | IRQ_DATA, IRQ_SLAVE_IS2);
     outb(IRQ_SLAVE | IRQ_DATA, IRQ_SLAVEID_2);

     /* Send both PICs some more configuration data.  */
     outb(IRQ_MASTER | IRQ_DATA, (IRQ_NONBUFFERED |
                                  IRQ_NORMAL_EOI |
                                  IRQ_8086_MODE));
     outb(IRQ_SLAVE | IRQ_DATA, (IRQ_NONBUFFERED |
                                 IRQ_NORMAL_EOI |
                                 IRQ_8086_MODE));
     
     /* Turn on only the keyboard IRQ. */
     outb(IRQ_MASTER | IRQ_DATA, ~IRQ_MASTER_IRQ(IRQ_KEYBOARD));
     outb(IRQ_SLAVE | IRQ_DATA, ~IRQ_SLAVE_IRQ(IRQ_KEYBOARD));

     /* Install handlers for all IRQs. In principle, whenever an IRQ
      * is turned on by a driver, it should also install a handler,
      * but who knows, maybe it won't. This way, we are not stuck with
      * the very generic unhandled-interrupt routine, but something
      * slightly more infomative. */
     interrupt_install_handler(0x20, &irq0_handler);
     interrupt_install_handler(0x21, &irq1_handler);
     interrupt_install_handler(0x22, &irq2_handler);
     interrupt_install_handler(0x23, &irq3_handler);
     interrupt_install_handler(0x24, &irq4_handler);
     interrupt_install_handler(0x25, &irq5_handler);
     interrupt_install_handler(0x26, &irq6_handler);
     interrupt_install_handler(0x27, &irq7_handler);
     interrupt_install_handler(0x28, &irq8_handler);
     interrupt_install_handler(0x29, &irq9_handler);
     interrupt_install_handler(0x2a, &irq10_handler);
     interrupt_install_handler(0x2b, &irq11_handler);
     interrupt_install_handler(0x2c, &irq12_handler);
     interrupt_install_handler(0x2d, &irq13_handler);
     interrupt_install_handler(0x2e, &irq14_handler);
     interrupt_install_handler(0x2f, &irq15_handler);

     /* Now install the individual handlers. */
     unsigned int i;
     for (i = 0; i < 16; i++)
          install_irq_handler(i, &default_irq_handler);

     return GENERAL_OK;
}