## @file
# Component description file for CirrusLogic5430 module
#
# Cirrus Logic 5430 Controller Driver.This driver is a sample implementation
#  of the UGA Draw Protocol for the Cirrus Logic 5430 family of PCI video controllers.
#  This driver is only usable in the EFI pre-boot environment. This sample is
#  intended to show how the UGA Draw Protocol is able to function. The UGA I/O
#  Protocol is not implemented in this sample. A fully compliant EFI UGA driver
#  requires both the UGA Draw and the UGA I/O Protocol. Please refer to Microsoft's
#  documentation on UGA for details on how to write a UGA driver that is able
#  to function both in the EFI pre-boot environment and from the OS runtime.
# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
#
#  This program and the accompanying materials
#  are licensed and made available under the terms and conditions of the BSD License
#  which accompanies this distribution. The full text of the license may be found at
#  http://opensource.org/licenses/bsd-license.php
#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#
#
##

[Defines]
  INF_VERSION                    = 0x00010005
  BASE_NAME                      = CirrusLogic5430Dxe
  FILE_GUID                      = 555F76EA-785F-40d7-9174-153C43636C68
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0

  ENTRY_POINT                    = InitializeCirrusLogic5430

  PCI_VENDOR_ID  = 0x1013
  PCI_DEVICE_ID  = 0x00A8
  PCI_CLASS_CODE = 0x030000
  PCI_REVISION   = 0x00
  PCI_COMPRESS   = TRUE

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#
#  DRIVER_BINDING                =  gCirrusLogic5430DriverBinding
#  COMPONENT_NAME                =  gCirrusLogic5430ComponentName
#

[Sources]
  ComponentName.c
  DriverSupportedEfiVersion.c
  CirrusLogic5430UgaDraw.c
  CirrusLogic5430GraphicsOutput.c
  CirrusLogic5430.c
  CirrusLogic5430.h
  Edid.c
  CirrusLogic5430I2c.h
  CirrusLogic5430I2c.c

[Packages]
  MdePkg/MdePkg.dec
  OptionRomPkg/OptionRomPkg.dec

[LibraryClasses]
  UefiBootServicesTableLib
  MemoryAllocationLib
  UefiLib
  UefiDriverEntryPoint
  DebugLib
  BaseMemoryLib
  DevicePathLib
  TimerLib

[Protocols]
  gEfiDriverSupportedEfiVersionProtocolGuid     # PROTOCOL ALWAYS_PRODUCED
  gEfiUgaDrawProtocolGuid                       # PROTOCOL BY_START
  gEfiGraphicsOutputProtocolGuid                # PROTOCOL BY_START
  gEfiEdidDiscoveredProtocolGuid                # PROTOCOL BY_START
  gEfiEdidActiveProtocolGuid                    # PROTOCOL BY_START
  gEfiDevicePathProtocolGuid                    # PROTOCOL BY_START
  gEfiPciIoProtocolGuid                         # PROTOCOL TO_START
  gEfiEdidOverrideProtocolGuid                  # PROTOCOL TO_START


[FeaturePcd]
  gOptionRomPkgTokenSpaceGuid.PcdSupportGop
  gOptionRomPkgTokenSpaceGuid.PcdSupportUga

[Pcd]
  gOptionRomPkgTokenSpaceGuid.PcdDriverSupportedEfiVersion
