示例#1
0
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;
}
示例#2
0
文件: ser_port.c 项目: dorienh/smmu
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, &regs, &regs);

  port_initted = false;
}
示例#3
0
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");
}
示例#4
0
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);
}
示例#5
0
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);
}
示例#6
0
文件: serdos.c 项目: haision/GitHub_C
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();
}
示例#7
0
文件: PS2V2.C 项目: ahelwer/UofC
/**
 * 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);   
}
示例#8
0
文件: MAIN.C 项目: ahelwer/UofC
/**
 * 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);
}