Exemplo n.º 1
0
void set_all_irq_status(bool status) {
    if(status) {
        pic_set_mask(0xFFFF);
    } else {
        pic_set_mask(0);
    }
}
Exemplo n.º 2
0
void irq_set_mask(unsigned char irq, bool set) {
    uint16_t mask = pic_get_mask();
    if( set ) {
        mask |= (1<<irq);
    } else {
        mask &= ~(1<<irq);
    }
    pic_set_mask(mask);
}
Exemplo n.º 3
0
void block_for_irq(int irq) {
    if((irq < 0) || (irq > 15))
        return;
    waiting_for = irq;
    unsigned short mask = pic_get_mask();
    set_all_irq_status(true);
    irq_set_mask(irq, false);
    while(true) {
        system_wait_for_interrupt();
        if(waiting_for == -1)
            break;
    }
    pic_set_mask(mask);
}
Exemplo n.º 4
0
// main function loaded through loader.asm
int kmain(multiboot_info_t* mbi, uint32_t magic) {
    (void)magic; /* TODO: check if multiboot loader magic number is correct */


    gdt_init();
    idt_init();

    pic_init();
    pic_set_mask(PIC1_KBD_IRQ, PIC_NO_IRQ);

    asm volatile("sti");

    fb_enable_cursor();
    clrscr();

    printk(PRINTK_FB, "Cursor position: %u\n", fb_get_cursor());

    printk(PRINTK_FB, "Cursor start: %h\n",
            (unsigned int)(fb_get_cursor_start()));

    printk(PRINTK_FB, "Cursor end:   %h\n",
            (unsigned int)(fb_get_cursor_end()));

    printk(PRINTK_FB, "Frame buffer address: %h\n", fb_get_start_address());

    print_memory_info(mbi);

    printk(PRINTK_FB, "bitsize - char:  %u\n", sizeof(char)*8);
    printk(PRINTK_FB, "bitsize - short: %u\n", sizeof(short)*8);
    printk(PRINTK_FB, "bitsize - int:   %u\n", sizeof(int)*8);
    printk(PRINTK_FB, "bitsize - long:  %u\n", sizeof(long)*8);
    printk(PRINTK_FB, "sizeof page_entry_t: %u\n", sizeof(page_entry_t));

    for (;;) {
        asm volatile("hlt");
    }

    return 0;
}