]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/SmmControl2OnSmmControlThunk/SmmControl2OnSmmControlThunk.c
Minor comment fix.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / SmmControl2OnSmmControlThunk / SmmControl2OnSmmControlThunk.c
CommitLineData
9e620719 1/** @file\r
2 SMM Control2 Protocol on SMM Control Protocol Thunk driver.\r
3\r
26a76fbc 4 Copyright (c) 2009 - 2010, Intel Corporation\r
9e620719 5 All rights reserved. This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions of the BSD License\r
7 which accompanies this distribution. The full text of the license may be found at\r
8 http://opensource.org/licenses/bsd-license.php\r
9\r
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "SmmControl2OnSmmControlThunk.h"\r
16\r
17EFI_SMM_CONTROL2_PROTOCOL gSmmControl2 = {\r
18 SmmControl2Trigger,\r
19 SmmControl2Clear,\r
20 0\r
21};\r
22\r
23EFI_SMM_CONTROL_PROTOCOL *mSmmControl;\r
24UINT8 mDataPort;\r
25\r
26/**\r
27 Invokes SMI activation from either the preboot or runtime environment.\r
28\r
29 This function generates an SMI.\r
30\r
31 @param[in] This The EFI_SMM_CONTROL2_PROTOCOL instance.\r
26a76fbc
LG
32 @param[in, out] CommandPort The value written to the command port.\r
33 @param[in, out] DataPort The value written to the data port.\r
9e620719 34 @param[in] Periodic Optional mechanism to engender a periodic stream.\r
35 @param[in] ActivationInterval Optional parameter to repeat at this period one\r
36 time or, if the Periodic Boolean is set, periodically.\r
37\r
38 @retval EFI_SUCCESS The SMI/PMI has been engendered.\r
39 @retval EFI_DEVICE_ERROR The timing is unsupported.\r
40 @retval EFI_INVALID_PARAMETER The activation period is unsupported.\r
41 @retval EFI_NOT_STARTED The SMM base service has not been initialized.\r
42**/\r
43EFI_STATUS\r
44EFIAPI\r
45SmmControl2Trigger (\r
46 IN CONST EFI_SMM_CONTROL2_PROTOCOL *This,\r
47 IN OUT UINT8 *CommandPort OPTIONAL,\r
48 IN OUT UINT8 *DataPort OPTIONAL,\r
49 IN BOOLEAN Periodic OPTIONAL,\r
50 IN UINTN ActivationInterval OPTIONAL\r
51 )\r
52{\r
26a76fbc 53 UINTN ArgumentBufferSize;\r
9e620719 54\r
26a76fbc 55 ArgumentBufferSize = 0;\r
9e620719 56 if (CommandPort != NULL) {\r
57 ArgumentBufferSize = 1;\r
58 }\r
59 if (DataPort != NULL) {\r
60 IoWrite8 (mDataPort, *DataPort);\r
61 }\r
62 return mSmmControl->Trigger (mSmmControl, (INT8 *)CommandPort, &ArgumentBufferSize, Periodic, ActivationInterval);\r
63}\r
64\r
65/**\r
66 Clears any system state that was created in response to the Trigger() call.\r
67\r
68 This function acknowledges and causes the deassertion of the SMI activation source.\r
69\r
70 @param[in] This The EFI_SMM_CONTROL2_PROTOCOL instance.\r
71 @param[in] Periodic Optional parameter to repeat at this period one time\r
72\r
73 @retval EFI_SUCCESS The SMI/PMI has been engendered.\r
74 @retval EFI_DEVICE_ERROR The source could not be cleared.\r
75 @retval EFI_INVALID_PARAMETER The service did not support the Periodic input argument.\r
76**/\r
77EFI_STATUS\r
78EFIAPI\r
79SmmControl2Clear (\r
80 IN CONST EFI_SMM_CONTROL2_PROTOCOL *This,\r
81 IN BOOLEAN Periodic OPTIONAL\r
82 )\r
83{\r
84 return mSmmControl->Clear (mSmmControl, Periodic);\r
85}\r
86\r
87/**\r
88 Entry Point for this thunk driver.\r
89\r
90 @param[in] ImageHandle Image handle of this driver.\r
91 @param[in] SystemTable A Pointer to the EFI System Table.\r
92\r
93 @retval EFI_SUCCESS The entry point is executed successfully.\r
94 @retval other Some error occurred when executing this entry point.\r
95**/\r
96EFI_STATUS\r
97EFIAPI\r
98SmmControl2ThunkMain (\r
99 IN EFI_HANDLE ImageHandle,\r
100 IN EFI_SYSTEM_TABLE *SystemTable\r
101 )\r
102{\r
103 EFI_STATUS Status;\r
104 EFI_SMM_CONTROL_REGISTER RegisterInfo;\r
105\r
106 ///\r
107 /// Locate Framework SMM Control Protocol\r
108 ///\r
109 Status = gBS->LocateProtocol (&gEfiSmmControlProtocolGuid, NULL, (VOID **)&mSmmControl);\r
110 ASSERT_EFI_ERROR (Status);\r
111\r
112 gSmmControl2.MinimumTriggerPeriod = mSmmControl->MinimumTriggerPeriod;\r
113\r
114 Status = mSmmControl->GetRegisterInfo (mSmmControl, &RegisterInfo);\r
115 ASSERT_EFI_ERROR (Status);\r
116 mDataPort = RegisterInfo.SmiDataRegister;\r
117\r
118 ///\r
119 /// Publish framework SMM Control Protocol\r
120 ///\r
121 Status = gBS->InstallProtocolInterface (\r
122 &ImageHandle,\r
123 &gEfiSmmControl2ProtocolGuid,\r
124 EFI_NATIVE_INTERFACE,\r
125 &gSmmControl2\r
126 );\r
127 return Status;\r
128}\r
129\r