27 IN EFI_FILE_PROTOCOL *Root
31 EFI_GRAPHICS_OUTPUT_PROTOCOL *Gop;
32 MTRR_MEMORY_CACHE_TYPE MtrrCacheType;
34 EFI_VIRTUAL_ADDRESS VirtualAddress;
35 EFI_PHYSICAL_ADDRESS PhysicalAddress;
37 UINTN FrameBufferSize;
45 BOOLEAN HasDefaultPat;
49 CHAR16 TmpFileName[32];
53 Status =
gBS->HandleProtocol (
54 gST->ConsoleOutHandle,
59 if (EFI_ERROR (Status)) {
60 DEBUG ((DEBUG_INFO,
"OCC: No console GOP found for dumping - %r\n", Status));
64 FileBufferSize = SIZE_1KB;
65 FileBuffer = AllocateZeroPool (FileBufferSize);
66 if (FileBuffer == NULL) {
67 return EFI_OUT_OF_RESOURCES;
72 if ((Gop->Mode == NULL) || (Gop->Mode->Info == NULL)) {
76 "INVALID GOP %p %p!\n",
78 (Gop->Mode != NULL) ? Gop->Mode->Info : NULL
80 Status = EFI_UNSUPPORTED;
83 if (!EFI_ERROR (Status)) {
87 "GOP INFO %u(%u)x%u fmt %u\n",
88 Gop->Mode->Info->HorizontalResolution,
89 Gop->Mode->Info->PixelsPerScanLine,
90 Gop->Mode->Info->VerticalResolution,
91 Gop->Mode->Info->PixelFormat
94 if (Gop->Mode->Info->PixelFormat == PixelBitMask) {
98 "GOP pix mask 0x%X:0x%X:0x%X:0x%X\n",
99 Gop->Mode->Info->PixelInformation.RedMask,
100 Gop->Mode->Info->PixelInformation.GreenMask,
101 Gop->Mode->Info->PixelInformation.BlueMask,
102 Gop->Mode->Info->PixelInformation.ReservedMask
109 "GOP FB 0x%LX[0x%X]\n",
110 Gop->Mode->FrameBufferBase,
111 Gop->Mode->FrameBufferSize
123 if (!EFI_ERROR (Status)) {
128 "GOP FBS 0x%X%a - %r\n",
130 (Gop->Mode->FrameBufferSize != FrameBufferSize) ?
" (FBS mismatch! Using this.)" :
"",
136 if (!EFI_ERROR (Status)) {
137 HasMtrr = IsMtrrSupported ();
143 "MTRR %asupported PAT %asupported\n",
144 HasMtrr ?
"" :
"not ",
156 "PAT 0x%016LX (%a)\n",
158 HasDefaultPat ?
"default" :
"not default!"
164 VirtualAddress = Gop->Mode->FrameBufferBase;
165 EndAddress = VirtualAddress + FrameBufferSize;
167 Status = EFI_SUCCESS;
170 MtrrCacheType = MtrrGetMemoryAttribute (VirtualAddress);
183 if (EFI_ERROR (Status)) {
190 "0x%LX~0x%LX MTRR %u=%a PTE%u bits 0x%016LX PAT@%u->%u=%a\n",
202 if (VirtualAddress != PhysicalAddress) {
203 Status = EFI_UNSUPPORTED;
212 "0x%LX MTRR %u=%a\n",
221 VirtualAddress += SIZE_1GB;
225 VirtualAddress += SIZE_2MB;
229 VirtualAddress += SIZE_4KB;
233 Status = EFI_UNSUPPORTED;
236 }
while (!EFI_ERROR (Status) && VirtualAddress <
EndAddress);
239 if (EFI_ERROR (Status)) {
243 "Failure reading page table! - %r\n",
252 if (FileBuffer != NULL) {
253 UnicodeSPrint (TmpFileName,
sizeof (TmpFileName), L
"GOPInfo.txt");
254 Status =
OcSetFileData (Root, TmpFileName, FileBuffer, (UINT32)AsciiStrLen (FileBuffer));
255 DEBUG ((DEBUG_INFO,
"OCC: Dumped GOP cache info - %r\n", Status));
257 FreePool (FileBuffer);
EFI_STATUS OcGetSetPageTableInfoForAddress(IN PAGE_MAP_AND_DIRECTORY_POINTER *PageTable OPTIONAL, IN EFI_VIRTUAL_ADDRESS VirtualAddr, OUT EFI_PHYSICAL_ADDRESS *PhysicalAddr OPTIONAL, OUT UINT8 *Level OPTIONAL, OUT UINT64 *Bits OPTIONAL, IN OUT PAT_INDEX *PatIndex OPTIONAL, IN BOOLEAN SetPat)