diff options
author | li-elvin <li-elvin@6f19259b-4bc3-4df7-8a09-765794883524> | 2012-10-11 07:01:22 +0000 |
---|---|---|
committer | li-elvin <li-elvin@6f19259b-4bc3-4df7-8a09-765794883524> | 2012-10-11 07:01:22 +0000 |
commit | 4ccfd30544d1da8f3b5a02293f1feca702dde90a (patch) | |
tree | 7aaaec115373661fd287ed317287428b1348c737 /IntelFrameworkModulePkg/Csm | |
parent | e8c758dc9252adaefa0d13c5702e32e0402d18e8 (diff) | |
download | edk2-4ccfd30544d1da8f3b5a02293f1feca702dde90a.tar.gz edk2-4ccfd30544d1da8f3b5a02293f1feca702dde90a.tar.bz2 edk2-4ccfd30544d1da8f3b5a02293f1feca702dde90a.zip |
Add PcdFastPS2Detection to improve PS2 keyboard driver start performance.
Signed-off-by: Li Elvin <elvin.li@intel.com>
Reviewed-by: Yao Jiewen<jiewen.yao@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13820 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'IntelFrameworkModulePkg/Csm')
-rw-r--r-- | IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c | 250 | ||||
-rw-r--r-- | IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf | 5 |
2 files changed, 132 insertions, 123 deletions
diff --git a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c index 3f0f9b699b..4ee20df1f7 100644 --- a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c +++ b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c @@ -1037,95 +1037,96 @@ BiosKeyboardReset ( // if not skip step 4&5 and jump to step 6 to selftest KBC and report this
// else go step 4
//
- if ((KeyReadStatusRegister (BiosKeyboardPrivate) & KBC_STSREG_VIA64_SYSF) != 0) {
- //
- // 4
- // CheckMouseStatus to decide enable it later or not
- //
- //
- // Read the command byte of KBC
- //
- Status = KeyboardCommand (
- BiosKeyboardPrivate,
- KBC_CMDREG_VIA64_CMDBYTE_R
- );
-
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
- }
-
- Status = KeyboardRead (
- BiosKeyboardPrivate,
- &CommandByte
- );
-
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
- }
- //
- // Check mouse enabled or not before
- //
- if ((CommandByte & KB_CMMBYTE_DISABLE_AUX) != 0) {
- MouseEnable = FALSE;
+ if (!PcdGetBool (PcdFastPS2Detection)) {
+ if ((KeyReadStatusRegister (BiosKeyboardPrivate) & KBC_STSREG_VIA64_SYSF) != 0) {
+ //
+ // 4
+ // CheckMouseStatus to decide enable it later or not
+ //
+ //
+ // Read the command byte of KBC
+ //
+ Status = KeyboardCommand (
+ BiosKeyboardPrivate,
+ KBC_CMDREG_VIA64_CMDBYTE_R
+ );
+
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
+
+ Status = KeyboardRead (
+ BiosKeyboardPrivate,
+ &CommandByte
+ );
+
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
+ //
+ // Check mouse enabled or not before
+ //
+ if ((CommandByte & KB_CMMBYTE_DISABLE_AUX) != 0) {
+ MouseEnable = FALSE;
+ } else {
+ MouseEnable = TRUE;
+ }
+ //
+ // 5
+ // disable mouse (via KBC) and Keyborad device
+ //
+ Status = KeyboardCommand (
+ BiosKeyboardPrivate,
+ KBC_CMDREG_VIA64_AUX_DISABLE
+ );
+
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
+
+ Status = KeyboardCommand (
+ BiosKeyboardPrivate,
+ KBC_CMDREG_VIA64_KB_DISABLE
+ );
+
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
} else {
- MouseEnable = TRUE;
- }
- //
- // 5
- // disable mouse (via KBC) and Keyborad device
- //
- Status = KeyboardCommand (
- BiosKeyboardPrivate,
- KBC_CMDREG_VIA64_AUX_DISABLE
- );
-
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
- }
-
- Status = KeyboardCommand (
- BiosKeyboardPrivate,
- KBC_CMDREG_VIA64_KB_DISABLE
- );
-
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
- }
-
- } else {
- //
- // 6
- // KBC Self Test
- //
- //
- // Report a Progress Code for performing a self test on the keyboard controller
- //
- REPORT_STATUS_CODE (
- EFI_PROGRESS_CODE,
- EFI_PERIPHERAL_KEYBOARD | EFI_P_KEYBOARD_PC_SELF_TEST
- );
-
- Status = KeyboardCommand (
- BiosKeyboardPrivate,
- KBC_CMDREG_VIA64_KBC_SLFTEST
- );
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
- }
-
- Status = KeyboardWaitForValue (
- BiosKeyboardPrivate,
- KBC_CMDECHO_KBCSLFTEST_OK,
- KEYBOARD_WAITFORVALUE_TIMEOUT
- );
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
+ //
+ // 6
+ // KBC Self Test
+ //
+ //
+ // Report a Progress Code for performing a self test on the keyboard controller
+ //
+ REPORT_STATUS_CODE (
+ EFI_PROGRESS_CODE,
+ EFI_PERIPHERAL_KEYBOARD | EFI_P_KEYBOARD_PC_SELF_TEST
+ );
+
+ Status = KeyboardCommand (
+ BiosKeyboardPrivate,
+ KBC_CMDREG_VIA64_KBC_SLFTEST
+ );
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
+
+ Status = KeyboardWaitForValue (
+ BiosKeyboardPrivate,
+ KBC_CMDECHO_KBCSLFTEST_OK,
+ KEYBOARD_WAITFORVALUE_TIMEOUT
+ );
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
}
}
//
@@ -1321,14 +1322,16 @@ BiosKeyboardReset ( // Done for validating keyboard. Enable keyboard (via KBC)
// and recover the command byte to proper value
//
- Status = KeyboardCommand (
- BiosKeyboardPrivate,
- KBC_CMDREG_VIA64_KB_ENABLE
- );
-
- if (EFI_ERROR (Status)) {
- Status = EFI_DEVICE_ERROR;
- goto Exit;
+ if (!PcdGetBool (PcdFastPS2Detection)) {
+ Status = KeyboardCommand (
+ BiosKeyboardPrivate,
+ KBC_CMDREG_VIA64_KB_ENABLE
+ );
+
+ if (EFI_ERROR (Status)) {
+ Status = EFI_DEVICE_ERROR;
+ goto Exit;
+ }
}
//
@@ -1674,35 +1677,38 @@ CheckKeyboardConnect ( // enable keyboard itself and wait for its ack
// If can't receive ack, Keyboard should not be connected.
//
- Status = KeyboardWrite (
- BiosKeyboardPrivate,
- KBC_INPBUF_VIA60_KBEN
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "[KBD]CheckKeyboardConnect - Keyboard enable failed!\n"));
- REPORT_STATUS_CODE (
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_CONTROLLER_ERROR
- );
- return FALSE;
- }
+ if (!PcdGetBool (PcdFastPS2Detection)) {
+ Status = KeyboardWrite (
+ BiosKeyboardPrivate,
+ KBC_INPBUF_VIA60_KBEN
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "[KBD]CheckKeyboardConnect - Keyboard enable failed!\n"));
+ REPORT_STATUS_CODE (
+ EFI_ERROR_CODE | EFI_ERROR_MINOR,
+ EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_CONTROLLER_ERROR
+ );
+ return FALSE;
+ }
- Status = KeyboardWaitForValue (
- BiosKeyboardPrivate,
- KBC_CMDECHO_ACK,
- KEYBOARD_WAITFORVALUE_TIMEOUT
- );
+ Status = KeyboardWaitForValue (
+ BiosKeyboardPrivate,
+ KBC_CMDECHO_ACK,
+ KEYBOARD_WAITFORVALUE_TIMEOUT
+ );
- if (EFI_ERROR (Status)) {
- DEBUG ((EFI_D_ERROR, "[KBD]CheckKeyboardConnect - Timeout!\n"));
- REPORT_STATUS_CODE (
- EFI_ERROR_CODE | EFI_ERROR_MINOR,
- EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_CONTROLLER_ERROR
- );
- return FALSE;
+ if (EFI_ERROR (Status)) {
+ DEBUG ((EFI_D_ERROR, "[KBD]CheckKeyboardConnect - Timeout!\n"));
+ REPORT_STATUS_CODE (
+ EFI_ERROR_CODE | EFI_ERROR_MINOR,
+ EFI_PERIPHERAL_KEYBOARD | EFI_P_EC_CONTROLLER_ERROR
+ );
+ return FALSE;
+ }
+ return TRUE;
+ } else {
+ return TRUE;
}
-
- return TRUE;
}
/**
diff --git a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf index 28ef29bf1c..ee79f6b607 100644 --- a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf +++ b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf @@ -68,4 +68,7 @@ gEfiDevicePathProtocolGuid # PROTOCOL ALWAYS_CONSUMED
[FeaturePcd]
- gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
\ No newline at end of file + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPs2KbdExtendedVerification|FALSE
+
+[Pcd]
+ gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdFastPS2Detection
\ No newline at end of file |