2 SMM Control2 Protocol on SMM Control Protocol Thunk driver.
4 Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "SmmControl2OnSmmControlThunk.h"
17 EFI_SMM_CONTROL2_PROTOCOL gSmmControl2
= {
23 EFI_SMM_CONTROL_PROTOCOL
*mSmmControl
;
27 Invokes SMI activation from either the preboot or runtime environment.
29 This function generates an SMI.
31 @param[in] This The EFI_SMM_CONTROL2_PROTOCOL instance.
32 @param[in, out] CommandPort The value written to the command port.
33 @param[in, out] DataPort The value written to the data port.
34 @param[in] Periodic Optional mechanism to engender a periodic stream.
35 @param[in] ActivationInterval Optional parameter to repeat at this period one
36 time or, if the Periodic Boolean is set, periodically.
38 @retval EFI_SUCCESS The SMI/PMI has been engendered.
39 @retval EFI_DEVICE_ERROR The timing is unsupported.
40 @retval EFI_INVALID_PARAMETER The activation period is unsupported.
41 @retval EFI_INVALID_PARAMETER The last periodic activation has not been cleared.
42 @retval EFI_NOT_STARTED The SMM base service has not been initialized.
47 IN CONST EFI_SMM_CONTROL2_PROTOCOL
*This
,
48 IN OUT UINT8
*CommandPort OPTIONAL
,
49 IN OUT UINT8
*DataPort OPTIONAL
,
50 IN BOOLEAN Periodic OPTIONAL
,
51 IN UINTN ActivationInterval OPTIONAL
54 UINTN ArgumentBufferSize
;
56 ArgumentBufferSize
= 0;
57 if (CommandPort
!= NULL
) {
58 ArgumentBufferSize
= 1;
60 if (DataPort
!= NULL
) {
61 IoWrite8 (mDataPort
, *DataPort
);
63 return mSmmControl
->Trigger (mSmmControl
, (INT8
*)CommandPort
, &ArgumentBufferSize
, Periodic
, ActivationInterval
);
67 Clears any system state that was created in response to the Trigger() call.
69 This function acknowledges and causes the deassertion of the SMI activation source.
71 @param[in] This The EFI_SMM_CONTROL2_PROTOCOL instance.
72 @param[in] Periodic Optional parameter to repeat at this period one time
74 @retval EFI_SUCCESS The SMI/PMI has been engendered.
75 @retval EFI_DEVICE_ERROR The source could not be cleared.
76 @retval EFI_INVALID_PARAMETER The service did not support the Periodic input argument.
81 IN CONST EFI_SMM_CONTROL2_PROTOCOL
*This
,
82 IN BOOLEAN Periodic OPTIONAL
85 return mSmmControl
->Clear (mSmmControl
, Periodic
);
89 Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE.
91 This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
92 It convers pointer to new virtual address.
94 @param[in] Event Event whose notification function is being invoked.
95 @param[in] Context Pointer to the notification function's context.
100 SetVirtualAddressNotify (
105 EfiConvertPointer (0x0, (VOID
**)&mSmmControl
);
109 Entry Point for this thunk driver.
111 @param[in] ImageHandle Image handle of this driver.
112 @param[in] SystemTable A Pointer to the EFI System Table.
114 @retval EFI_SUCCESS The entry point is executed successfully.
115 @retval other Some error occurred when executing this entry point.
119 SmmControl2ThunkMain (
120 IN EFI_HANDLE ImageHandle
,
121 IN EFI_SYSTEM_TABLE
*SystemTable
126 EFI_SMM_CONTROL_REGISTER RegisterInfo
;
129 /// Locate Framework SMM Control Protocol
131 Status
= gBS
->LocateProtocol (&gEfiSmmControlProtocolGuid
, NULL
, (VOID
**)&mSmmControl
);
132 ASSERT_EFI_ERROR (Status
);
134 gSmmControl2
.MinimumTriggerPeriod
= mSmmControl
->MinimumTriggerPeriod
;
136 Status
= mSmmControl
->GetRegisterInfo (mSmmControl
, &RegisterInfo
);
137 ASSERT_EFI_ERROR (Status
);
138 mDataPort
= RegisterInfo
.SmiDataRegister
;
141 /// Create event on SetVirtualAddressMap() to convert mSmmControl from a physical address to a virtual address
143 Status
= gBS
->CreateEventEx (
146 SetVirtualAddressNotify
,
148 &gEfiEventVirtualAddressChangeGuid
,
152 ASSERT_EFI_ERROR (Status
);
155 /// Publish framework SMM Control Protocol
157 Status
= gBS
->InstallProtocolInterface (
159 &gEfiSmmControl2ProtocolGuid
,
160 EFI_NATIVE_INTERFACE
,