static void ComPort_Disable(ComPort *p) { if (!p->enabled) { Con_Printf("Already disabled\n"); return; } // disable interrupts at the uart outportb (p->uart + INTERRUPT_ENABLE_REGISTER, 0); // disable our interrupt at the PIC outportb (0x21, inportb (0x21) | (1<<p->irq)); // disable interrupts at the processor disable(); // restore the old interrupt handler _go32_dpmi_set_protected_mode_interrupt_vector(p->irq + 8, &p->protectedModeSaveInfo); _go32_dpmi_free_iret_wrapper(&p->protectedModeInfo); // enable interrupts at the processor enable(); p->enabled = false; }
void ShutdownPort ( void ) { if(!port_initted) return; usermsg("shutting down serial port"); OUTPUT(uart + INTERRUPT_ENABLE_REGISTER, 0); OUTPUT(uart + MODEM_CONTROL_REGISTER, 0); OUTPUT(0x20 + 1, INPUT(0x20 + 1) | (1<<irq)); // restore old irq asm("cli"); _go32_dpmi_set_protected_mode_interrupt_vector (irqintnum, &oldirqvect); _go32_dpmi_free_iret_wrapper(&newirqvect); asm("sti"); // // init com port settings to defaults // regs.x.ax = 0xf3; //f3= 9600 n 8 1 regs.x.dx = comport - 1; int86 (0x14, ®s, ®s); port_initted = false; }
void keyboard_int_remove() { // revert to old keyboard ISR _go32_dpmi_set_protected_mode_interrupt_vector(9, &OldHandler); // free the iret wrapper _go32_dpmi_free_iret_wrapper(&NewHandler); printf("old keyboard ISR installed\n"); }
void reinstall_c_irq_handler(int irq, _go32_dpmi_seginfo *old_irq) { _go32_dpmi_seginfo new_irq; _go32_dpmi_get_protected_mode_interrupt_vector(IRQ_VECTOR(irq), &new_irq); // importante: reposição do handler original _go32_dpmi_set_protected_mode_interrupt_vector(IRQ_VECTOR(irq), old_irq); // liberta funcao assembly _go32_dpmi_free_iret_wrapper(&new_irq); }
void timer_deinit(void) { /* Reset timer frequency to 18.2Hz */ timer_setrate(0); /* Reset handler to old one */ _go32_dpmi_set_protected_mode_interrupt_vector(TIMER_INT, &oldhandler); /* Free the IRET wrapper */ _go32_dpmi_free_iret_wrapper(&myhandler); }
static void uninstall_isr(struct port *p) { /* Disable interrupts. */ outportb(p->baseaddr + MCR, 0); outportb(p->baseaddr + IER, 0); outportb(p->pic_imr, inportb(p->pic_imr) | (~p->interrupt_enable_mask)); /* Restore old vector. */ disable(); _go32_dpmi_set_protected_mode_interrupt_vector(p->vector_num, &p->old_vector); _go32_dpmi_free_iret_wrapper(&p->new_vector); enable(); }
/** * mouse_delete * This function returns us to the old handler's address we saved before. **/ void mouse_delete(void) { _go32_dpmi_set_protected_mode_interrupt_vector(0x74,&old_handler); _go32_dpmi_free_iret_wrapper(&new_mousehandler); }
/** * key_delete * This function returns keyboard control to the operating system. This was * given as part of the VBETEST.C example. **/ void key_delete(void){ _go32_dpmi_set_protected_mode_interrupt_vector(9, &old_handler); _go32_dpmi_free_iret_wrapper(&new_handler); }