## @file
# IDE Controller Init driver that provide IDE_CONTROLLER_INIT protocol and will be used by
# IDE Bus driver to support platform dependent timing information.
#
# Copyright (c) 2008 - 2015, 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                      = IdeController
  MODULE_UNI_FILE                = IdeController.uni
  FILE_GUID                      = 99549F44-49BB-4820-B9D2-901329412D67
  MODULE_TYPE                    = UEFI_DRIVER
  VERSION_STRING                 = 1.0
  ENTRY_POINT                    = InitializeIdeControllerDriver

#
# The following information is for reference only and not required by the build tools.
#
#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC
#

[Sources]
  ComponentName.c
  IdeController.c
  IdeController.h

[Packages]
  MdePkg/MdePkg.dec

[LibraryClasses]
  UefiDriverEntryPoint
  DebugLib
  UefiLib
  BaseLib
  BaseMemoryLib
  MemoryAllocationLib
  UefiBootServicesTableLib

[Protocols]
  gEfiPciIoProtocolGuid             ## TO_START
  gEfiIdeControllerInitProtocolGuid ## BY_START
[UserExtensions.TianoCore."ExtraFiles"]
  IdeControllerExtra.uni
