Commit | Line | Data |
---|---|---|
be46cd5f | 1 | /** @file\r |
2 | Set a IDT entry for debug purpose\r | |
3 | \r | |
4 | Set a IDT entry for interrupt vector 3 for debug purpose for IA32 platform\r | |
5 | \r | |
57f360f2 | 6 | Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r |
be46cd5f | 7 | \r |
9d510e61 | 8 | SPDX-License-Identifier: BSD-2-Clause-Patent\r |
be46cd5f | 9 | \r |
10 | **/\r | |
11 | #include "ScriptExecute.h"\r | |
be46cd5f | 12 | \r |
be46cd5f | 13 | /**\r |
14 | Set a IDT entry for interrupt vector 3 for debug purpose.\r | |
15 | \r | |
16 | @param AcpiS3Context a pointer to a structure of ACPI_S3_CONTEXT\r | |
17 | \r | |
18 | **/\r | |
19 | VOID\r | |
20 | SetIdtEntry (\r | |
21 | IN ACPI_S3_CONTEXT *AcpiS3Context\r | |
22 | )\r | |
23 | {\r | |
68cc1ba3 | 24 | IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r |
be46cd5f | 25 | IA32_DESCRIPTOR *IdtDescriptor;\r |
26 | UINTN S3DebugBuffer;\r | |
57f360f2 | 27 | EFI_STATUS Status;\r |
be46cd5f | 28 | \r |
29 | //\r | |
30 | // Restore IDT for debug\r | |
31 | //\r | |
32 | IdtDescriptor = (IA32_DESCRIPTOR *) (UINTN) (AcpiS3Context->IdtrProfile);\r | |
f4a25e81 | 33 | AsmWriteIdtr (IdtDescriptor);\r |
be46cd5f | 34 | \r |
f4a25e81 | 35 | //\r |
36 | // Setup the default CPU exception handlers\r | |
37 | //\r | |
57f360f2 JF |
38 | Status = InitializeCpuExceptionHandlers (NULL);\r |
39 | ASSERT_EFI_ERROR (Status);\r | |
be46cd5f | 40 | \r |
f4a25e81 | 41 | DEBUG_CODE (\r |
42 | //\r | |
43 | // Update IDT entry INT3 if the instruction is valid in it\r | |
44 | //\r | |
45 | S3DebugBuffer = (UINTN) (AcpiS3Context->S3DebugBufferAddress);\r | |
46 | if (*(UINTN *)S3DebugBuffer != (UINTN) -1) {\r | |
68cc1ba3 SZ |
47 | IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)(IdtDescriptor->Base + (3 * sizeof (IA32_IDT_GATE_DESCRIPTOR)));\r |
48 | IdtEntry->Bits.OffsetLow = (UINT16)S3DebugBuffer;\r | |
49 | IdtEntry->Bits.Selector = (UINT16)AsmReadCs ();\r | |
50 | IdtEntry->Bits.Reserved_0 = 0;\r | |
51 | IdtEntry->Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r | |
52 | IdtEntry->Bits.OffsetHigh = (UINT16)(S3DebugBuffer >> 16);\r | |
f4a25e81 | 53 | }\r |
54 | );\r | |
be46cd5f | 55 | }\r |
56 | \r |