43 STATIC CHAR16 Output[] = L
"A";
45 gST->ConOut->EnableCursor (
gST->ConOut, TRUE);
47 StartRow =
gST->ConOut->Mode->CursorRow;
48 StartColumn =
gST->ConOut->Mode->CursorColumn;
54 gBS->WaitForEvent (1, &
gST->ConIn->WaitForKey, &EventIndex);
56 Status =
gST->ConIn->ReadKeyStroke (
gST->ConIn, &Key);
58 if (EFI_ERROR (Status)) {
59 if (Status == EFI_NOT_READY) {
66 switch (Key.UnicodeChar) {
70 gST->ConOut->SetCursorPosition (
gST->ConOut, StartColumn +
Pos, StartRow);
71 gST->ConOut->OutputString (
gST->ConOut, L
" ");
72 gST->ConOut->SetCursorPosition (
gST->ConOut, StartColumn +
Pos, StartRow);
80 gST->ConOut->SetCursorPosition (
gST->ConOut, StartColumn +
Pos, StartRow);
81 for (Index = 1; Index <
Length; ++Index) {
82 gST->ConOut->OutputString (
gST->ConOut, L
" ");
85 gST->ConOut->SetCursorPosition (
gST->ConOut, StartColumn +
Pos, StartRow);
93 case CHAR_CARRIAGE_RETURN:
96 gST->ConOut->EnableCursor (
gST->ConOut, FALSE);
102 Output[0] = Key.UnicodeChar;
103 gST->ConOut->OutputString (
gST->ConOut, Output);
152 UINTN ParameterCount;
161 if (EFI_ERROR (Status)) {
162 Print (L
"Unable to get arguments - %r\n", Status);
168 for (Index = 1; Index < Argc; ++Index) {
169 Token = AllocateCopyPool (StrSize (Argv[Index]), Argv[Index]);
171 Print (L
"Could not allocate memory for Token.\n");
172 return EFI_OUT_OF_RESOURCES;
177 while (Token[TokenIndex] !=
'\0') {
178 if (Token[TokenIndex] ==
' ') {
183 Parameter = &Token[TokenIndex];
187 }
while (Token[TokenIndex] !=
'\0' && Token[TokenIndex] !=
' ');
189 Token[TokenIndex] =
'\0';
191 if (
OcStriCmp (Parameter, L
"lock") == 0) {
193 }
else if (
OcStriCmp (Parameter, L
"unlock") == 0) {
195 }
else if (
OcStriCmp (Parameter, L
"interactive") == 0) {
198 Print (L
"Unknown command line argument: %s\n", Parameter);
199 Status = EFI_INVALID_PARAMETER;
209 if (ParameterCount > 1) {
210 Print (L
"interactive, unlock, lock are exclusive options. Use only one of them.\n\n");
211 Status = EFI_INVALID_PARAMETER;
214 if (ParameterCount == 0) {
215 Print (L
"No option selected, verify only.\n");
216 Print (L
"Usage: ControlMsrE2 <unlock | lock | interactive>\n\n");