}\r
}\r
\r
-/**\r
- Disable NULL pointer detection.\r
-**/\r
-VOID\r
-DisableNullDetection (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc;\r
-\r
- if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) == 0) {\r
- return;\r
- }\r
-\r
- //\r
- // Check current capabilities and attributes\r
- //\r
- Status = gDS->GetMemorySpaceDescriptor (0, &Desc);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- //\r
- // Try to add EFI_MEMORY_RP support if necessary\r
- //\r
- if ((Desc.Capabilities & EFI_MEMORY_RP) == 0) {\r
- Desc.Capabilities |= EFI_MEMORY_RP;\r
- Status = gDS->SetMemorySpaceCapabilities (0, EFI_PAGES_TO_SIZE(1),\r
- Desc.Capabilities);\r
- ASSERT_EFI_ERROR (Status);\r
- if (EFI_ERROR (Status)) {\r
- return;\r
- }\r
- }\r
-\r
- //\r
- // Don't bother if EFI_MEMORY_RP is already cleared.\r
- //\r
- if ((Desc.Attributes & EFI_MEMORY_RP) != 0) {\r
- Desc.Attributes &= ~EFI_MEMORY_RP;\r
- Status = gDS->SetMemorySpaceAttributes (0, EFI_PAGES_TO_SIZE(1),\r
- Desc.Attributes);\r
- ASSERT_EFI_ERROR (Status);\r
- } else {\r
- DEBUG ((DEBUG_WARN, "!!! Page 0 is supposed to be disabled !!!\r\n"));\r
- }\r
-}\r
-\r
-/**\r
- Enable NULL pointer detection.\r
-**/\r
-VOID\r
-EnableNullDetection (\r
- VOID\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc;\r
-\r
- if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) == 0) {\r
- return;\r
- }\r
-\r
- //\r
- // Check current capabilities and attributes\r
- //\r
- Status = gDS->GetMemorySpaceDescriptor (0, &Desc);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- //\r
- // Try to add EFI_MEMORY_RP support if necessary\r
- //\r
- if ((Desc.Capabilities & EFI_MEMORY_RP) == 0) {\r
- Desc.Capabilities |= EFI_MEMORY_RP;\r
- Status = gDS->SetMemorySpaceCapabilities (0, EFI_PAGES_TO_SIZE(1),\r
- Desc.Capabilities);\r
- ASSERT_EFI_ERROR (Status);\r
- if (EFI_ERROR (Status)) {\r
- return;\r
- }\r
- }\r
-\r
- //\r
- // Don't bother if EFI_MEMORY_RP is already set.\r
- //\r
- if ((Desc.Attributes & EFI_MEMORY_RP) == 0) {\r
- Desc.Attributes |= EFI_MEMORY_RP;\r
- Status = gDS->SetMemorySpaceAttributes (0, EFI_PAGES_TO_SIZE(1),\r
- Desc.Attributes);\r
- ASSERT_EFI_ERROR (Status);\r
- }\r
-}\r
-\r
/**\r
Timer event handler: read a series of key stroke from 8042\r
and put them into memory key buffer. \r
// 0 Right Shift pressed\r
\r
\r
- //\r
- // Disable NULL pointer detection temporarily\r
- //\r
- DisableNullDetection ();\r
-\r
//\r
// Clear the CTRL and ALT BDA flag\r
//\r
- KbFlag1 = *((UINT8 *) (UINTN) 0x417); // read the STATUS FLAGS 1\r
- KbFlag2 = *((UINT8 *) (UINTN) 0x418); // read STATUS FLAGS 2\r
+ ACCESS_PAGE0_CODE (\r
+ KbFlag1 = *((UINT8 *) (UINTN) 0x417); // read the STATUS FLAGS 1\r
+ KbFlag2 = *((UINT8 *) (UINTN) 0x418); // read STATUS FLAGS 2\r
+ );\r
\r
DEBUG_CODE (\r
{\r
//\r
// Clear left alt and left ctrl BDA flag\r
//\r
- KbFlag2 &= ~(KB_LEFT_ALT_PRESSED | KB_LEFT_CTRL_PRESSED);\r
- *((UINT8 *) (UINTN) 0x418) = KbFlag2;\r
- KbFlag1 &= ~0x0C; \r
- *((UINT8 *) (UINTN) 0x417) = KbFlag1; \r
-\r
- //\r
- // Restore NULL pointer detection\r
- //\r
- EnableNullDetection ();\r
+ ACCESS_PAGE0_CODE (\r
+ KbFlag2 &= ~(KB_LEFT_ALT_PRESSED | KB_LEFT_CTRL_PRESSED);\r
+ *((UINT8 *) (UINTN) 0x418) = KbFlag2;\r
+ KbFlag1 &= ~0x0C;\r
+ *((UINT8 *) (UINTN) 0x417) = KbFlag1;\r
+ );\r
\r
//\r
// Output EFI input key and shift/toggle state\r