From: "Ni, Ruiyu" <ruiyu.ni@Intel.com>
To: Jian J Wang <jian.j.wang@intel.com>, edk2-devel@lists.01.org
Cc: Liming Gao <liming.gao@intel.com>,
Michael D Kinney <michael.d.kinney@intel.com>
Subject: Re: [PATCH v2 3/3] IntelFrameworkModulePkg/KeyboardDxe: Use macro to enable/disable page 0
Date: Thu, 7 Dec 2017 15:01:48 +0800 [thread overview]
Message-ID: <83eb8462-cbe9-c066-7886-a5bd3a91ed46@Intel.com> (raw)
In-Reply-To: <20171207054049.18140-4-jian.j.wang@intel.com>
On 12/7/2017 1:40 PM, Jian J Wang wrote:
>> v2:
>> a. Remove unnecessary braces enclosing code passed to ACCESS_PAGE0_CODE
>
> Current implementation uses following two methods
>
> EnableNullDetection()
> DisableNullDetection()
>
> to enable/disable page 0. These two methods will check PCD
> PcdNullPointerDetectionPropertyMask to know if the page 0 is disabled or not.
> This is due to the fact that old GCD service doesn't provide paging related
> attributes of memory block. Since this issue has been fixed, GCD services
> can be used to determine the paging status of page 0. This is also make it
> possible to just use a new macro
>
> ACCESS_PAGE0_CODE(
> <code accessing page 0>
> );
>
> to replace above methods to do the same job, which also makes code more
> readability.
>
> Cc: Liming Gao <liming.gao@intel.com>
> Cc: Michael D Kinney <michael.d.kinney@intel.com>
> Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Jian J Wang <jian.j.wang@intel.com>
> ---
> .../Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c | 118 ++-------------------
> .../Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf | 1 -
> 2 files changed, 10 insertions(+), 109 deletions(-)
>
> diff --git a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c
> index ebf03d30c1..ec525891dc 100644
> --- a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c
> +++ b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/BiosKeyboard.c
> @@ -1732,98 +1732,6 @@ CheckKeyboardConnect (
> }
> }
>
> -/**
> - Disable NULL pointer detection.
> -**/
> -VOID
> -DisableNullDetection (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> - EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc;
> -
> - if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) == 0) {
> - return;
> - }
> -
> - //
> - // Check current capabilities and attributes
> - //
> - Status = gDS->GetMemorySpaceDescriptor (0, &Desc);
> - ASSERT_EFI_ERROR (Status);
> -
> - //
> - // Try to add EFI_MEMORY_RP support if necessary
> - //
> - if ((Desc.Capabilities & EFI_MEMORY_RP) == 0) {
> - Desc.Capabilities |= EFI_MEMORY_RP;
> - Status = gDS->SetMemorySpaceCapabilities (0, EFI_PAGES_TO_SIZE(1),
> - Desc.Capabilities);
> - ASSERT_EFI_ERROR (Status);
> - if (EFI_ERROR (Status)) {
> - return;
> - }
> - }
> -
> - //
> - // Don't bother if EFI_MEMORY_RP is already cleared.
> - //
> - if ((Desc.Attributes & EFI_MEMORY_RP) != 0) {
> - Desc.Attributes &= ~EFI_MEMORY_RP;
> - Status = gDS->SetMemorySpaceAttributes (0, EFI_PAGES_TO_SIZE(1),
> - Desc.Attributes);
> - ASSERT_EFI_ERROR (Status);
> - } else {
> - DEBUG ((DEBUG_WARN, "!!! Page 0 is supposed to be disabled !!!\r\n"));
> - }
> -}
> -
> -/**
> - Enable NULL pointer detection.
> -**/
> -VOID
> -EnableNullDetection (
> - VOID
> - )
> -{
> - EFI_STATUS Status;
> - EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc;
> -
> - if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & BIT0) == 0) {
> - return;
> - }
> -
> - //
> - // Check current capabilities and attributes
> - //
> - Status = gDS->GetMemorySpaceDescriptor (0, &Desc);
> - ASSERT_EFI_ERROR (Status);
> -
> - //
> - // Try to add EFI_MEMORY_RP support if necessary
> - //
> - if ((Desc.Capabilities & EFI_MEMORY_RP) == 0) {
> - Desc.Capabilities |= EFI_MEMORY_RP;
> - Status = gDS->SetMemorySpaceCapabilities (0, EFI_PAGES_TO_SIZE(1),
> - Desc.Capabilities);
> - ASSERT_EFI_ERROR (Status);
> - if (EFI_ERROR (Status)) {
> - return;
> - }
> - }
> -
> - //
> - // Don't bother if EFI_MEMORY_RP is already set.
> - //
> - if ((Desc.Attributes & EFI_MEMORY_RP) == 0) {
> - Desc.Attributes |= EFI_MEMORY_RP;
> - Status = gDS->SetMemorySpaceAttributes (0, EFI_PAGES_TO_SIZE(1),
> - Desc.Attributes);
> - ASSERT_EFI_ERROR (Status);
> - }
> -}
> -
> /**
> Timer event handler: read a series of key stroke from 8042
> and put them into memory key buffer.
> @@ -1931,16 +1839,13 @@ BiosKeyboardTimerHandler (
> // 0 Right Shift pressed
>
>
> - //
> - // Disable NULL pointer detection temporarily
> - //
> - DisableNullDetection ();
> -
> //
> // Clear the CTRL and ALT BDA flag
> //
> - KbFlag1 = *((UINT8 *) (UINTN) 0x417); // read the STATUS FLAGS 1
> - KbFlag2 = *((UINT8 *) (UINTN) 0x418); // read STATUS FLAGS 2
> + ACCESS_PAGE0_CODE (
> + KbFlag1 = *((UINT8 *) (UINTN) 0x417); // read the STATUS FLAGS 1
> + KbFlag2 = *((UINT8 *) (UINTN) 0x418); // read STATUS FLAGS 2
> + );
>
> DEBUG_CODE (
> {
> @@ -2008,15 +1913,12 @@ BiosKeyboardTimerHandler (
> //
> // Clear left alt and left ctrl BDA flag
> //
> - KbFlag2 &= ~(KB_LEFT_ALT_PRESSED | KB_LEFT_CTRL_PRESSED);
> - *((UINT8 *) (UINTN) 0x418) = KbFlag2;
> - KbFlag1 &= ~0x0C;
> - *((UINT8 *) (UINTN) 0x417) = KbFlag1;
> -
> - //
> - // Restore NULL pointer detection
> - //
> - EnableNullDetection ();
> + ACCESS_PAGE0_CODE (
> + KbFlag2 &= ~(KB_LEFT_ALT_PRESSED | KB_LEFT_CTRL_PRESSED);
> + *((UINT8 *) (UINTN) 0x418) = KbFlag2;
> + KbFlag1 &= ~0x0C;
> + *((UINT8 *) (UINTN) 0x417) = KbFlag1;
> + );
>
> //
> // Output EFI input key and shift/toggle state
> diff --git a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf
> index 596f4ced44..eaaedbfa9c 100644
> --- a/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf
> +++ b/IntelFrameworkModulePkg/Csm/BiosThunk/KeyboardDxe/KeyboardDxe.inf
> @@ -74,7 +74,6 @@
>
> [Pcd]
> gEfiMdeModulePkgTokenSpaceGuid.PcdFastPS2Detection ## SOMETIMES_CONSUMES
> - gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask ## CONSUMES
>
> [UserExtensions.TianoCore."ExtraFiles"]
> KeyboardDxeExtra.uni
>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
--
Thanks,
Ray
prev parent reply other threads:[~2017-12-07 6:57 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-07 5:40 [PATCH v2 0/3] Remove dependency on PcdNullPointerDetectionPropertyMask Jian J Wang
2017-12-07 5:40 ` [PATCH v2 1/3] IntelFrameworkPkg/LegacyBios.h: Add a macro to guarantee page 0 access Jian J Wang
2017-12-07 7:00 ` Ni, Ruiyu
2017-12-07 8:03 ` Wang, Jian J
2017-12-07 5:40 ` [PATCH v2 2/3] IntelFrameworkModulePkg/LegacyBiosDxe: Use macro to enable/disable page 0 Jian J Wang
2017-12-07 7:01 ` Ni, Ruiyu
2017-12-07 5:40 ` [PATCH v2 3/3] IntelFrameworkModulePkg/KeyboardDxe: " Jian J Wang
2017-12-07 7:01 ` Ni, Ruiyu [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83eb8462-cbe9-c066-7886-a5bd3a91ed46@Intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox