Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15642 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			541 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			541 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Header file for IDE Bus Driver.
 | 
						|
 | 
						|
  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.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _IDE_BUS_H_
 | 
						|
#define _IDE_BUS_H_
 | 
						|
 | 
						|
 | 
						|
 | 
						|
#include <FrameworkDxe.h>
 | 
						|
 | 
						|
#include <Protocol/IdeControllerInit.h>
 | 
						|
#include <Protocol/BlockIo.h>
 | 
						|
#include <Protocol/PciIo.h>
 | 
						|
#include <Protocol/DiskInfo.h>
 | 
						|
#include <Protocol/DevicePath.h>
 | 
						|
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/UefiDriverEntryPoint.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/ReportStatusCodeLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/PerformanceLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiRuntimeServicesTableLib.h>
 | 
						|
#include <Library/DevicePathLib.h>
 | 
						|
 | 
						|
#include <Guid/EventGroup.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Pci.h>
 | 
						|
#include "IdeData.h"
 | 
						|
 | 
						|
//
 | 
						|
// Global Variables
 | 
						|
//
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL      gIDEBusDriverBinding;
 | 
						|
extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL  gIDEBusDriverDiagnostics;
 | 
						|
extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2;
 | 
						|
 | 
						|
//
 | 
						|
// Extra Definition to porting
 | 
						|
//
 | 
						|
#define MAX_IDE_DEVICE    4
 | 
						|
#define MAX_IDE_CHANNELS  2
 | 
						|
#define MAX_IDE_DRIVES    2
 | 
						|
 | 
						|
#define INVALID_DEVICE_TYPE 0xff
 | 
						|
#define ATA_DEVICE_TYPE     0x00
 | 
						|
#define ATAPI_DEVICE_TYPE   0x01
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  BOOLEAN HaveScannedDevice[MAX_IDE_DEVICE];
 | 
						|
  BOOLEAN DeviceFound[MAX_IDE_DEVICE];
 | 
						|
  BOOLEAN DeviceProcessed[MAX_IDE_DEVICE];
 | 
						|
} IDE_BUS_DRIVER_PRIVATE_DATA;
 | 
						|
 | 
						|
#define IDE_BLK_IO_DEV_SIGNATURE  SIGNATURE_32 ('i', 'b', 'i', 'd')
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32                      Signature;
 | 
						|
 | 
						|
  EFI_HANDLE                  Handle;
 | 
						|
  EFI_BLOCK_IO_PROTOCOL       BlkIo;
 | 
						|
  EFI_BLOCK_IO_MEDIA          BlkMedia;
 | 
						|
  EFI_DISK_INFO_PROTOCOL      DiskInfo;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
 | 
						|
  EFI_PCI_IO_PROTOCOL         *PciIo;
 | 
						|
  IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;
 | 
						|
 | 
						|
  //
 | 
						|
  // Local Data for IDE interface goes here
 | 
						|
  //
 | 
						|
  EFI_IDE_CHANNEL             Channel;
 | 
						|
  EFI_IDE_DEVICE              Device;
 | 
						|
  UINT16                      Lun;
 | 
						|
  IDE_DEVICE_TYPE             Type;
 | 
						|
 | 
						|
  IDE_BASE_REGISTERS          *IoPort;
 | 
						|
  UINT16                      AtapiError;
 | 
						|
 | 
						|
  ATAPI_INQUIRY_DATA                *InquiryData;
 | 
						|
  EFI_IDENTIFY_DATA           *IdData;
 | 
						|
  ATA_PIO_MODE                PioMode;
 | 
						|
  EFI_ATA_MODE                UdmaMode;
 | 
						|
  CHAR8                       ModelName[41];
 | 
						|
  ATAPI_REQUEST_SENSE_DATA          *SenseData;
 | 
						|
  UINT8                       SenseDataNumber;
 | 
						|
  UINT8                       *Cache;
 | 
						|
 | 
						|
  //
 | 
						|
  // ExitBootService Event, it is used to clear pending IDE interrupt
 | 
						|
  //
 | 
						|
  EFI_EVENT                   ExitBootServiceEvent;
 | 
						|
 | 
						|
  EFI_UNICODE_STRING_TABLE    *ControllerNameTable;
 | 
						|
} IDE_BLK_IO_DEV;
 | 
						|
 | 
						|
#include "ComponentName.h"
 | 
						|
 | 
						|
#define IDE_BLOCK_IO_DEV_FROM_THIS(a)           CR (a, IDE_BLK_IO_DEV, BlkIo, IDE_BLK_IO_DEV_SIGNATURE)
 | 
						|
#define IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS(a) CR (a, IDE_BLK_IO_DEV, DiskInfo, IDE_BLK_IO_DEV_SIGNATURE)
 | 
						|
 | 
						|
#include "Ide.h"
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Supported function of Driver Binding protocol for this driver.
 | 
						|
 | 
						|
  @param This                A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
 | 
						|
  @param ControllerHandle    The handle of the controller to test.
 | 
						|
  @param RemainingDevicePath A pointer to the remaining portion of a device path.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS Driver loaded.
 | 
						|
  @retval  other       Driver not loaded.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Start function of Driver binding protocol which start this driver on Controller
 | 
						|
  by detecting all disks and installing BlockIo protocol on them.
 | 
						|
 | 
						|
  @param  This                Protocol instance pointer.
 | 
						|
  @param  Controller          Handle of device to bind driver to.
 | 
						|
  @param  RemainingDevicePath produce all possible children.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS         This driver is added to ControllerHandle.
 | 
						|
  @retval  EFI_ALREADY_STARTED This driver is already running on ControllerHandle.
 | 
						|
  @retval  other               This driver does not support this device.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Stop function of Driver Binding Protocol which is to stop the driver on Controller Handle and all
 | 
						|
  child handle attached to the controller handle if there are.
 | 
						|
 | 
						|
  @param  This Protocol instance pointer.
 | 
						|
  @param  Controller Handle of device to stop driver on
 | 
						|
  @param  NumberOfChildren Not used
 | 
						|
  @param  ChildHandleBuffer Not used
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS This driver is removed DeviceHandle
 | 
						|
  @retval  other This driver was not removed from this device
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverBindingStop (
 | 
						|
  IN  EFI_DRIVER_BINDING_PROTOCOL *This,
 | 
						|
  IN  EFI_HANDLE                  Controller,
 | 
						|
  IN  UINTN                       NumberOfChildren,
 | 
						|
  IN  EFI_HANDLE                  *ChildHandleBuffer
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// EFI Driver Configuration Functions
 | 
						|
//
 | 
						|
/**
 | 
						|
  Allows the user to set controller specific options for a controller that a 
 | 
						|
  driver is currently managing.
 | 
						|
 | 
						|
  @param  This              A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.
 | 
						|
  @param  ControllerHandle  The handle of the controller to set options on.
 | 
						|
  @param  ChildHandle       The handle of the child controller to set options on.
 | 
						|
                            This is an optional parameter that may be NULL.
 | 
						|
                            It will be NULL for device drivers, and for a bus drivers
 | 
						|
                            that wish to set options for the bus controller.
 | 
						|
                            It will not be NULL for a bus driver that wishes to set
 | 
						|
                            options for one of its child controllers.
 | 
						|
  @param  Language          A pointer to a three character ISO 639-2 language identifier. 
 | 
						|
                            This is the language of the user interface that should be presented 
 | 
						|
                            to the user, and it must match one of the languages specified in 
 | 
						|
                            SupportedLanguages. The number of languages supported by a driver is up to
 | 
						|
                            the driver writer.
 | 
						|
  @param  ActionRequired    A pointer to the action that the calling agent is required 
 | 
						|
                            to perform when this function returns.
 | 
						|
  
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The driver specified by This successfully set the configuration 
 | 
						|
                                 options for the controller specified by ControllerHandle..
 | 
						|
  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ActionRequired is NULL.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support setting configuration options for 
 | 
						|
                                 the controller specified by ControllerHandle and ChildHandle.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the language specified by Language.
 | 
						|
  @retval  EFI_DEVICE_ERROR      A device error occurred while attempt to set the configuration options for the 
 | 
						|
                                 controller specified by ControllerHandle and ChildHandle.
 | 
						|
  @retval  EFI_OUT_RESOURCES     There are not enough resources available to set the configuration options for the 
 | 
						|
                                 controller specified by ControllerHandle and ChildHandle
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverConfigurationSetOptions (
 | 
						|
  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL                      *This,
 | 
						|
  IN  EFI_HANDLE                                             ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                                             ChildHandle  OPTIONAL,
 | 
						|
  IN  CHAR8                                                  *Language,
 | 
						|
  OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED               *ActionRequired
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Tests to see if a controller's current configuration options are valid.
 | 
						|
 | 
						|
  @param  This             A pointer to the EFI_DRIVER_CONFIGURATION_PROTOCOL instance.
 | 
						|
  @param  ControllerHandle The handle of the controller to test if it's current configuration options 
 | 
						|
                           are valid.
 | 
						|
  @param  ChildHandle      The handle of the child controller to test if it's current configuration 
 | 
						|
                           options are valid.  This is an optional parameter that may be NULL. It will 
 | 
						|
                           be NULL for device drivers.  It will also be NULL for a bus drivers that
 | 
						|
                           wish to test the configuration options for the bus controller. It will 
 | 
						|
                           not be NULL for a bus driver that wishes to test configuration options for 
 | 
						|
                           one of its child controllers.
 | 
						|
  @retval  EFI_SUCCESS           The controller specified by ControllerHandle and ChildHandle that is being
 | 
						|
                                 managed by the driver specified by This has a valid set of  configuration
 | 
						|
                                 options.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This is not currently  managing the controller 
 | 
						|
                                 specified by ControllerHandle and ChildHandle.
 | 
						|
  @retval  EFI_DEVICE_ERROR      The controller specified by ControllerHandle and ChildHandle that is being
 | 
						|
                                 managed by the driver specified by This has an invalid set of configuration
 | 
						|
                                 options.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverConfigurationOptionsValid (
 | 
						|
  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL               *This,
 | 
						|
  IN  EFI_HANDLE                                      ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                                      ChildHandle  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Forces a driver to set the default configuration options for a controller.
 | 
						|
 | 
						|
  @param  This             A pointer to the EFI_DRIVER_CONFIGURATION_ PROTOCOL instance.
 | 
						|
  @param  ControllerHandle The handle of the controller to force default configuration options on.
 | 
						|
  @param  ChildHandle      The handle of the child controller to force default configuration 
 | 
						|
                           options on  This is an optional parameter that may be NULL.  It 
 | 
						|
                           will be NULL for device drivers. It will also be NULL for a bus 
 | 
						|
                           drivers that wish to force default configuration options for the bus
 | 
						|
                           controller.  It will not be NULL for a bus driver that wishes to force
 | 
						|
                           default configuration options for one of its child controllers.
 | 
						|
  @param  DefaultType      The type of default configuration options to force on the controller 
 | 
						|
                           specified by ControllerHandle and ChildHandle. 
 | 
						|
  @param  ActionRequired   A pointer to the action that the calling agent is required to perform 
 | 
						|
                           when this function returns.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The driver specified by This successfully forced the 
 | 
						|
                                 default configuration options on the controller specified by 
 | 
						|
                                 ControllerHandle and ChildHandle.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ActionRequired is NULL.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support forcing the default 
 | 
						|
                                 configuration options on the controller specified by ControllerHandle
 | 
						|
                                 and ChildHandle.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the configuration type 
 | 
						|
                                 specified by DefaultType.
 | 
						|
  @retval  EFI_DEVICE_ERROR      A device error occurred while attempt to force the default configuration 
 | 
						|
                                 options on the controller specified by  ControllerHandle and ChildHandle.
 | 
						|
  @retval  EFI_OUT_RESOURCES     There are not enough resources available to force the default configuration 
 | 
						|
                                 options on the controller specified by ControllerHandle and ChildHandle.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverConfigurationForceDefaults (
 | 
						|
  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL                      *This,
 | 
						|
  IN  EFI_HANDLE                                             ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                                             ChildHandle  OPTIONAL,
 | 
						|
  IN  UINT32                                                 DefaultType,
 | 
						|
  OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED               *ActionRequired
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// EFI Driver Diagnostics Functions
 | 
						|
//
 | 
						|
/**
 | 
						|
  Runs diagnostics on a controller.
 | 
						|
 | 
						|
  @param  This             A pointer to the EFI_DRIVER_DIAGNOSTICS_PROTOCOLinstance.
 | 
						|
  @param  ControllerHandle The handle of the controller to run diagnostics on.
 | 
						|
  @param  ChildHandle      The handle of the child controller to run diagnostics on
 | 
						|
                           This is an optional parameter that may be NULL.  It will
 | 
						|
                           be NULL for device drivers.  It will also be NULL for a
 | 
						|
                           bus drivers that wish to run diagnostics on the bus controller. 
 | 
						|
                           It will not be NULL for a bus driver that wishes to run 
 | 
						|
                           diagnostics on one of its child controllers.
 | 
						|
  @param  DiagnosticType   Indicates type of diagnostics to perform on the controller
 | 
						|
                           specified by ControllerHandle and ChildHandle.
 | 
						|
  @param  Language         A pointer to a three character ISO 639-2 language identifier. 
 | 
						|
                           This is the language in which the optional error message should 
 | 
						|
                           be returned in Buffer, and it must match one of the languages 
 | 
						|
                           specified in SupportedLanguages. The number of languages supported by
 | 
						|
                           a driver is up to the driver writer.
 | 
						|
  @param  ErrorType        A GUID that defines the format of the data returned in Buffer.
 | 
						|
  @param  BufferSize       The size, in bytes, of the data returned in Buffer.
 | 
						|
  @param  Buffer           A buffer that contains a Null-terminated Unicode string
 | 
						|
                           plus some additional data whose format is defined by ErrorType.  
 | 
						|
                           Buffer is allocated by this function with AllocatePool(), and 
 | 
						|
                           it is the caller's responsibility to free it with a call to FreePool().
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The controller specified by ControllerHandle and ChildHandle passed 
 | 
						|
                                 the diagnostic.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ControllerHandle is NULL.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid EFI_HANDLE.
 | 
						|
  @retval  EFI_INVALID_PARAMETER Language is NULL.
 | 
						|
  @retval  EFI_INVALID_PARAMETER ErrorType is NULL.
 | 
						|
  @retval  EFI_INVALID_PARAMETER BufferType is NULL.
 | 
						|
  @retval  EFI_INVALID_PARAMETER Buffer is NULL.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support running 
 | 
						|
                                 diagnostics for the controller specified by ControllerHandle 
 | 
						|
                                 and ChildHandle.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the
 | 
						|
                                 type of diagnostic specified by DiagnosticType.
 | 
						|
  @retval  EFI_UNSUPPORTED       The driver specified by This does not support the language 
 | 
						|
                                 specified by Language.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to complete the 
 | 
						|
                                 diagnostics.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  There are not enough resources available to return the 
 | 
						|
                                 status information in ErrorType, BufferSize,and Buffer.
 | 
						|
  @retval  EFI_DEVICE_ERROR      The controller specified by ControllerHandle and ChildHandle 
 | 
						|
                                 did not pass the diagnostic.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverDiagnosticsRunDiagnostics (
 | 
						|
  IN  EFI_DRIVER_DIAGNOSTICS_PROTOCOL               *This,
 | 
						|
  IN  EFI_HANDLE                                    ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                                    ChildHandle  OPTIONAL,
 | 
						|
  IN  EFI_DRIVER_DIAGNOSTIC_TYPE                    DiagnosticType,
 | 
						|
  IN  CHAR8                                         *Language,
 | 
						|
  OUT EFI_GUID                                      **ErrorType,
 | 
						|
  OUT UINTN                                         *BufferSize,
 | 
						|
  OUT CHAR16                                        **Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  issue ATA or ATAPI command to reset a block IO device.
 | 
						|
  @param  This                  Block IO protocol instance pointer.
 | 
						|
  @param  ExtendedVerification  If FALSE,for ATAPI device, driver will only invoke ATAPI reset method
 | 
						|
                                If TRUE, for ATAPI device, driver need invoke ATA reset method after
 | 
						|
                                invoke ATAPI reset method
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR      When the device is neighther ATA device or ATAPI device.
 | 
						|
  @retval EFI_SUCCESS           The device reset successfully
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoReset (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This,
 | 
						|
  IN  BOOLEAN                     ExtendedVerification
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Read data from a block IO device.
 | 
						|
 | 
						|
  @param  This       Block IO protocol instance pointer.
 | 
						|
  @param  MediaId    The media ID of the device
 | 
						|
  @param  Lba        Starting LBA address to read data
 | 
						|
  @param  BufferSize The size of data to be read
 | 
						|
  @param  Buffer     Caller supplied buffer to save data
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR  unknown device type
 | 
						|
  @retval EFI_SUCCESS       read the data successfully.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoReadBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This,
 | 
						|
  IN  UINT32                      MediaId,
 | 
						|
  IN  EFI_LBA                     Lba,
 | 
						|
  IN  UINTN                       BufferSize,
 | 
						|
  OUT VOID                        *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Write data to block io device
 | 
						|
 | 
						|
  @param  This       Protocol instance pointer.
 | 
						|
  @param  MediaId    The media ID of the device
 | 
						|
  @param  Lba        Starting LBA address to write data
 | 
						|
  @param  BufferSize The size of data to be written
 | 
						|
  @param  Buffer     Caller supplied buffer to save data
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR  unknown device type
 | 
						|
  @retval other             write data status
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoWriteBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This,
 | 
						|
  IN  UINT32                      MediaId,
 | 
						|
  IN  EFI_LBA                     Lba,
 | 
						|
  IN  UINTN                       BufferSize,
 | 
						|
  IN  VOID                        *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Flushes all modified data to a physical block devices
 | 
						|
 | 
						|
  @param  This  Indicates a pointer to the calling context which to sepcify a 
 | 
						|
                sepcific block device
 | 
						|
 | 
						|
  @retval EFI_SUCCESS   Always return success.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoFlushBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This
 | 
						|
  );
 | 
						|
/**
 | 
						|
  This function is used by the IDE bus driver to get inquiry data. 
 | 
						|
  Data format of Identify data is defined by the Interface GUID.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
 | 
						|
  @param  InquiryData           Pointer to a buffer for the inquiry data.
 | 
						|
  @param  InquiryDataSize       Pointer to the value for the inquiry data size.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The command was accepted without any errors.
 | 
						|
  @retval EFI_NOT_FOUND         Device does not support this data class 
 | 
						|
  @retval EFI_DEVICE_ERROR      Error reading InquiryData from device 
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL  IntquiryDataSize not big enough 
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoInquiry (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  IN OUT VOID                     *InquiryData,
 | 
						|
  IN OUT UINT32                   *InquiryDataSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used by the IDE bus driver to get identify data. 
 | 
						|
  Data format of Identify data is defined by the Interface GUID.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance.
 | 
						|
  @param  IdentifyData          Pointer to a buffer for the identify data.
 | 
						|
  @param  IdentifyDataSize      Pointer to the value for the identify data size.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The command was accepted without any errors.
 | 
						|
  @retval EFI_NOT_FOUND         Device does not support this data class 
 | 
						|
  @retval EFI_DEVICE_ERROR      Error reading IdentifyData from device 
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL  IdentifyDataSize not big enough 
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoIdentify (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  IN OUT VOID                     *IdentifyData,
 | 
						|
  IN OUT UINT32                   *IdentifyDataSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used by the IDE bus driver to get sense data. 
 | 
						|
  Data format of Sense data is defined by the Interface GUID.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance. 
 | 
						|
  @param  SenseData             Pointer to the SenseData. 
 | 
						|
  @param  SenseDataSize         Size of SenseData in bytes. 
 | 
						|
  @param  SenseDataNumber       Pointer to the value for the identify data size.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The command was accepted without any errors.
 | 
						|
  @retval EFI_NOT_FOUND         Device does not support this data class 
 | 
						|
  @retval EFI_DEVICE_ERROR      Error reading InquiryData from device 
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL  SenseDataSize not big enough 
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoSenseData (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  IN OUT VOID                     *SenseData,
 | 
						|
  IN OUT UINT32                   *SenseDataSize,
 | 
						|
  OUT UINT8                       *SenseDataNumber
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is used by the IDE bus driver to get controller information.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_DISK_INFO_PROTOCOL instance. 
 | 
						|
  @param  IdeChannel            Pointer to the Ide Channel number. Primary or secondary.
 | 
						|
  @param  IdeDevice             Pointer to the Ide Device number. Master or slave.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           IdeChannel and IdeDevice are valid 
 | 
						|
  @retval EFI_UNSUPPORTED       This is not an IDE device 
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoWhichIde (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  OUT UINT32                      *IdeChannel,
 | 
						|
  OUT UINT32                      *IdeDevice
 | 
						|
  );
 | 
						|
/**
 | 
						|
  The is an event(generally the event is exitBootService event) call back function. 
 | 
						|
  Clear pending IDE interrupt before OS loader/kernel take control of the IDE device.
 | 
						|
 | 
						|
  @param  Event   Pointer to this event
 | 
						|
  @param  Context Event handler private data
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
ClearInterrupt (
 | 
						|
  IN EFI_EVENT  Event,
 | 
						|
  IN VOID       *Context
 | 
						|
  );
 | 
						|
#endif
 |