2 SMM Control2 Protocol on SMM Control Protocol Thunk driver.
4 Copyright (c) 2009 - 2010, 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_NOT_STARTED The SMM base service has not been initialized.
46 IN CONST EFI_SMM_CONTROL2_PROTOCOL
*This
,
47 IN OUT UINT8
*CommandPort OPTIONAL
,
48 IN OUT UINT8
*DataPort OPTIONAL
,
49 IN BOOLEAN Periodic OPTIONAL
,
50 IN UINTN ActivationInterval OPTIONAL
53 UINTN ArgumentBufferSize
;
55 ArgumentBufferSize
= 0;
56 if (CommandPort
!= NULL
) {
57 ArgumentBufferSize
= 1;
59 if (DataPort
!= NULL
) {
60 IoWrite8 (mDataPort
, *DataPort
);
62 return mSmmControl
->Trigger (mSmmControl
, (INT8
*)CommandPort
, &ArgumentBufferSize
, Periodic
, ActivationInterval
);
66 Clears any system state that was created in response to the Trigger() call.
68 This function acknowledges and causes the deassertion of the SMI activation source.
70 @param[in] This The EFI_SMM_CONTROL2_PROTOCOL instance.
71 @param[in] Periodic Optional parameter to repeat at this period one time
73 @retval EFI_SUCCESS The SMI/PMI has been engendered.
74 @retval EFI_DEVICE_ERROR The source could not be cleared.
75 @retval EFI_INVALID_PARAMETER The service did not support the Periodic input argument.
80 IN CONST EFI_SMM_CONTROL2_PROTOCOL
*This
,
81 IN BOOLEAN Periodic OPTIONAL
84 return mSmmControl
->Clear (mSmmControl
, Periodic
);
88 Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE.
90 This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.
91 It convers pointer to new virtual address.
93 @param[in] Event Event whose notification function is being invoked.
94 @param[in] Context Pointer to the notification function's context.
99 SetVirtualAddressNotify (
104 EfiConvertPointer (0x0, (VOID
**)&mSmmControl
);
108 Entry Point for this thunk driver.
110 @param[in] ImageHandle Image handle of this driver.
111 @param[in] SystemTable A Pointer to the EFI System Table.
113 @retval EFI_SUCCESS The entry point is executed successfully.
114 @retval other Some error occurred when executing this entry point.
118 SmmControl2ThunkMain (
119 IN EFI_HANDLE ImageHandle
,
120 IN EFI_SYSTEM_TABLE
*SystemTable
125 EFI_SMM_CONTROL_REGISTER RegisterInfo
;
128 /// Locate Framework SMM Control Protocol
130 Status
= gBS
->LocateProtocol (&gEfiSmmControlProtocolGuid
, NULL
, (VOID
**)&mSmmControl
);
131 ASSERT_EFI_ERROR (Status
);
133 gSmmControl2
.MinimumTriggerPeriod
= mSmmControl
->MinimumTriggerPeriod
;
135 Status
= mSmmControl
->GetRegisterInfo (mSmmControl
, &RegisterInfo
);
136 ASSERT_EFI_ERROR (Status
);
137 mDataPort
= RegisterInfo
.SmiDataRegister
;
140 /// Create event on SetVirtualAddressMap() to convert mSmmControl from a physical address to a virtual address
142 Status
= gBS
->CreateEventEx (
145 SetVirtualAddressNotify
,
147 &gEfiEventVirtualAddressChangeGuid
,
151 ASSERT_EFI_ERROR (Status
);
154 /// Publish framework SMM Control Protocol
156 Status
= gBS
->InstallProtocolInterface (
158 &gEfiSmmControl2ProtocolGuid
,
159 EFI_NATIVE_INTERFACE
,