Re: [edk2] [PATCH v4 09/41] OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER

2015-11-24 Thread Laszlo Ersek
On 11/24/15 08:06, Kinney, Michael D wrote:
> Laszlo,
> 
> I other modules where we want to halt no matter what, the following 2
> statements are used together.  ASSERT() could be removed by PCD
> settings, so dead loop catches that case.  If ASSERT() is enabled,
> then the ASSERT() behavior of BP or dead loop is controlled by PCD.
> 
>   ASSERT (FALSE);
>   CpuDeadLoop ();

Perfect. I'll replace all uses of _ASSERT() in the series, with the
above pattern.

Thank you!
Laszlo

> 
> Thanks,
> 
> Mike
> 
> 
>> -Original Message-
>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
>> Laszlo Ersek
>> Sent: Monday, November 23, 2015 4:56 AM
>> To: Kinney, Michael D <michael.d.kin...@intel.com>; edk2-de...@ml01.01.org
>> Subject: Re: [edk2] [PATCH v4 09/41] OvmfPkg: implement 
>> EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER
>>
>> On 11/21/15 07:17, Kinney, Michael D wrote:
>>> Laszlo,
>>>
>>> Minor comments included below.
>>>
>>> Reviewed-by: Michael Kinney <michael.d.kin...@intel.com>
>>
>> Thank you. I'll pick up this tag. Answers and further questions below:
>>
>>>
>>> Mike
>>>
>>>> -Original Message-----
>>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf
>>>> Of Laszlo Ersek
>>>> Sent: Tuesday, November 3, 2015 1:01 PM
>>>> To: edk2-de...@ml01.01.org
>>>> Subject: [edk2] [PATCH v4 09/41] OvmfPkg: implement
>>>> EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER
>>>>
>>>> The EFI_SMM_COMMUNICATION_PROTOCOL implementation that is provided by
>>>> the SMM core depends on EFI_SMM_CONTROL2_PROTOCOL; see the
>>>> mSmmControl2->Trigger() call in the SmmCommunicationCommunicate()
>>>> mSmmControl2->function
>>>> [MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c].
>>>>
>>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>>> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
>>>> ---
>>>>
>>>> Notes:
>>>> v2:
>>>> - Set (APMC_EN|GBL_SMI_EN) in SMI_EN from the boot script at S3 resume.
>>>>   Otherwise, because SMI_EN is cleared during warm reset,
>>>>   SmmControl2DxeTrigger() would fail to trigger an SMI, and variable
>>>>   access through the runtime services would fail.
>>>>
>>>>   Set SMI_LOCK in GEN_PMCON_1 similarly.
>>>>
>>>>  OvmfPkg/OvmfPkgIa32.dsc   |   1 +
>>>>  OvmfPkg/OvmfPkgIa32X64.dsc|   1 +
>>>>  OvmfPkg/OvmfPkgX64.dsc|   1 +
>>>>  OvmfPkg/OvmfPkgIa32.fdf   |   1 +
>>>>  OvmfPkg/OvmfPkgIa32X64.fdf|   1 +
>>>>  OvmfPkg/OvmfPkgX64.fdf|   1 +
>>>>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf |  65 
>>>>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c   | 365 
>>>>  8 files changed, 436 insertions(+)
>>>>
>>>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index
>>>> d7bc38d..c71a2f4 100644
>>>> --- a/OvmfPkg/OvmfPkgIa32.dsc
>>>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
>>>> @@ -675,4 +675,5 @@ [Components]
>>>>
>>>>  !if $(SMM_REQUIRE) == TRUE
>>>>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>>>> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>>>  !endif
>>>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
>>>> index e17cbe5..a1e8f0d 100644
>>>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
>>>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
>>>> @@ -682,4 +682,5 @@ [Components.X64]
>>>>
>>>>  !if $(SMM_REQUIRE) == TRUE
>>>>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>>>> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>>>  !endif
>>>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index
>>>> a748fb3..1176629 100644
>>>> --- a/OvmfPkg/OvmfPkgX64.dsc
>>>> +++ b/OvmfPkg/OvmfPkgX64.dsc
>>>> @@ -680,4 +680,5 @@ [Components]
>>>>
>>>>  !if $(SMM_REQUIRE) == TRUE
>>>>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>>>> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>>>  !endif
>>>> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index
>>>> 285720f..

Re: [edk2] [PATCH v4 09/41] OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER

2015-11-23 Thread Laszlo Ersek
On 11/21/15 07:17, Kinney, Michael D wrote:
> Laszlo,
> 
> Minor comments included below.
> 
> Reviewed-by: Michael Kinney <michael.d.kin...@intel.com>

Thank you. I'll pick up this tag. Answers and further questions below:

> 
> Mike
> 
>> -Original Message-
>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
>> Laszlo Ersek
>> Sent: Tuesday, November 3, 2015 1:01 PM
>> To: edk2-de...@ml01.01.org
>> Subject: [edk2] [PATCH v4 09/41] OvmfPkg: implement 
>> EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER
>>
>> The EFI_SMM_COMMUNICATION_PROTOCOL implementation that is provided by the 
>> SMM core depends on
>> EFI_SMM_CONTROL2_PROTOCOL; see the
>> mSmmControl2->Trigger() call in the SmmCommunicationCommunicate()
>> mSmmControl2->function
>> [MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c].
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
>> ---
>>
>> Notes:
>> v2:
>> - Set (APMC_EN|GBL_SMI_EN) in SMI_EN from the boot script at S3 resume.
>>   Otherwise, because SMI_EN is cleared during warm reset,
>>   SmmControl2DxeTrigger() would fail to trigger an SMI, and variable
>>   access through the runtime services would fail.
>>
>>   Set SMI_LOCK in GEN_PMCON_1 similarly.
>>
>>  OvmfPkg/OvmfPkgIa32.dsc   |   1 +
>>  OvmfPkg/OvmfPkgIa32X64.dsc|   1 +
>>  OvmfPkg/OvmfPkgX64.dsc|   1 +
>>  OvmfPkg/OvmfPkgIa32.fdf   |   1 +
>>  OvmfPkg/OvmfPkgIa32X64.fdf|   1 +
>>  OvmfPkg/OvmfPkgX64.fdf|   1 +
>>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf |  65 
>>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c   | 365 
>>  8 files changed, 436 insertions(+)
>>
>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 
>> d7bc38d..c71a2f4 100644
>> --- a/OvmfPkg/OvmfPkgIa32.dsc
>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
>> @@ -675,4 +675,5 @@ [Components]
>>
>>  !if $(SMM_REQUIRE) == TRUE
>>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>  !endif
>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 
>> e17cbe5..a1e8f0d 100644
>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
>> @@ -682,4 +682,5 @@ [Components.X64]
>>
>>  !if $(SMM_REQUIRE) == TRUE
>>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>  !endif
>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 
>> a748fb3..1176629 100644
>> --- a/OvmfPkg/OvmfPkgX64.dsc
>> +++ b/OvmfPkg/OvmfPkgX64.dsc
>> @@ -680,4 +680,5 @@ [Components]
>>
>>  !if $(SMM_REQUIRE) == TRUE
>>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>  !endif
>> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index 
>> 285720f..43c9c30 100644
>> --- a/OvmfPkg/OvmfPkgIa32.fdf
>> +++ b/OvmfPkg/OvmfPkgIa32.fdf
>> @@ -357,6 +357,7 @@ [FV.DXEFV]
>>
>>  !if $(SMM_REQUIRE) == TRUE
>>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>  !endif
>>
>>  
>> 
>> diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index 
>> 02e8752..9446896 100644
>> --- a/OvmfPkg/OvmfPkgIa32X64.fdf
>> +++ b/OvmfPkg/OvmfPkgIa32X64.fdf
>> @@ -357,6 +357,7 @@ [FV.DXEFV]
>>
>>  !if $(SMM_REQUIRE) == TRUE
>>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>  !endif
>>
>>  
>> 
>> diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 
>> f04c36b..b272b76 100644
>> --- a/OvmfPkg/OvmfPkgX64.fdf
>> +++ b/OvmfPkg/OvmfPkgX64.fdf
>> @@ -357,6 +357,7 @@ [FV.DXEFV]
>>
>>  !if $(SMM_REQUIRE) == TRUE
>>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
>> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>>  !endif
>>
>>  
>> 
>> diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf 
>> b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>> new file mode 100644
>> index 000..bc66a27
>

Re: [edk2] [PATCH v4 09/41] OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER

2015-11-23 Thread Kinney, Michael D
Laszlo,

I other modules where we want to halt no matter what, the following 2 
statements are used together.  ASSERT() could be removed by PCD settings, so 
dead loop catches that case.  If ASSERT() is enabled, then the ASSERT() 
behavior of BP or dead loop is controlled by PCD.

ASSERT (FALSE);
CpuDeadLoop ();

Thanks,

Mike


> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Laszlo 
> Ersek
> Sent: Monday, November 23, 2015 4:56 AM
> To: Kinney, Michael D <michael.d.kin...@intel.com>; edk2-de...@ml01.01.org
> Subject: Re: [edk2] [PATCH v4 09/41] OvmfPkg: implement 
> EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER
> 
> On 11/21/15 07:17, Kinney, Michael D wrote:
> > Laszlo,
> >
> > Minor comments included below.
> >
> > Reviewed-by: Michael Kinney <michael.d.kin...@intel.com>
> 
> Thank you. I'll pick up this tag. Answers and further questions below:
> 
> >
> > Mike
> >
> >> -Original Message-
> >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf
> >> Of Laszlo Ersek
> >> Sent: Tuesday, November 3, 2015 1:01 PM
> >> To: edk2-de...@ml01.01.org
> >> Subject: [edk2] [PATCH v4 09/41] OvmfPkg: implement
> >> EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER
> >>
> >> The EFI_SMM_COMMUNICATION_PROTOCOL implementation that is provided by
> >> the SMM core depends on EFI_SMM_CONTROL2_PROTOCOL; see the
> >> mSmmControl2->Trigger() call in the SmmCommunicationCommunicate()
> >> mSmmControl2->function
> >> [MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c].
> >>
> >> Contributed-under: TianoCore Contribution Agreement 1.0
> >> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> >> ---
> >>
> >> Notes:
> >> v2:
> >> - Set (APMC_EN|GBL_SMI_EN) in SMI_EN from the boot script at S3 resume.
> >>   Otherwise, because SMI_EN is cleared during warm reset,
> >>   SmmControl2DxeTrigger() would fail to trigger an SMI, and variable
> >>   access through the runtime services would fail.
> >>
> >>   Set SMI_LOCK in GEN_PMCON_1 similarly.
> >>
> >>  OvmfPkg/OvmfPkgIa32.dsc   |   1 +
> >>  OvmfPkg/OvmfPkgIa32X64.dsc|   1 +
> >>  OvmfPkg/OvmfPkgX64.dsc|   1 +
> >>  OvmfPkg/OvmfPkgIa32.fdf   |   1 +
> >>  OvmfPkg/OvmfPkgIa32X64.fdf|   1 +
> >>  OvmfPkg/OvmfPkgX64.fdf|   1 +
> >>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf |  65 
> >>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c   | 365 
> >>  8 files changed, 436 insertions(+)
> >>
> >> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index
> >> d7bc38d..c71a2f4 100644
> >> --- a/OvmfPkg/OvmfPkgIa32.dsc
> >> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> >> @@ -675,4 +675,5 @@ [Components]
> >>
> >>  !if $(SMM_REQUIRE) == TRUE
> >>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
> >>  !endif
> >> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
> >> index e17cbe5..a1e8f0d 100644
> >> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> >> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> >> @@ -682,4 +682,5 @@ [Components.X64]
> >>
> >>  !if $(SMM_REQUIRE) == TRUE
> >>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
> >>  !endif
> >> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index
> >> a748fb3..1176629 100644
> >> --- a/OvmfPkg/OvmfPkgX64.dsc
> >> +++ b/OvmfPkg/OvmfPkgX64.dsc
> >> @@ -680,4 +680,5 @@ [Components]
> >>
> >>  !if $(SMM_REQUIRE) == TRUE
> >>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
> >>  !endif
> >> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index
> >> 285720f..43c9c30 100644
> >> --- a/OvmfPkg/OvmfPkgIa32.fdf
> >> +++ b/OvmfPkg/OvmfPkgIa32.fdf
> >> @@ -357,6 +357,7 @@ [FV.DXEFV]
> >>
> >>  !if $(SMM_REQUIRE) == TRUE
> >>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
> >>  !endif
> >>
> >>
> >> #
> >

Re: [edk2] [PATCH v4 09/41] OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER

2015-11-20 Thread Kinney, Michael D
Laszlo,

Minor comments included below.

Reviewed-by: Michael Kinney <michael.d.kin...@intel.com>

Mike

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Laszlo 
> Ersek
> Sent: Tuesday, November 3, 2015 1:01 PM
> To: edk2-de...@ml01.01.org
> Subject: [edk2] [PATCH v4 09/41] OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL 
> with a DXE_RUNTIME_DRIVER
> 
> The EFI_SMM_COMMUNICATION_PROTOCOL implementation that is provided by the SMM 
> core depends on
> EFI_SMM_CONTROL2_PROTOCOL; see the
> mSmmControl2->Trigger() call in the SmmCommunicationCommunicate()
> mSmmControl2->function
> [MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c].
> 
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> ---
> 
> Notes:
> v2:
> - Set (APMC_EN|GBL_SMI_EN) in SMI_EN from the boot script at S3 resume.
>   Otherwise, because SMI_EN is cleared during warm reset,
>   SmmControl2DxeTrigger() would fail to trigger an SMI, and variable
>   access through the runtime services would fail.
> 
>   Set SMI_LOCK in GEN_PMCON_1 similarly.
> 
>  OvmfPkg/OvmfPkgIa32.dsc   |   1 +
>  OvmfPkg/OvmfPkgIa32X64.dsc|   1 +
>  OvmfPkg/OvmfPkgX64.dsc|   1 +
>  OvmfPkg/OvmfPkgIa32.fdf   |   1 +
>  OvmfPkg/OvmfPkgIa32X64.fdf|   1 +
>  OvmfPkg/OvmfPkgX64.fdf|   1 +
>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf |  65 
>  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c   | 365 
>  8 files changed, 436 insertions(+)
> 
> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 
> d7bc38d..c71a2f4 100644
> --- a/OvmfPkg/OvmfPkgIa32.dsc
> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> @@ -675,4 +675,5 @@ [Components]
> 
>  !if $(SMM_REQUIRE) == TRUE
>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>  !endif
> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 
> e17cbe5..a1e8f0d 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> @@ -682,4 +682,5 @@ [Components.X64]
> 
>  !if $(SMM_REQUIRE) == TRUE
>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>  !endif
> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 
> a748fb3..1176629 100644
> --- a/OvmfPkg/OvmfPkgX64.dsc
> +++ b/OvmfPkg/OvmfPkgX64.dsc
> @@ -680,4 +680,5 @@ [Components]
> 
>  !if $(SMM_REQUIRE) == TRUE
>OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> +  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>  !endif
> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index 
> 285720f..43c9c30 100644
> --- a/OvmfPkg/OvmfPkgIa32.fdf
> +++ b/OvmfPkg/OvmfPkgIa32.fdf
> @@ -357,6 +357,7 @@ [FV.DXEFV]
> 
>  !if $(SMM_REQUIRE) == TRUE
>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>  !endif
> 
>  
> 
> diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index 
> 02e8752..9446896 100644
> --- a/OvmfPkg/OvmfPkgIa32X64.fdf
> +++ b/OvmfPkg/OvmfPkgIa32X64.fdf
> @@ -357,6 +357,7 @@ [FV.DXEFV]
> 
>  !if $(SMM_REQUIRE) == TRUE
>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>  !endif
> 
>  
> 
> diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 
> f04c36b..b272b76 100644
> --- a/OvmfPkg/OvmfPkgX64.fdf
> +++ b/OvmfPkg/OvmfPkgX64.fdf
> @@ -357,6 +357,7 @@ [FV.DXEFV]
> 
>  !if $(SMM_REQUIRE) == TRUE
>  INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> +INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
>  !endif
> 
>  
> 
> diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf 
> b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
> new file mode 100644
> index 000..bc66a27
> --- /dev/null
> +++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
> @@ -0,0 +1,65 @@
> +## @file
> +# A DXE_RUNTIME_DRIVER providing synchronous SMI activations via the #
> +EFI_SMM_CONTROL2_PROTOCOL.
> +#
> +# We expect the PEI phase to have covered the following:
> +# - ensure that the underlying QEMU machine type be Q35
> +#   (responsible: OvmfPkg/SmmAccess/SmmAccessPei.inf)
> +# - ensure that the ACPI PM IO space be configured
> +#   (responsible: OvmfPkg/PlatformPei/PlatformPei.inf)
> +#
> +# Our own entry point is responsi

[edk2] [PATCH v4 09/41] OvmfPkg: implement EFI_SMM_CONTROL2_PROTOCOL with a DXE_RUNTIME_DRIVER

2015-11-03 Thread Laszlo Ersek
The EFI_SMM_COMMUNICATION_PROTOCOL implementation that is provided by the
SMM core depends on EFI_SMM_CONTROL2_PROTOCOL; see the
mSmmControl2->Trigger() call in the SmmCommunicationCommunicate() function
[MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c].

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek 
---

Notes:
v2:
- Set (APMC_EN|GBL_SMI_EN) in SMI_EN from the boot script at S3 resume.
  Otherwise, because SMI_EN is cleared during warm reset,
  SmmControl2DxeTrigger() would fail to trigger an SMI, and variable
  access through the runtime services would fail.

  Set SMI_LOCK in GEN_PMCON_1 similarly.

 OvmfPkg/OvmfPkgIa32.dsc   |   1 +
 OvmfPkg/OvmfPkgIa32X64.dsc|   1 +
 OvmfPkg/OvmfPkgX64.dsc|   1 +
 OvmfPkg/OvmfPkgIa32.fdf   |   1 +
 OvmfPkg/OvmfPkgIa32X64.fdf|   1 +
 OvmfPkg/OvmfPkgX64.fdf|   1 +
 OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf |  65 
 OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c   | 365 
 8 files changed, 436 insertions(+)

diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
index d7bc38d..c71a2f4 100644
--- a/OvmfPkg/OvmfPkgIa32.dsc
+++ b/OvmfPkg/OvmfPkgIa32.dsc
@@ -675,4 +675,5 @@ [Components]
 
 !if $(SMM_REQUIRE) == TRUE
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
+  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
 !endif
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index e17cbe5..a1e8f0d 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -682,4 +682,5 @@ [Components.X64]
 
 !if $(SMM_REQUIRE) == TRUE
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
+  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
 !endif
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index a748fb3..1176629 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -680,4 +680,5 @@ [Components]
 
 !if $(SMM_REQUIRE) == TRUE
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
+  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
 !endif
diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf
index 285720f..43c9c30 100644
--- a/OvmfPkg/OvmfPkgIa32.fdf
+++ b/OvmfPkg/OvmfPkgIa32.fdf
@@ -357,6 +357,7 @@ [FV.DXEFV]
 
 !if $(SMM_REQUIRE) == TRUE
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
+INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
 !endif
 
 

diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf
index 02e8752..9446896 100644
--- a/OvmfPkg/OvmfPkgIa32X64.fdf
+++ b/OvmfPkg/OvmfPkgIa32X64.fdf
@@ -357,6 +357,7 @@ [FV.DXEFV]
 
 !if $(SMM_REQUIRE) == TRUE
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
+INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
 !endif
 
 

diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf
index f04c36b..b272b76 100644
--- a/OvmfPkg/OvmfPkgX64.fdf
+++ b/OvmfPkg/OvmfPkgX64.fdf
@@ -357,6 +357,7 @@ [FV.DXEFV]
 
 !if $(SMM_REQUIRE) == TRUE
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
+INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
 !endif
 
 

diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf 
b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
new file mode 100644
index 000..bc66a27
--- /dev/null
+++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
@@ -0,0 +1,65 @@
+## @file
+# A DXE_RUNTIME_DRIVER providing synchronous SMI activations via the
+# EFI_SMM_CONTROL2_PROTOCOL.
+#
+# We expect the PEI phase to have covered the following:
+# - ensure that the underlying QEMU machine type be Q35
+#   (responsible: OvmfPkg/SmmAccess/SmmAccessPei.inf)
+# - ensure that the ACPI PM IO space be configured
+#   (responsible: OvmfPkg/PlatformPei/PlatformPei.inf)
+#
+# Our own entry point is responsible for confirming the SMI feature and for
+# configuring it.
+#
+# Copyright (C) 2013, 2015, Red Hat, Inc.
+#
+# This program and the accompanying materials are licensed and made available
+# under the terms and conditions of the BSD License which accompanies this
+# distribution. The full text of the license may be found at
+# http://opensource.org/licenses/bsd-license.php
+#
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
+# WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+#
+##
+
+[Defines]
+  INF_VERSION= 0x00010005
+  BASE_NAME  = SmmControl2Dxe
+  FILE_GUID  = 1206F7CA-A475-4624-A83E-E6FC9BB38E49
+  MODULE_TYPE= DXE_RUNTIME_DRIVER
+  VERSION_STRING = 1.0
+  PI_SPECIFICATION_VERSION   = 0x00010400
+  ENTRY_POINT= SmmControl2DxeEntryPoint
+
+#
+# The following information is for reference only and not required by the 
build tools.
+#
+#  VALID_ARCHITECTURES