git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8172 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			461 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			461 lines
		
	
	
		
			13 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 <Guid/EventGroup.h>
 | |
| 
 | |
| #include <IndustryStandard/Pci22.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
 | |
| 
 | |
| #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  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)
 | |
| 
 | |
| #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
 | |
| //
 | |
| /**
 | |
|   TODO: Add function description
 | |
| 
 | |
|   @param  This                 TODO: add argument description
 | |
|   @param  ControllerHandle     TODO: add argument description
 | |
|   @param  ChildHandle          TODO: add argument description
 | |
|   @param  Language             TODO: add argument description
 | |
|   @param  ActionRequired       TODO: add argument description
 | |
| 
 | |
|   TODO: add return values.
 | |
| 
 | |
| **/
 | |
| 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
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   TODO: Add function description
 | |
| 
 | |
|   @param  This                 TODO: add argument description
 | |
|   @param  ControllerHandle     TODO: add argument description
 | |
|   @param  ChildHandle          TODO: add argument description
 | |
| 
 | |
|   TODO: add return values.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| IDEBusDriverConfigurationOptionsValid (
 | |
|   IN  EFI_DRIVER_CONFIGURATION_PROTOCOL               *This,
 | |
|   IN  EFI_HANDLE                                      ControllerHandle,
 | |
|   IN  EFI_HANDLE                                      ChildHandle  OPTIONAL
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   TODO: Add function description
 | |
| 
 | |
|   @param  This                 TODO: add argument description
 | |
|   @param  ControllerHandle     TODO: add argument description
 | |
|   @param  ChildHandle          TODO: add argument description
 | |
|   @param  DefaultType          TODO: add argument description
 | |
|   @param  ActionRequired       TODO: add argument description
 | |
| 
 | |
|   TODO: add return values.
 | |
| 
 | |
| **/
 | |
| 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
 | |
| //
 | |
| /**
 | |
|   TODO: Add function description
 | |
| 
 | |
|   @param  This                 TODO: add argument description
 | |
|   @param  ControllerHandle     TODO: add argument description
 | |
|   @param  ChildHandle          TODO: add argument description
 | |
|   @param  DiagnosticType       TODO: add argument description
 | |
|   @param  Language             TODO: add argument description
 | |
|   @param  ErrorType            TODO: add argument description
 | |
|   @param  BufferSize           TODO: add argument description
 | |
|   @param  Buffer               TODO: add argument description
 | |
| 
 | |
|   TODO: add return values.
 | |
| 
 | |
| **/
 | |
| 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
 | |
|   );
 | |
| 
 | |
| //
 | |
| // 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
 |