git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5820 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			406 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			406 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Header file for IDE Bus Driver.
 | 
						|
 | 
						|
  Copyright (c) 2006 - 2007 Intel Corporation. <BR>
 | 
						|
  All rights reserved. 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 <IndustryStandard/Pci22.h>
 | 
						|
#include "IdeData.h"
 | 
						|
 | 
						|
//
 | 
						|
// 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
 | 
						|
 | 
						|
#define EFI_IOB_ATA_BUS_SMART_ENABLE          (EFI_SUBCLASS_SPECIFIC | 0x00000000)
 | 
						|
#define EFI_IOB_ATA_BUS_SMART_DISABLE         (EFI_SUBCLASS_SPECIFIC | 0x00000001)
 | 
						|
#define EFI_IOB_ATA_BUS_SMART_OVERTHRESHOLD   (EFI_SUBCLASS_SPECIFIC | 0x00000002)
 | 
						|
#define EFI_IOB_ATA_BUS_SMART_UNDERTHRESHOLD  (EFI_SUBCLASS_SPECIFIC | 0x00000003)
 | 
						|
 | 
						|
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  EFI_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                *pInquiryData;
 | 
						|
  EFI_IDENTIFY_DATA           *pIdData;
 | 
						|
  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)
 | 
						|
 | 
						|
//
 | 
						|
// Global Variables
 | 
						|
//
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL      gIDEBusDriverBinding;
 | 
						|
extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL  gIDEBusDriverDiagnostics;
 | 
						|
extern EFI_DRIVER_DIAGNOSTICS2_PROTOCOL gIDEBusDriverDiagnostics2;
 | 
						|
 | 
						|
#include "Ide.h"
 | 
						|
 | 
						|
//
 | 
						|
// Prototypes
 | 
						|
// Driver model protocol interface
 | 
						|
//
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  ImageHandle TODO: add argument description
 | 
						|
  @param  SystemTable TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusControllerDriverEntryPoint (
 | 
						|
  IN EFI_HANDLE                   ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE             *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  Controller TODO: add argument description
 | 
						|
  @param  RemainingDevicePath TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  Controller TODO: add argument description
 | 
						|
  @param  RemainingDevicePath TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBusDriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  Controller TODO: add argument description
 | 
						|
  @param  NumberOfChildren TODO: add argument description
 | 
						|
  @param  ChildHandleBuffer TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
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
 | 
						|
//
 | 
						|
EFI_STATUS
 | 
						|
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
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IDEBusDriverConfigurationOptionsValid (
 | 
						|
  IN  EFI_DRIVER_CONFIGURATION_PROTOCOL               *This,
 | 
						|
  IN  EFI_HANDLE                                      ControllerHandle,
 | 
						|
  IN  EFI_HANDLE                                      ChildHandle  OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
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
 | 
						|
//
 | 
						|
EFI_STATUS
 | 
						|
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
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// Block I/O Protocol Interface
 | 
						|
//
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  ExtendedVerification TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoReset (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This,
 | 
						|
  IN  BOOLEAN                     ExtendedVerification
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  MediaId TODO: add argument description
 | 
						|
  @param  LBA TODO: add argument description
 | 
						|
  @param  BufferSize TODO: add argument description
 | 
						|
  @param  Buffer TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoReadBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This,
 | 
						|
  IN  UINT32                      MediaId,
 | 
						|
  IN  EFI_LBA                     LBA,
 | 
						|
  IN  UINTN                       BufferSize,
 | 
						|
  OUT VOID                        *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  MediaId TODO: add argument description
 | 
						|
  @param  LBA TODO: add argument description
 | 
						|
  @param  BufferSize TODO: add argument description
 | 
						|
  @param  Buffer TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoWriteBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This,
 | 
						|
  IN  UINT32                      MediaId,
 | 
						|
  IN  EFI_LBA                     LBA,
 | 
						|
  IN  UINTN                       BufferSize,
 | 
						|
  IN  VOID                        *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEBlkIoFlushBlocks (
 | 
						|
  IN  EFI_BLOCK_IO_PROTOCOL       *This
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  PciIo TODO: add argument description
 | 
						|
  @param  Enable TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
IDERegisterDecodeEnableorDisable (
 | 
						|
  IN  EFI_PCI_IO_PROTOCOL         *PciIo,
 | 
						|
  IN  BOOLEAN                     Enable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  InquiryData TODO: add argument description
 | 
						|
  @param  IntquiryDataSize TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoInquiry (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  IN OUT VOID                     *InquiryData,
 | 
						|
  IN OUT UINT32                   *IntquiryDataSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  IdentifyData TODO: add argument description
 | 
						|
  @param  IdentifyDataSize TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoIdentify (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  IN OUT VOID                     *IdentifyData,
 | 
						|
  IN OUT UINT32                   *IdentifyDataSize
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  SenseData TODO: add argument description
 | 
						|
  @param  SenseDataSize TODO: add argument description
 | 
						|
  @param  SenseDataNumber TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoSenseData (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  IN OUT VOID                     *SenseData,
 | 
						|
  IN OUT UINT32                   *SenseDataSize,
 | 
						|
  OUT UINT8                       *SenseDataNumber
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  TODO: Add function description
 | 
						|
 | 
						|
  @param  This TODO: add argument description
 | 
						|
  @param  IdeChannel TODO: add argument description
 | 
						|
  @param  IdeDevice TODO: add argument description
 | 
						|
 | 
						|
  TODO: add return values
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
IDEDiskInfoWhichIde (
 | 
						|
  IN EFI_DISK_INFO_PROTOCOL       *This,
 | 
						|
  OUT UINT32                      *IdeChannel,
 | 
						|
  OUT UINT32                      *IdeDevice
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |