Search This Blog

Wednesday, November 30, 2011

PS2 Keyboard Malfunction Sometimes

最近遇到一個在POST過程中,隨意按鍵,有機率性的PS2 internal keyboard不能動的問題,所以為了解決這個問題,在BIOS logo出來時,去發一個keyboard reset給KBC controller。

以下的程式碼就是發keyboard reset給KBC controller

VOID
KeyBoardReset(
  VOID
  )
{
  UINT8 Data;

  //
  // Clear Output Buffer data
  //
  Data = IoInput8(0x64);
  while (Data & 0x01) {
    Data = IoInput8(0x60);
    Data = IoInput8(0x64);
  }
 
  //
  // Disalbe Aux Device
  //
  IoOutput8 (0x64, 0xA7);
  while (Data & 0x02) {
    Data = IoInput8(0x64);
  }

  //
  // Disalbe Keyboard
  //
  IoOutput8 (0x64, 0xAD);
  while (Data & 0x02) {
    Data = IoInput8(0x64);
  }

  //
  // Reset keyboard.
  //
  IoOutput8 (0x60, 0xFF);
  Data = IoInput8(0x64);
  while (!(Data & 0x01)) {
    Data = IoInput8(0x64);
  }
  Data = IoInput8(0x60);
  Data = IoInput8(0x64);
  while (!(Data & 0x01)) {
    Data = IoInput8(0x64);
  }
  Data = IoInput8(0x60);
}

No comments:

Post a Comment