\r
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
\r
- 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
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
-#include <IndustryStandard/VmwareSvga.h>\r
#include "Qemu.h"\r
\r
STATIC\r
VOID\r
QemuVideoCompleteModeInfo (\r
- IN QEMU_VIDEO_MODE_DATA *ModeData,\r
+ IN QEMU_VIDEO_MODE_DATA *ModeData,\r
OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info\r
)\r
{\r
Info->Version = 0;\r
if (ModeData->ColorDepth == 8) {\r
- Info->PixelFormat = PixelBitMask;\r
- Info->PixelInformation.RedMask = PIXEL_RED_MASK;\r
- Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK;\r
- Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK;\r
+ Info->PixelFormat = PixelBitMask;\r
+ Info->PixelInformation.RedMask = PIXEL_RED_MASK;\r
+ Info->PixelInformation.GreenMask = PIXEL_GREEN_MASK;\r
+ Info->PixelInformation.BlueMask = PIXEL_BLUE_MASK;\r
Info->PixelInformation.ReservedMask = 0;\r
} else if (ModeData->ColorDepth == 24) {\r
- Info->PixelFormat = PixelBitMask;\r
- Info->PixelInformation.RedMask = PIXEL24_RED_MASK;\r
- Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK;\r
- Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK;\r
+ Info->PixelFormat = PixelBitMask;\r
+ Info->PixelInformation.RedMask = PIXEL24_RED_MASK;\r
+ Info->PixelInformation.GreenMask = PIXEL24_GREEN_MASK;\r
+ Info->PixelInformation.BlueMask = PIXEL24_BLUE_MASK;\r
Info->PixelInformation.ReservedMask = 0;\r
} else if (ModeData->ColorDepth == 32) {\r
- DEBUG ((EFI_D_INFO, "PixelBlueGreenRedReserved8BitPerColor\n"));\r
+ DEBUG ((DEBUG_INFO, "PixelBlueGreenRedReserved8BitPerColor\n"));\r
Info->PixelFormat = PixelBlueGreenRedReserved8BitPerColor;\r
}\r
+\r
Info->PixelsPerScanLine = Info->HorizontalResolution;\r
}\r
\r
-\r
STATIC\r
EFI_STATUS\r
QemuVideoCompleteModeData (\r
- IN QEMU_VIDEO_PRIVATE_DATA *Private,\r
- OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode\r
+ IN QEMU_VIDEO_PRIVATE_DATA *Private,\r
+ OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode\r
)\r
{\r
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc;\r
- QEMU_VIDEO_MODE_DATA *ModeData;\r
+ QEMU_VIDEO_MODE_DATA *ModeData;\r
\r
ModeData = &Private->ModeData[Mode->Mode];\r
- Info = Mode->Info;\r
+ Info = Mode->Info;\r
QemuVideoCompleteModeInfo (ModeData, Info);\r
\r
Private->PciIo->GetBarAttributes (\r
- Private->PciIo,\r
- 0,\r
- NULL,\r
- (VOID**) &FrameBufDesc\r
- );\r
+ Private->PciIo,\r
+ Private->FrameBufferVramBarIndex,\r
+ NULL,\r
+ (VOID **)&FrameBufDesc\r
+ );\r
\r
Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin;\r
Mode->FrameBufferSize = Info->HorizontalResolution * Info->VerticalResolution;\r
Mode->FrameBufferSize = Mode->FrameBufferSize * ((ModeData->ColorDepth + 7) / 8);\r
- DEBUG ((EFI_D_INFO, "FrameBufferBase: 0x%Lx, FrameBufferSize: 0x%Lx\n",\r
- Mode->FrameBufferBase, (UINT64)Mode->FrameBufferSize));\r
+ Mode->FrameBufferSize = EFI_PAGES_TO_SIZE (\r
+ EFI_SIZE_TO_PAGES (Mode->FrameBufferSize)\r
+ );\r
+ DEBUG ((\r
+ DEBUG_INFO,\r
+ "FrameBufferBase: 0x%Lx, FrameBufferSize: 0x%Lx\n",\r
+ Mode->FrameBufferBase,\r
+ (UINT64)Mode->FrameBufferSize\r
+ ));\r
\r
FreePool (FrameBufDesc);\r
return EFI_SUCCESS;\r
}\r
\r
-STATIC\r
-EFI_STATUS\r
-QemuVideoVmwareSvgaCompleteModeData (\r
- IN QEMU_VIDEO_PRIVATE_DATA *Private,\r
- OUT EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode\r
- )\r
-{\r
- EFI_STATUS Status;\r
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;\r
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *FrameBufDesc;\r
- UINT32 BytesPerLine, FbOffset, BytesPerPixel;\r
-\r
- Info = Mode->Info;\r
- CopyMem (Info, &Private->VmwareSvgaModeInfo[Mode->Mode], sizeof (*Info));\r
- BytesPerPixel = Private->ModeData[Mode->Mode].ColorDepth / 8;\r
- BytesPerLine = Info->PixelsPerScanLine * BytesPerPixel;\r
-\r
- FbOffset = VmwareSvgaRead (Private, VmwareSvgaRegFbOffset);\r
-\r
- Status = Private->PciIo->GetBarAttributes (\r
- Private->PciIo,\r
- PCI_BAR_IDX1,\r
- NULL,\r
- (VOID**) &FrameBufDesc\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return EFI_DEVICE_ERROR;\r
- }\r
-\r
- Mode->FrameBufferBase = FrameBufDesc->AddrRangeMin + FbOffset;\r
- Mode->FrameBufferSize = BytesPerLine * Info->VerticalResolution;\r
-\r
- FreePool (FrameBufDesc);\r
- return Status;\r
-}\r
-\r
-\r
//\r
// Graphics Output Protocol Member Functions\r
//\r
OUT UINTN *SizeOfInfo,\r
OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info\r
)\r
+\r
/*++\r
\r
Routine Description:\r
\r
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);\r
\r
- if (Info == NULL || SizeOfInfo == NULL || ModeNumber >= This->Mode->MaxMode) {\r
+ if ((Info == NULL) || (SizeOfInfo == NULL) || (ModeNumber >= This->Mode->MaxMode)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
\r
*SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
\r
- if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {\r
- CopyMem (*Info, &Private->VmwareSvgaModeInfo[ModeNumber], sizeof (**Info));\r
- } else {\r
- ModeData = &Private->ModeData[ModeNumber];\r
- (*Info)->HorizontalResolution = ModeData->HorizontalResolution;\r
- (*Info)->VerticalResolution = ModeData->VerticalResolution;\r
- QemuVideoCompleteModeInfo (ModeData, *Info);\r
- }\r
+ ModeData = &Private->ModeData[ModeNumber];\r
+ (*Info)->HorizontalResolution = ModeData->HorizontalResolution;\r
+ (*Info)->VerticalResolution = ModeData->VerticalResolution;\r
+ QemuVideoCompleteModeInfo (ModeData, *Info);\r
\r
return EFI_SUCCESS;\r
}\r
EFI_STATUS\r
EFIAPI\r
QemuVideoGraphicsOutputSetMode (\r
- IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
- IN UINT32 ModeNumber\r
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
+ IN UINT32 ModeNumber\r
)\r
+\r
/*++\r
\r
Routine Description:\r
\r
--*/\r
{\r
- QEMU_VIDEO_PRIVATE_DATA *Private;\r
- QEMU_VIDEO_MODE_DATA *ModeData;\r
- RETURN_STATUS Status;\r
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black;\r
+ QEMU_VIDEO_PRIVATE_DATA *Private;\r
+ QEMU_VIDEO_MODE_DATA *ModeData;\r
+ RETURN_STATUS Status;\r
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL Black;\r
\r
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);\r
\r
ModeData = &Private->ModeData[ModeNumber];\r
\r
switch (Private->Variant) {\r
- case QEMU_VIDEO_CIRRUS_5430:\r
- case QEMU_VIDEO_CIRRUS_5446:\r
- InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]);\r
- break;\r
- case QEMU_VIDEO_BOCHS_MMIO:\r
- case QEMU_VIDEO_BOCHS:\r
- InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);\r
- break;\r
- case QEMU_VIDEO_VMWARE_SVGA:\r
- InitializeVmwareSvgaGraphicsMode (\r
- Private,\r
- &QemuVideoBochsModes[ModeData->InternalModeIndex]\r
- );\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
- return EFI_DEVICE_ERROR;\r
+ case QEMU_VIDEO_CIRRUS_5430:\r
+ case QEMU_VIDEO_CIRRUS_5446:\r
+ InitializeCirrusGraphicsMode (Private, &QemuVideoCirrusModes[ModeData->InternalModeIndex]);\r
+ break;\r
+ case QEMU_VIDEO_BOCHS_MMIO:\r
+ case QEMU_VIDEO_BOCHS:\r
+ InitializeBochsGraphicsMode (Private, &QemuVideoBochsModes[ModeData->InternalModeIndex]);\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ return EFI_DEVICE_ERROR;\r
}\r
\r
- This->Mode->Mode = ModeNumber;\r
+ This->Mode->Mode = ModeNumber;\r
This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution;\r
- This->Mode->Info->VerticalResolution = ModeData->VerticalResolution;\r
- This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
+ This->Mode->Info->VerticalResolution = ModeData->VerticalResolution;\r
+ This->Mode->SizeOfInfo = sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION);\r
\r
- if (Private->Variant == QEMU_VIDEO_VMWARE_SVGA) {\r
- QemuVideoVmwareSvgaCompleteModeData (Private, This->Mode);\r
- } else {\r
- QemuVideoCompleteModeData (Private, This->Mode);\r
- }\r
+ QemuVideoCompleteModeData (Private, This->Mode);\r
\r
//\r
// Re-initialize the frame buffer configure when mode changes.\r
//\r
Status = FrameBufferBltConfigure (\r
- (VOID*) (UINTN) This->Mode->FrameBufferBase,\r
+ (VOID *)(UINTN)This->Mode->FrameBufferBase,\r
This->Mode->Info,\r
Private->FrameBufferBltConfigure,\r
&Private->FrameBufferBltConfigureSize\r
if (Private->FrameBufferBltConfigure != NULL) {\r
FreePool (Private->FrameBufferBltConfigure);\r
}\r
+\r
Private->FrameBufferBltConfigure =\r
AllocatePool (Private->FrameBufferBltConfigureSize);\r
ASSERT (Private->FrameBufferBltConfigure != NULL);\r
// Create the configuration for FrameBufferBltLib\r
//\r
Status = FrameBufferBltConfigure (\r
- (VOID*) (UINTN) This->Mode->FrameBufferBase,\r
- This->Mode->Info,\r
- Private->FrameBufferBltConfigure,\r
- &Private->FrameBufferBltConfigureSize\r
- );\r
+ (VOID *)(UINTN)This->Mode->FrameBufferBase,\r
+ This->Mode->Info,\r
+ Private->FrameBufferBltConfigure,\r
+ &Private->FrameBufferBltConfigureSize\r
+ );\r
}\r
+\r
ASSERT (Status == RETURN_SUCCESS);\r
\r
//\r
Private->FrameBufferBltConfigure,\r
&Black,\r
EfiBltVideoFill,\r
- 0, 0,\r
- 0, 0,\r
- This->Mode->Info->HorizontalResolution, This->Mode->Info->VerticalResolution,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ This->Mode->Info->HorizontalResolution,\r
+ This->Mode->Info->VerticalResolution,\r
0\r
);\r
ASSERT_RETURN_ERROR (Status);\r
EFI_STATUS\r
EFIAPI\r
QemuVideoGraphicsOutputBlt (\r
- IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
- IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL\r
- IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,\r
- IN UINTN SourceX,\r
- IN UINTN SourceY,\r
- IN UINTN DestinationX,\r
- IN UINTN DestinationY,\r
- IN UINTN Width,\r
- IN UINTN Height,\r
- IN UINTN Delta\r
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,\r
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer OPTIONAL,\r
+ IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,\r
+ IN UINTN SourceX,\r
+ IN UINTN SourceY,\r
+ IN UINTN DestinationX,\r
+ IN UINTN DestinationY,\r
+ IN UINTN Width,\r
+ IN UINTN Height,\r
+ IN UINTN Delta\r
)\r
+\r
/*++\r
\r
Routine Description:\r
\r
--*/\r
{\r
- EFI_STATUS Status;\r
- EFI_TPL OriginalTPL;\r
- QEMU_VIDEO_PRIVATE_DATA *Private;\r
+ EFI_STATUS Status;\r
+ EFI_TPL OriginalTPL;\r
+ QEMU_VIDEO_PRIVATE_DATA *Private;\r
\r
Private = QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This);\r
//\r
OriginalTPL = gBS->RaiseTPL (TPL_NOTIFY);\r
\r
switch (BltOperation) {\r
- case EfiBltVideoToBltBuffer:\r
- case EfiBltBufferToVideo:\r
- case EfiBltVideoFill:\r
- case EfiBltVideoToVideo:\r
- Status = FrameBufferBlt (\r
- Private->FrameBufferBltConfigure,\r
- BltBuffer,\r
- BltOperation,\r
- SourceX,\r
- SourceY,\r
- DestinationX,\r
- DestinationY,\r
- Width,\r
- Height,\r
- Delta\r
- );\r
- break;\r
-\r
- default:\r
- Status = EFI_INVALID_PARAMETER;\r
- break;\r
+ case EfiBltVideoToBltBuffer:\r
+ case EfiBltBufferToVideo:\r
+ case EfiBltVideoFill:\r
+ case EfiBltVideoToVideo:\r
+ Status = FrameBufferBlt (\r
+ Private->FrameBufferBltConfigure,\r
+ BltBuffer,\r
+ BltOperation,\r
+ SourceX,\r
+ SourceY,\r
+ DestinationX,\r
+ DestinationY,\r
+ Width,\r
+ Height,\r
+ Delta\r
+ );\r
+ break;\r
+\r
+ default:\r
+ Status = EFI_INVALID_PARAMETER;\r
+ break;\r
}\r
\r
gBS->RestoreTPL (OriginalTPL);\r
QEMU_VIDEO_PRIVATE_DATA *Private\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
-\r
+ EFI_STATUS Status;\r
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *GraphicsOutput;\r
\r
GraphicsOutput = &Private->GraphicsOutput;\r
GraphicsOutput->QueryMode = QemuVideoGraphicsOutputQueryMode;\r
Status = gBS->AllocatePool (\r
EfiBootServicesData,\r
sizeof (EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE),\r
- (VOID **) &Private->GraphicsOutput.Mode\r
+ (VOID **)&Private->GraphicsOutput.Mode\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
Status = gBS->AllocatePool (\r
EfiBootServicesData,\r
sizeof (EFI_GRAPHICS_OUTPUT_MODE_INFORMATION),\r
- (VOID **) &Private->GraphicsOutput.Mode->Info\r
+ (VOID **)&Private->GraphicsOutput.Mode->Info\r
);\r
if (EFI_ERROR (Status)) {\r
goto FreeMode;\r
}\r
- Private->GraphicsOutput.Mode->MaxMode = (UINT32) Private->MaxMode;\r
+\r
+ Private->GraphicsOutput.Mode->MaxMode = (UINT32)Private->MaxMode;\r
Private->GraphicsOutput.Mode->Mode = GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER;\r
Private->FrameBufferBltConfigure = NULL;\r
Private->FrameBufferBltConfigureSize = 0;\r
QemuVideoGraphicsOutputDestructor (\r
QEMU_VIDEO_PRIVATE_DATA *Private\r
)\r
+\r
/*++\r
\r
Routine Description:\r
if (Private->GraphicsOutput.Mode->Info != NULL) {\r
gBS->FreePool (Private->GraphicsOutput.Mode->Info);\r
}\r
+\r
gBS->FreePool (Private->GraphicsOutput.Mode);\r
}\r
\r
return EFI_SUCCESS;\r
}\r
-\r
-\r