/**@file\r
IA32 specific debug support functions\r
- \r
-Copyright (c) 2006 Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
IDT_ENTRY *IdtEntryTable = NULL;\r
DESCRIPTOR NullDesc = 0;\r
\r
-#ifndef EFI_NT_EMULATOR\r
STATIC\r
EFI_STATUS\r
CreateEntryStub (\r
\r
--*/\r
{\r
- EFI_STATUS Status;\r
UINT8 *StubCopy;\r
\r
//\r
// First, allocate a new buffer and copy the stub code into it\r
//\r
- Status = gBS->AllocatePool (EfiBootServicesData, StubSize, Stub);\r
- if (Status == EFI_SUCCESS) {\r
+ *Stub = AllocatePool (StubSize);\r
+ if (*Stub != NULL) {\r
StubCopy = *Stub;\r
- gBS->CopyMem (StubCopy, InterruptEntryStub, StubSize);\r
+ CopyMem (StubCopy, InterruptEntryStub, StubSize);\r
\r
//\r
// Next fixup the stub code for this vector\r
// fixup the jump target to point to the common entry\r
//\r
*(UINT32 *) &StubCopy[0x0e] = (UINT32) CommonIdtEntry - (UINT32) &StubCopy[StubSize];\r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
- return Status;\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
\r
STATIC\r
\r
Returns:\r
EFI_SUCCESS\r
- Other values are passed through from FreePool\r
\r
--*/\r
{\r
BOOLEAN OldIntFlagState;\r
- EFI_STATUS Status;\r
\r
OldIntFlagState = WriteInterruptFlag (0);\r
WriteIdt (ExceptionType, &(IdtEntryTable[ExceptionType].OrigDesc));\r
- Status = gBS->FreePool ((VOID *) (UINTN) IdtEntryTable[ExceptionType].StubEntry);\r
+ FreePool ((VOID *) (UINTN) IdtEntryTable[ExceptionType].StubEntry);\r
ZeroMem (&IdtEntryTable[ExceptionType], sizeof (IDT_ENTRY));\r
WriteInterruptFlag (OldIntFlagState);\r
\r
- return (Status);\r
+ return EFI_SUCCESS;\r
}\r
-#endif\r
\r
EFI_STATUS\r
ManageIdtEntryTable (\r
\r
Status = EFI_SUCCESS;\r
\r
-#ifndef EFI_NT_EMULATOR\r
- if (CompareDescriptor (&IdtEntryTable[ExceptionType].NewDesc, &NullDesc)) {\r
- //\r
- // we've already installed to this vector\r
- //\r
- if (NewCallback != NULL) {\r
+ if (FeaturePcdGet (PcdNtEmulatorEnable)) {\r
+ if (CompareDescriptor (&IdtEntryTable[ExceptionType].NewDesc, &NullDesc)) {\r
//\r
- // if the input handler is non-null, error\r
+ // we've already installed to this vector\r
//\r
- Status = EFI_ALREADY_STARTED;\r
+ if (NewCallback != NULL) {\r
+ //\r
+ // if the input handler is non-null, error\r
+ //\r
+ Status = EFI_ALREADY_STARTED;\r
+ } else {\r
+ Status = UnhookEntry (ExceptionType);\r
+ }\r
} else {\r
- Status = UnhookEntry (ExceptionType);\r
- }\r
- } else {\r
- //\r
- // no user handler installed on this vector\r
- //\r
- if (NewCallback == NULL) {\r
//\r
- // if the input handler is null, error\r
+ // no user handler installed on this vector\r
//\r
- Status = EFI_INVALID_PARAMETER;\r
- } else {\r
- Status = HookEntry (ExceptionType, NewCallback);\r
+ if (NewCallback == NULL) {\r
+ //\r
+ // if the input handler is null, error\r
+ //\r
+ Status = EFI_INVALID_PARAMETER;\r
+ } else {\r
+ Status = HookEntry (ExceptionType, NewCallback);\r
+ }\r
}\r
}\r
-#endif\r
+\r
return Status;\r
}\r
\r
ManageIdtEntryTable (NULL, ExceptionType);\r
}\r
\r
- gBS->FreePool (IdtEntryTable);\r
+ FreePool (IdtEntryTable);\r
return EFI_SUCCESS;\r
}\r
\r