2 Cirrus Logic 5430 Controller Driver.
3 This driver is a sample implementation of the UGA Draw and Graphics Output
4 Protocols for the Cirrus Logic 5430 family of PCI video controllers.
5 This driver is only usable in the EFI pre-boot environment.
6 This sample is intended to show how the UGA Draw and Graphics output Protocol
8 The UGA I/O Protocol is not implemented in this sample.
9 A fully compliant EFI UGA driver requires both
10 the UGA Draw and the UGA I/O Protocol. Please refer to Microsoft's
11 documentation on UGA for details on how to write a UGA driver that is able
12 to function both in the EFI pre-boot environment and from the OS runtime.
14 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
15 This program and the accompanying materials
16 are licensed and made available under the terms and conditions of the BSD License
17 which accompanies this distribution. The full text of the license may be found at
18 http://opensource.org/licenses/bsd-license.php
20 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
21 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
26 // Cirrus Logic 5430 Controller Driver
28 #include "CirrusLogic5430.h"
30 EFI_DRIVER_BINDING_PROTOCOL gCirrusLogic5430DriverBinding
= {
31 CirrusLogic5430ControllerDriverSupported
,
32 CirrusLogic5430ControllerDriverStart
,
33 CirrusLogic5430ControllerDriverStop
,
40 /// Generic Attribute Controller Register Settings
42 UINT8 AttributeController
[21] = {
43 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
44 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
45 0x41, 0x00, 0x0F, 0x00, 0x00
49 /// Generic Graphics Controller Register Settings
51 UINT8 GraphicsController
[9] = {
52 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F, 0xFF
56 // 640 x 480 x 256 color @ 60 Hertz
58 UINT8 Crtc_640_480_256_60
[28] = {
59 0x5d, 0x4f, 0x50, 0x82, 0x53, 0x9f, 0x00, 0x3e,
60 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
61 0xe1, 0x83, 0xdf, 0x50, 0x00, 0xe7, 0x04, 0xe3,
62 0xff, 0x00, 0x00, 0x22
65 UINT16 Seq_640_480_256_60
[15] = {
66 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b,
67 0x5b0c, 0x450d, 0x7e0e, 0x2b1b, 0x2f1c, 0x301d, 0x331e
71 // 800 x 600 x 256 color @ 60 Hertz
73 UINT8 Crtc_800_600_256_60
[28] = {
74 0x7F, 0x63, 0x64, 0x80, 0x6B, 0x1B, 0x72, 0xF0,
75 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
76 0x58, 0x8C, 0x57, 0x64, 0x00, 0x5F, 0x91, 0xE3,
77 0xFF, 0x00, 0x00, 0x22
80 UINT16 Seq_800_600_256_60
[15] = {
81 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b,
82 0x5b0c, 0x450d, 0x510e, 0x2b1b, 0x2f1c, 0x301d, 0x3a1e
86 // 1024 x 768 x 256 color @ 60 Hertz
88 UINT8 Crtc_1024_768_256_60
[28] = {
89 0xA3, 0x7F, 0x80, 0x86, 0x85, 0x96, 0x24, 0xFD,
90 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91 0x02, 0x88, 0xFF, 0x80, 0x00, 0x00, 0x24, 0xE3,
92 0xFF, 0x4A, 0x00, 0x22
95 UINT16 Seq_1024_768_256_60
[15] = {
96 0x0100, 0x0101, 0x0f02, 0x0003, 0x0e04, 0x1107, 0x0008, 0x4a0b,
97 0x5b0c, 0x450d, 0x760e, 0x2b1b, 0x2f1c, 0x301d, 0x341e
101 /// Table of supported video modes
103 CIRRUS_LOGIC_5430_VIDEO_MODES CirrusLogic5430VideoModes
[] = {
104 { 640, 480, 8, 60, Crtc_640_480_256_60
, Seq_640_480_256_60
, 0xe3 },
105 { 800, 600, 8, 60, Crtc_800_600_256_60
, Seq_800_600_256_60
, 0xef },
106 { 1024, 768, 8, 60, Crtc_1024_768_256_60
, Seq_1024_768_256_60
, 0xef }
111 CirrusLogic5430ControllerDriverSupported
113 TODO: This - add argument and description to function comment
114 TODO: Controller - add argument and description to function comment
115 TODO: RemainingDevicePath - add argument and description to function comment
119 CirrusLogic5430ControllerDriverSupported (
120 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
121 IN EFI_HANDLE Controller
,
122 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
126 EFI_PCI_IO_PROTOCOL
*PciIo
;
131 // Open the PCI I/O Protocol
133 Status
= gBS
->OpenProtocol (
135 &gEfiPciIoProtocolGuid
,
137 This
->DriverBindingHandle
,
139 EFI_OPEN_PROTOCOL_BY_DRIVER
141 if (EFI_ERROR (Status
)) {
146 // Read the PCI Configuration Header from the PCI Device
148 Status
= PciIo
->Pci
.Read (
152 sizeof (Pci
) / sizeof (UINT32
),
155 if (EFI_ERROR (Status
)) {
159 Status
= EFI_UNSUPPORTED
;
161 // See if the I/O enable is on. Most systems only allow one VGA device to be turned on
162 // at a time, so see if this is one that is turned on.
164 // if (((Pci.Hdr.Command & 0x01) == 0x01)) {
166 // See if this is a Cirrus Logic PCI controller
168 if (Pci
.Hdr
.VendorId
== CIRRUS_LOGIC_VENDOR_ID
) {
170 // See if this is a 5430 or a 5446 PCI controller
172 if (Pci
.Hdr
.DeviceId
== CIRRUS_LOGIC_5430_DEVICE_ID
||
173 Pci
.Hdr
.DeviceId
== CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID
||
174 Pci
.Hdr
.DeviceId
== CIRRUS_LOGIC_5446_DEVICE_ID
) {
176 Status
= EFI_SUCCESS
;
178 // If this is an Intel 945 graphics controller,
179 // go further check RemainingDevicePath validation
181 if (RemainingDevicePath
!= NULL
) {
182 Node
= (EFI_DEV_PATH
*) RemainingDevicePath
;
184 // Check if RemainingDevicePath is the End of Device Path Node,
185 // if yes, return EFI_SUCCESS
187 if (!IsDevicePathEnd (Node
)) {
189 // If RemainingDevicePath isn't the End of Device Path Node,
190 // check its validation
192 if (Node
->DevPath
.Type
!= ACPI_DEVICE_PATH
||
193 Node
->DevPath
.SubType
!= ACPI_ADR_DP
||
194 DevicePathNodeLength(&Node
->DevPath
) != sizeof(ACPI_ADR_DEVICE_PATH
)) {
195 Status
= EFI_UNSUPPORTED
;
204 // Close the PCI I/O Protocol
208 &gEfiPciIoProtocolGuid
,
209 This
->DriverBindingHandle
,
217 CirrusLogic5430ControllerDriverStart
219 TODO: This - add argument and description to function comment
220 TODO: Controller - add argument and description to function comment
221 TODO: RemainingDevicePath - add argument and description to function comment
225 CirrusLogic5430ControllerDriverStart (
226 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
227 IN EFI_HANDLE Controller
,
228 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
232 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
;
233 BOOLEAN PciAttributesSaved
;
234 EFI_DEVICE_PATH_PROTOCOL
*ParentDevicePath
;
235 ACPI_ADR_DEVICE_PATH AcpiDeviceNode
;
238 PciAttributesSaved
= FALSE
;
240 // Allocate Private context data for UGA Draw inteface.
242 Private
= AllocateZeroPool (sizeof (CIRRUS_LOGIC_5430_PRIVATE_DATA
));
243 if (Private
== NULL
) {
244 Status
= EFI_OUT_OF_RESOURCES
;
249 // Set up context record
251 Private
->Signature
= CIRRUS_LOGIC_5430_PRIVATE_DATA_SIGNATURE
;
252 Private
->Handle
= NULL
;
255 // Open PCI I/O Protocol
257 Status
= gBS
->OpenProtocol (
259 &gEfiPciIoProtocolGuid
,
260 (VOID
**) &Private
->PciIo
,
261 This
->DriverBindingHandle
,
263 EFI_OPEN_PROTOCOL_BY_DRIVER
265 if (EFI_ERROR (Status
)) {
270 // Get supported PCI attributes
272 Status
= Private
->PciIo
->Attributes (
274 EfiPciIoAttributeOperationSupported
,
278 if (EFI_ERROR (Status
)) {
282 Supports
&= (EFI_PCI_IO_ATTRIBUTE_VGA_IO
| EFI_PCI_IO_ATTRIBUTE_VGA_IO_16
);
283 if (Supports
== 0 || Supports
== (EFI_PCI_IO_ATTRIBUTE_VGA_IO
| EFI_PCI_IO_ATTRIBUTE_VGA_IO_16
)) {
284 Status
= EFI_UNSUPPORTED
;
289 // Save original PCI attributes
291 Status
= Private
->PciIo
->Attributes (
293 EfiPciIoAttributeOperationGet
,
295 &Private
->OriginalPciAttributes
298 if (EFI_ERROR (Status
)) {
301 PciAttributesSaved
= TRUE
;
303 Status
= Private
->PciIo
->Attributes (
305 EfiPciIoAttributeOperationEnable
,
306 EFI_PCI_DEVICE_ENABLE
| EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY
| Supports
,
309 if (EFI_ERROR (Status
)) {
314 // Get ParentDevicePath
316 Status
= gBS
->HandleProtocol (
318 &gEfiDevicePathProtocolGuid
,
319 (VOID
**) &ParentDevicePath
321 if (EFI_ERROR (Status
)) {
325 if (FeaturePcdGet (PcdSupportGop
)) {
327 // Set Gop Device Path
329 if (RemainingDevicePath
== NULL
) {
330 ZeroMem (&AcpiDeviceNode
, sizeof (ACPI_ADR_DEVICE_PATH
));
331 AcpiDeviceNode
.Header
.Type
= ACPI_DEVICE_PATH
;
332 AcpiDeviceNode
.Header
.SubType
= ACPI_ADR_DP
;
333 AcpiDeviceNode
.ADR
= ACPI_DISPLAY_ADR (1, 0, 0, 1, 0, ACPI_ADR_DISPLAY_TYPE_VGA
, 0, 0);
334 SetDevicePathNodeLength (&AcpiDeviceNode
.Header
, sizeof (ACPI_ADR_DEVICE_PATH
));
336 Private
->GopDevicePath
= AppendDevicePathNode (
338 (EFI_DEVICE_PATH_PROTOCOL
*) &AcpiDeviceNode
340 } else if (!IsDevicePathEnd (RemainingDevicePath
)) {
342 // If RemainingDevicePath isn't the End of Device Path Node,
343 // only scan the specified device by RemainingDevicePath
345 Private
->GopDevicePath
= AppendDevicePathNode (ParentDevicePath
, RemainingDevicePath
);
348 // If RemainingDevicePath is the End of Device Path Node,
349 // don't create child device and return EFI_SUCCESS
351 Private
->GopDevicePath
= NULL
;
354 if (Private
->GopDevicePath
!= NULL
) {
356 // Creat child handle and device path protocol firstly
358 Private
->Handle
= NULL
;
359 Status
= gBS
->InstallMultipleProtocolInterfaces (
361 &gEfiDevicePathProtocolGuid
,
362 Private
->GopDevicePath
,
369 // Construct video mode buffer
371 Status
= CirrusLogic5430VideoModeSetup (Private
);
372 if (EFI_ERROR (Status
)) {
376 if (FeaturePcdGet (PcdSupportUga
)) {
378 // Start the UGA Draw software stack.
380 Status
= CirrusLogic5430UgaDrawConstructor (Private
);
381 ASSERT_EFI_ERROR (Status
);
383 Private
->UgaDevicePath
= ParentDevicePath
;
384 Status
= gBS
->InstallMultipleProtocolInterfaces (
386 &gEfiUgaDrawProtocolGuid
,
388 &gEfiDevicePathProtocolGuid
,
389 Private
->UgaDevicePath
,
393 } else if (FeaturePcdGet (PcdSupportGop
)) {
394 if (Private
->GopDevicePath
== NULL
) {
396 // If RemainingDevicePath is the End of Device Path Node,
397 // don't create child device and return EFI_SUCCESS
399 Status
= EFI_SUCCESS
;
403 // Start the GOP software stack.
405 Status
= CirrusLogic5430GraphicsOutputConstructor (Private
);
406 ASSERT_EFI_ERROR (Status
);
408 Status
= gBS
->InstallMultipleProtocolInterfaces (
410 &gEfiGraphicsOutputProtocolGuid
,
411 &Private
->GraphicsOutput
,
412 &gEfiEdidDiscoveredProtocolGuid
,
413 &Private
->EdidDiscovered
,
414 &gEfiEdidActiveProtocolGuid
,
415 &Private
->EdidActive
,
421 // This driver must support eithor GOP or UGA or both.
424 Status
= EFI_UNSUPPORTED
;
429 if (EFI_ERROR (Status
)) {
431 if (Private
->PciIo
) {
432 if (PciAttributesSaved
== TRUE
) {
434 // Restore original PCI attributes
436 Private
->PciIo
->Attributes (
438 EfiPciIoAttributeOperationSet
,
439 Private
->OriginalPciAttributes
,
444 // Close the PCI I/O Protocol
448 &gEfiPciIoProtocolGuid
,
449 This
->DriverBindingHandle
,
454 gBS
->FreePool (Private
);
462 CirrusLogic5430ControllerDriverStop
464 TODO: This - add argument and description to function comment
465 TODO: Controller - add argument and description to function comment
466 TODO: NumberOfChildren - add argument and description to function comment
467 TODO: ChildHandleBuffer - add argument and description to function comment
468 TODO: EFI_SUCCESS - add return value to function comment
472 CirrusLogic5430ControllerDriverStop (
473 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
474 IN EFI_HANDLE Controller
,
475 IN UINTN NumberOfChildren
,
476 IN EFI_HANDLE
*ChildHandleBuffer
479 EFI_UGA_DRAW_PROTOCOL
*UgaDraw
;
480 EFI_GRAPHICS_OUTPUT_PROTOCOL
*GraphicsOutput
;
483 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
;
485 if (FeaturePcdGet (PcdSupportUga
)) {
486 Status
= gBS
->OpenProtocol (
488 &gEfiUgaDrawProtocolGuid
,
490 This
->DriverBindingHandle
,
492 EFI_OPEN_PROTOCOL_GET_PROTOCOL
494 if (EFI_ERROR (Status
)) {
498 // Get our private context information
500 Private
= CIRRUS_LOGIC_5430_PRIVATE_DATA_FROM_UGA_DRAW_THIS (UgaDraw
);
501 CirrusLogic5430UgaDrawDestructor (Private
);
503 if (FeaturePcdGet (PcdSupportGop
)) {
504 CirrusLogic5430GraphicsOutputDestructor (Private
);
506 // Remove the UGA and GOP protocol interface from the system
508 Status
= gBS
->UninstallMultipleProtocolInterfaces (
510 &gEfiUgaDrawProtocolGuid
,
512 &gEfiGraphicsOutputProtocolGuid
,
513 &Private
->GraphicsOutput
,
518 // Remove the UGA Draw interface from the system
520 Status
= gBS
->UninstallMultipleProtocolInterfaces (
522 &gEfiUgaDrawProtocolGuid
,
528 Status
= gBS
->OpenProtocol (
530 &gEfiGraphicsOutputProtocolGuid
,
531 (VOID
**) &GraphicsOutput
,
532 This
->DriverBindingHandle
,
534 EFI_OPEN_PROTOCOL_GET_PROTOCOL
536 if (EFI_ERROR (Status
)) {
541 // Get our private context information
543 Private
= CIRRUS_LOGIC_5430_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS (GraphicsOutput
);
545 CirrusLogic5430GraphicsOutputDestructor (Private
);
547 // Remove the GOP protocol interface from the system
549 Status
= gBS
->UninstallMultipleProtocolInterfaces (
551 &gEfiUgaDrawProtocolGuid
,
553 &gEfiGraphicsOutputProtocolGuid
,
554 &Private
->GraphicsOutput
,
559 if (EFI_ERROR (Status
)) {
564 // Restore original PCI attributes
566 Private
->PciIo
->Attributes (
568 EfiPciIoAttributeOperationSet
,
569 Private
->OriginalPciAttributes
,
574 // Close the PCI I/O Protocol
578 &gEfiPciIoProtocolGuid
,
579 This
->DriverBindingHandle
,
584 // Free our instance data
586 gBS
->FreePool (Private
);
592 CirrusLogic5430UgaDrawDestructor
594 TODO: Private - add argument and description to function comment
595 TODO: EFI_SUCCESS - add return value to function comment
598 CirrusLogic5430UgaDrawDestructor (
599 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
606 TODO: Add function description
608 @param Private TODO: add argument description
609 @param Address TODO: add argument description
610 @param Data TODO: add argument description
612 TODO: add return values
617 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
622 Private
->PciIo
->Io
.Write (
625 EFI_PCI_IO_PASS_THROUGH_BAR
,
633 TODO: Add function description
635 @param Private TODO: add argument description
636 @param Address TODO: add argument description
637 @param Data TODO: add argument description
639 TODO: add return values
644 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
649 Private
->PciIo
->Io
.Write (
652 EFI_PCI_IO_PASS_THROUGH_BAR
,
660 TODO: Add function description
662 @param Private TODO: add argument description
663 @param Address TODO: add argument description
665 TODO: add return values
670 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
676 Private
->PciIo
->Io
.Read (
679 EFI_PCI_IO_PASS_THROUGH_BAR
,
688 TODO: Add function description
690 @param Private TODO: add argument description
691 @param Address TODO: add argument description
693 TODO: add return values
698 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
704 Private
->PciIo
->Io
.Read (
707 EFI_PCI_IO_PASS_THROUGH_BAR
,
716 TODO: Add function description
718 @param Private TODO: add argument description
719 @param Index TODO: add argument description
720 @param Red TODO: add argument description
721 @param Green TODO: add argument description
722 @param Blue TODO: add argument description
724 TODO: add return values
729 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
736 outb (Private
, PALETTE_INDEX_REGISTER
, (UINT8
) Index
);
737 outb (Private
, PALETTE_DATA_REGISTER
, (UINT8
) (Red
>> 2));
738 outb (Private
, PALETTE_DATA_REGISTER
, (UINT8
) (Green
>> 2));
739 outb (Private
, PALETTE_DATA_REGISTER
, (UINT8
) (Blue
>> 2));
743 TODO: Add function description
745 @param Private TODO: add argument description
747 TODO: add return values
752 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
761 for (RedIndex
= 0; RedIndex
< 8; RedIndex
++) {
762 for (GreenIndex
= 0; GreenIndex
< 8; GreenIndex
++) {
763 for (BlueIndex
= 0; BlueIndex
< 4; BlueIndex
++) {
764 SetPaletteColor (Private
, Index
, (UINT8
) (RedIndex
<< 5), (UINT8
) (GreenIndex
<< 5), (UINT8
) (BlueIndex
<< 6));
772 TODO: Add function description
774 @param Private TODO: add argument description
776 TODO: add return values
781 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
787 Private
->PciIo
->Mem
.Write (
789 EfiPciIoWidthFillUint32
,
798 TODO: Add function description
800 @param Private TODO: add argument description
802 TODO: add return values
807 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
815 TODO: Add function description
817 @param Private TODO: add argument description
818 @param ModeData TODO: add argument description
820 TODO: add return values
824 InitializeGraphicsMode (
825 CIRRUS_LOGIC_5430_PRIVATE_DATA
*Private
,
826 CIRRUS_LOGIC_5430_VIDEO_MODES
*ModeData
834 Status
= Private
->PciIo
->Pci
.Read (
837 PCI_DEVICE_ID_OFFSET
,
842 // Read the PCI Configuration Header from the PCI Device
844 ASSERT_EFI_ERROR (Status
);
846 outw (Private
, SEQ_ADDRESS_REGISTER
, 0x1206);
847 outw (Private
, SEQ_ADDRESS_REGISTER
, 0x0012);
849 for (Index
= 0; Index
< 15; Index
++) {
850 outw (Private
, SEQ_ADDRESS_REGISTER
, ModeData
->SeqSettings
[Index
]);
853 if (DeviceId
!= CIRRUS_LOGIC_5446_DEVICE_ID
) {
854 outb (Private
, SEQ_ADDRESS_REGISTER
, 0x0f);
855 Byte
= (UINT8
) ((inb (Private
, SEQ_DATA_REGISTER
) & 0xc7) ^ 0x30);
856 outb (Private
, SEQ_DATA_REGISTER
, Byte
);
859 outb (Private
, MISC_OUTPUT_REGISTER
, ModeData
->MiscSetting
);
860 outw (Private
, GRAPH_ADDRESS_REGISTER
, 0x0506);
861 outw (Private
, SEQ_ADDRESS_REGISTER
, 0x0300);
862 outw (Private
, CRTC_ADDRESS_REGISTER
, 0x2011);
864 for (Index
= 0; Index
< 28; Index
++) {
865 outw (Private
, CRTC_ADDRESS_REGISTER
, (UINT16
) ((ModeData
->CrtcSettings
[Index
] << 8) | Index
));
868 for (Index
= 0; Index
< 9; Index
++) {
869 outw (Private
, GRAPH_ADDRESS_REGISTER
, (UINT16
) ((GraphicsController
[Index
] << 8) | Index
));
872 inb (Private
, INPUT_STATUS_1_REGISTER
);
874 for (Index
= 0; Index
< 21; Index
++) {
875 outb (Private
, ATT_ADDRESS_REGISTER
, (UINT8
) Index
);
876 outb (Private
, ATT_ADDRESS_REGISTER
, AttributeController
[Index
]);
879 outb (Private
, ATT_ADDRESS_REGISTER
, 0x20);
881 outw (Private
, GRAPH_ADDRESS_REGISTER
, 0x0009);
882 outw (Private
, GRAPH_ADDRESS_REGISTER
, 0x000a);
883 outw (Private
, GRAPH_ADDRESS_REGISTER
, 0x000b);
884 outb (Private
, DAC_PIXEL_MASK_REGISTER
, 0xff);
886 SetDefaultPalette (Private
);
887 ClearScreen (Private
);
892 InitializeCirrusLogic5430 (
893 IN EFI_HANDLE ImageHandle
,
894 IN EFI_SYSTEM_TABLE
*SystemTable
899 Status
= EfiLibInstallDriverBindingComponentName2 (
902 &gCirrusLogic5430DriverBinding
,
904 &gCirrusLogic5430ComponentName
,
905 &gCirrusLogic5430ComponentName2
907 ASSERT_EFI_ERROR (Status
);
910 // Install EFI Driver Supported EFI Version Protocol required for
911 // EFI drivers that are on PCI and other plug in cards.
913 gCirrusLogic5430DriverSupportedEfiVersion
.FirmwareVersion
= PcdGet32 (PcdDriverSupportedEfiVersion
);
914 Status
= gBS
->InstallMultipleProtocolInterfaces (
916 &gEfiDriverSupportedEfiVersionProtocolGuid
,
917 &gCirrusLogic5430DriverSupportedEfiVersion
,
920 ASSERT_EFI_ERROR (Status
);