QemuVideo: prepare to support more hardware

Move to a table-driven hardware detection.  Add a table with PCI IDs,
card name and variant enum.  Use the table for hardware detection and
initialization.  Rename Cirrus-specific data and code to carry "cirrus"
in the name.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13967 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jljusten
2012-11-27 19:11:11 +00:00
parent 8e4585bb6c
commit 212aac55fd
5 changed files with 133 additions and 64 deletions

View File

@@ -143,7 +143,7 @@ UINT16 Seq_1024_768_32bpp_60[15] = {
///
/// Table of supported video modes
///
QEMU_VIDEO_VIDEO_MODES QemuVideoVideoModes[] = {
QEMU_VIDEO_CIRRUS_MODES QemuVideoCirrusModes[] = {
// { 640, 480, 8, 60, Crtc_640_480_256_60, Seq_640_480_256_60, 0xe3 },
// { 800, 600, 8, 60, Crtc_800_600_256_60, Seq_800_600_256_60, 0xef },
{ 640, 480, 32, 60, Crtc_640_480_32bpp_60, Seq_640_480_32bpp_60, 0xef },
@@ -154,38 +154,38 @@ QEMU_VIDEO_VIDEO_MODES QemuVideoVideoModes[] = {
// { 960, 720, 32, 60, Crtc_960_720_32bpp_60, Seq_1024_768_32bpp_60, 0xef }
};
#define QEMU_VIDEO_MODE_COUNT \
(sizeof (QemuVideoVideoModes) / sizeof (QemuVideoVideoModes[0]))
#define QEMU_VIDEO_CIRRUS_MODE_COUNT \
(sizeof (QemuVideoCirrusModes) / sizeof (QemuVideoCirrusModes[0]))
/**
Construct the valid video modes for QemuVideo.
**/
EFI_STATUS
QemuVideoVideoModeSetup (
QemuVideoCirrusModeSetup (
QEMU_VIDEO_PRIVATE_DATA *Private
)
{
UINT32 Index;
QEMU_VIDEO_MODE_DATA *ModeData;
QEMU_VIDEO_VIDEO_MODES *VideoMode;
QEMU_VIDEO_CIRRUS_MODES *VideoMode;
//
// Setup Video Modes
//
Private->ModeData = AllocatePool (
sizeof (Private->ModeData[0]) * QEMU_VIDEO_MODE_COUNT
sizeof (Private->ModeData[0]) * QEMU_VIDEO_CIRRUS_MODE_COUNT
);
ModeData = Private->ModeData;
VideoMode = &QemuVideoVideoModes[0];
for (Index = 0; Index < QEMU_VIDEO_MODE_COUNT; Index ++) {
VideoMode = &QemuVideoCirrusModes[0];
for (Index = 0; Index < QEMU_VIDEO_CIRRUS_MODE_COUNT; Index ++) {
ModeData->ModeNumber = Index;
ModeData->HorizontalResolution = VideoMode->Width;
ModeData->VerticalResolution = VideoMode->Height;
ModeData->ColorDepth = VideoMode->ColorDepth;
ModeData->RefreshRate = VideoMode->RefreshRate;
DEBUG ((EFI_D_INFO,
"Adding Video Mode %d: %dx%d, %d-bit, %d Hz\n",
"Adding Cirrus Video Mode %d: %dx%d, %d-bit, %d Hz\n",
ModeData->ModeNumber,
ModeData->HorizontalResolution,
ModeData->VerticalResolution,
@@ -196,7 +196,7 @@ QemuVideoVideoModeSetup (
ModeData ++ ;
VideoMode ++;
}
Private->MaxMode = QEMU_VIDEO_MODE_COUNT;
Private->MaxMode = QEMU_VIDEO_CIRRUS_MODE_COUNT;
return EFI_SUCCESS;
}