EFI_STATUS EFIAPI CirrusLogic5430GraphicsOutputSetMode ( IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN UINT32 ModeNumber ) /*++ Routine Description: Graphics Output protocol interface to set video mode Arguments: This - Protocol instance pointer. ModeNumber - The mode number to be set. Returns: EFI_SUCCESS - Graphics mode was changed. EFI_DEVICE_ERROR - The device had an error and could not complete the request. EFI_UNSUPPORTED - ModeNumber is not supported by this device. --*/ { CIRRUS_LOGIC_5430_PRIVATE_DATA *Private; CIRRUS_LOGIC_5430_MODE_DATA *ModeData; Private = CIRRUS_LOGIC_5430_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This); if (ModeNumber >= This->Mode->MaxMode) { return EFI_UNSUPPORTED; } ModeData = &Private->ModeData[ModeNumber]; if (Private->LineBuffer) { gBS->FreePool (Private->LineBuffer); } Private->LineBuffer = NULL; Private->LineBuffer = AllocatePool (ModeData->HorizontalResolution); if (Private->LineBuffer == NULL) { return EFI_OUT_OF_RESOURCES; } InitializeGraphicsMode (Private, &CirrusLogic5430VideoModes[ModeData->ModeNumber]); This->Mode->Mode = ModeNumber; This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution; This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); CirrusLogic5430CompleteModeData (Private, This->Mode); Private->HardwareNeedsStarting = FALSE; return EFI_SUCCESS; }
EFI_STATUS EFIAPI CirrusLogic5430UgaDrawSetMode ( IN EFI_UGA_DRAW_PROTOCOL *This, IN UINT32 HorizontalResolution, IN UINT32 VerticalResolution, IN UINT32 ColorDepth, IN UINT32 RefreshRate ) { CIRRUS_LOGIC_5430_PRIVATE_DATA *Private; UINTN Index; Private = CIRRUS_LOGIC_5430_PRIVATE_DATA_FROM_UGA_DRAW_THIS (This); for (Index = 0; Index < Private->MaxMode; Index++) { if (HorizontalResolution != Private->ModeData[Index].HorizontalResolution) { continue; } if (VerticalResolution != Private->ModeData[Index].VerticalResolution) { continue; } if (ColorDepth != Private->ModeData[Index].ColorDepth) { continue; } if (RefreshRate != Private->ModeData[Index].RefreshRate) { continue; } if (Private->LineBuffer) { gBS->FreePool (Private->LineBuffer); } Private->LineBuffer = NULL; Private->LineBuffer = AllocatePool (HorizontalResolution); if (Private->LineBuffer == NULL) { return EFI_OUT_OF_RESOURCES; } InitializeGraphicsMode (Private, &CirrusLogic5430VideoModes[Private->ModeData[Index].ModeNumber]); Private->CurrentMode = Index; Private->HardwareNeedsStarting = FALSE; return EFI_SUCCESS; } return EFI_NOT_FOUND; }
EFI_STATUS EFIAPI VBoxVgaGraphicsOutputSetMode ( IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This, IN UINT32 ModeNumber ) /*++ Routine Description: Graphics Output protocol interface to set video mode Arguments: This - Protocol instance pointer. ModeNumber - The mode number to be set. Returns: EFI_SUCCESS - Graphics mode was changed. EFI_DEVICE_ERROR - The device had an error and could not complete the request. EFI_UNSUPPORTED - ModeNumber is not supported by this device. --*/ { VBOX_VGA_PRIVATE_DATA *Private; VBOX_VGA_MODE_DATA *ModeData; Private = VBOX_VGA_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (This); DEBUG((DEBUG_INFO, "%a:%d mode:%d\n", __FILE__, __LINE__, ModeNumber)); if (ModeNumber >= This->Mode->MaxMode) { return EFI_UNSUPPORTED; } ModeData = &Private->ModeData[ModeNumber]; InitializeGraphicsMode (Private, &VBoxVgaVideoModes[ModeData->ModeNumber]); This->Mode->Mode = ModeNumber; This->Mode->Info->HorizontalResolution = ModeData->HorizontalResolution; This->Mode->Info->VerticalResolution = ModeData->VerticalResolution; This->Mode->SizeOfInfo = sizeof(EFI_GRAPHICS_OUTPUT_MODE_INFORMATION); VBoxVgaCompleteModeData (Private, This->Mode); Private->HardwareNeedsStarting = FALSE; /* update current mode */ Private->CurrentMode = ModeNumber; return EFI_SUCCESS; }
EFI_STATUS EFIAPI VBoxVgaUgaDrawSetMode ( IN EFI_UGA_DRAW_PROTOCOL *This, IN UINT32 HorizontalResolution, IN UINT32 VerticalResolution, IN UINT32 ColorDepth, IN UINT32 RefreshRate ) { VBOX_VGA_PRIVATE_DATA *Private; UINTN Index; DEBUG((DEBUG_INFO, "%a:%d VIDEO: %dx%d %d bpp\n", __FILE__, __LINE__, HorizontalResolution, VerticalResolution, ColorDepth)); Private = VBOX_VGA_PRIVATE_DATA_FROM_UGA_DRAW_THIS (This); for (Index = 0; Index < Private->MaxMode; Index++) { if (HorizontalResolution != Private->ModeData[Index].HorizontalResolution) { continue; } if (VerticalResolution != Private->ModeData[Index].VerticalResolution) { continue; } if (ColorDepth != Private->ModeData[Index].ColorDepth) { continue; } #if 0 if (RefreshRate != Private->ModeData[Index].RefreshRate) { continue; } #endif if (Private->LineBuffer) { gBS->FreePool (Private->LineBuffer); } Private->LineBuffer = NULL; Private->LineBuffer = AllocatePool (HorizontalResolution * 4); if (Private->LineBuffer == NULL) { return EFI_OUT_OF_RESOURCES; } InitializeGraphicsMode (Private, &VBoxVgaVideoModes[Private->ModeData[Index].ModeNumber]); if (Private->TmpBuf) FreePool(Private->TmpBuf); Private->TmpBuf = AllocatePool(Private->ModeData[Index].HorizontalResolution * Private->ModeData[Index].VerticalResolution * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)); Private->CurrentMode = Index; Private->HardwareNeedsStarting = FALSE; /* update current mode */ Private->CurrentMode = Index; return EFI_SUCCESS; } return EFI_NOT_FOUND; }