git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8893 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			480 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			480 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  This file declares EFI IDE Controller Init Protocol
 | 
						|
  The EFI_IDE_CONTROLLER_INIT_PROTOCOL provides the chipset-specific information to
 | 
						|
  the IDE bus driver. This protocol is mandatory for IDE controllers if the IDE devices behind the
 | 
						|
  controller are to be enumerated by an IDE bus driver.
 | 
						|
  There can only be one instance of EFI_IDE_CONTROLLER_INIT_PROTOCOL for each IDE
 | 
						|
  controller in a system. It is installed on the handle that corresponds to the IDE controller. An IDE
 | 
						|
  bus driver that wishes to manage an IDE bus and possibly IDE devices in a system will have to
 | 
						|
  retrieve the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance that is associated with the
 | 
						|
  controller to be managed.
 | 
						|
 | 
						|
  Copyright (c) 2007 - 2009, Intel Corporation
 | 
						|
  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.
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This Protocol is defined in IDE Controller Initialization Protocol Specification
 | 
						|
  Version 0.9.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H_
 | 
						|
#define _EFI_IDE_CONTROLLER_INIT_PROTOCOL_H_
 | 
						|
 | 
						|
 | 
						|
///
 | 
						|
/// Global ID for the EFI Platform IDE Protocol GUID
 | 
						|
///
 | 
						|
#define EFI_IDE_CONTROLLER_INIT_PROTOCOL_GUID \
 | 
						|
  { 0xa1e37052, 0x80d9, 0x4e65, {0xa3, 0x17, 0x3e, 0x9a, 0x55, 0xc4, 0x3e, 0xc9 } }
 | 
						|
 | 
						|
///
 | 
						|
/// Forward reference for pure ANSI compatability
 | 
						|
///
 | 
						|
typedef struct _EFI_IDE_CONTROLLER_INIT_PROTOCOL  EFI_IDE_CONTROLLER_INIT_PROTOCOL;
 | 
						|
 | 
						|
//
 | 
						|
//////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// EFI_IDE_BUS_ENUMERATION_PHASE
 | 
						|
// EFI_IDE_CONTROLLER_ENUM_PHASE
 | 
						|
//
 | 
						|
typedef enum{
 | 
						|
  EfiIdeBeforeChannelEnumeration,
 | 
						|
  EfiIdeAfterChannelEnumeration,
 | 
						|
  EfiIdeBeforeChannelReset,
 | 
						|
  EfiIdeAfterChannelReset,
 | 
						|
  EfiIdeBusBeforeDevicePresenceDetection,
 | 
						|
  EfiIdeBusAfterDevicePresenceDetection,
 | 
						|
  EfiIdeResetMode,
 | 
						|
  EfiIdeBusPhaseMaximum
 | 
						|
} EFI_IDE_CONTROLLER_ENUM_PHASE;
 | 
						|
 | 
						|
//
 | 
						|
//******************************************************
 | 
						|
// EFI_ATA_EXT_TRANSFER_PROTOCOL
 | 
						|
//******************************************************
 | 
						|
//
 | 
						|
// This extended mode describes the SATA physical protocol.
 | 
						|
// SATA physical layers can operate at different speeds.
 | 
						|
// These speeds are defined below. Various PATA protocols
 | 
						|
// and associated modes are not applicable to SATA devices.
 | 
						|
//
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  EfiAtaSataTransferProtocol
 | 
						|
} EFI_ATA_EXT_TRANSFER_PROTOCOL;
 | 
						|
 | 
						|
#define  EFI_SATA_AUTO_SPEED  0
 | 
						|
#define  EFI_SATA_GEN1_SPEED  1
 | 
						|
#define  EFI_SATA_GEN2_SPEED  2
 | 
						|
 | 
						|
//
 | 
						|
//*******************************************************
 | 
						|
// EFI_IDE_CABLE_TYPE
 | 
						|
//*******************************************************
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  EfiIdeCableTypeUnknown,
 | 
						|
  EfiIdeCableType40pin,
 | 
						|
  EfiIdeCableType80Pin,
 | 
						|
  EfiIdeCableTypeSerial,
 | 
						|
  EfiIdeCableTypeMaximum
 | 
						|
} EFI_IDE_CABLE_TYPE;
 | 
						|
 | 
						|
//
 | 
						|
//******************************************************
 | 
						|
// EFI_ATA_MODE
 | 
						|
//******************************************************
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  BOOLEAN      Valid;
 | 
						|
  UINT32       Mode;
 | 
						|
} EFI_ATA_MODE;
 | 
						|
 | 
						|
//
 | 
						|
//******************************************************
 | 
						|
// EFI_ATA_EXTENDED_MODE
 | 
						|
//******************************************************
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  EFI_ATA_EXT_TRANSFER_PROTOCOL  TransferProtocol;
 | 
						|
  UINT32                         Mode;
 | 
						|
} EFI_ATA_EXTENDED_MODE;
 | 
						|
 | 
						|
//
 | 
						|
//******************************************************
 | 
						|
// EFI_ATA_COLLECTIVE_MODE
 | 
						|
//******************************************************
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  EFI_ATA_MODE           PioMode;
 | 
						|
  EFI_ATA_MODE           SingleWordDmaMode;
 | 
						|
  EFI_ATA_MODE           MultiWordDmaMode;
 | 
						|
  EFI_ATA_MODE           UdmaMode;
 | 
						|
  UINT32                 ExtModeCount;
 | 
						|
  EFI_ATA_EXTENDED_MODE  ExtMode[1];
 | 
						|
} EFI_ATA_COLLECTIVE_MODE;
 | 
						|
 | 
						|
//
 | 
						|
//*******************************************************
 | 
						|
// EFI_ATA_IDENTIFY_DATA
 | 
						|
//*******************************************************
 | 
						|
//
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT16  config;                 ///< General Configuration
 | 
						|
  UINT16  cylinders;              ///< Number of Cylinders
 | 
						|
  UINT16  reserved_2;
 | 
						|
  UINT16  heads;                  ///< Number of logical heads
 | 
						|
  UINT16  vendor_data1;
 | 
						|
  UINT16  vendor_data2;
 | 
						|
  UINT16  sectors_per_track;
 | 
						|
  UINT16  vendor_specific_7_9[3];
 | 
						|
  CHAR8   SerialNo[20];           ///< ASCII
 | 
						|
  UINT16  vendor_specific_20_21[2];
 | 
						|
  UINT16  ecc_bytes_available;
 | 
						|
  CHAR8   FirmwareVer[8];         ///< ASCII
 | 
						|
  CHAR8   ModelName[40];          ///< ASCII
 | 
						|
  UINT16  multi_sector_cmd_max_sct_cnt;
 | 
						|
  UINT16  reserved_48;
 | 
						|
  UINT16  capabilities;
 | 
						|
  UINT16  reserved_50;
 | 
						|
  UINT16  pio_cycle_timing;
 | 
						|
  UINT16  reserved_52;
 | 
						|
  UINT16  field_validity;
 | 
						|
  UINT16  current_cylinders;
 | 
						|
  UINT16  current_heads;
 | 
						|
  UINT16  current_sectors;
 | 
						|
  UINT16  CurrentCapacityLsb;
 | 
						|
  UINT16  CurrentCapacityMsb;
 | 
						|
  UINT16  reserved_59;
 | 
						|
  UINT16  user_addressable_sectors_lo;
 | 
						|
  UINT16  user_addressable_sectors_hi;
 | 
						|
  UINT16  reserved_62;
 | 
						|
  UINT16  multi_word_dma_mode;
 | 
						|
  UINT16  advanced_pio_modes;
 | 
						|
  UINT16  min_multi_word_dma_cycle_time;
 | 
						|
  UINT16  rec_multi_word_dma_cycle_time;
 | 
						|
  UINT16  min_pio_cycle_time_without_flow_control;
 | 
						|
  UINT16  min_pio_cycle_time_with_flow_control;
 | 
						|
  UINT16  reserved_69_79[11];
 | 
						|
  UINT16  major_version_no;
 | 
						|
  UINT16  minor_version_no;
 | 
						|
  UINT16  command_set_supported_82;   ///< word 82
 | 
						|
  UINT16  command_set_supported_83;   ///< word 83
 | 
						|
  UINT16  command_set_feature_extn;   ///< word 84
 | 
						|
  UINT16  command_set_feature_enb_85; ///< word 85
 | 
						|
  UINT16  command_set_feature_enb_86; ///< word 86
 | 
						|
  UINT16  command_set_feature_default; ///< word 87
 | 
						|
  UINT16  ultra_dma_mode;             ///< word 88
 | 
						|
  UINT16  reserved_89_105[17];
 | 
						|
  UINT16  phy_logic_sector_support;   ///< word 106
 | 
						|
  UINT16  reserved_107_116[10];
 | 
						|
  UINT16  logic_sector_size_lo;       ///< word 117
 | 
						|
  UINT16  logic_sector_size_hi;       ///< word 118
 | 
						|
  UINT16  reserved_119_127[9];
 | 
						|
  UINT16  security_status;
 | 
						|
  UINT16  vendor_data_129_159[31];
 | 
						|
  UINT16  reserved_160_208[49];
 | 
						|
  UINT16  alignment_logic_in_phy_blocks; ///< word 209
 | 
						|
  UINT16  reserved_210_255[46];
 | 
						|
} EFI_ATA_IDENTIFY_DATA;
 | 
						|
 | 
						|
#pragma pack()
 | 
						|
//
 | 
						|
//*******************************************************
 | 
						|
// EFI_ATAPI_IDENTIFY_DATA
 | 
						|
//*******************************************************
 | 
						|
//
 | 
						|
#pragma pack(1)
 | 
						|
typedef struct {
 | 
						|
    UINT16  config;             ///< General Configuration
 | 
						|
    UINT16  obsolete_1;
 | 
						|
    UINT16  specific_config;
 | 
						|
    UINT16  obsolete_3;
 | 
						|
    UINT16  retired_4_5[2];
 | 
						|
    UINT16  obsolete_6;
 | 
						|
    UINT16  cfa_reserved_7_8[2];
 | 
						|
    UINT16  retired_9;
 | 
						|
    CHAR8   SerialNo[20];       ///< ASCII
 | 
						|
    UINT16  retired_20_21[2];
 | 
						|
    UINT16  obsolete_22;
 | 
						|
    CHAR8   FirmwareVer[8];     ///< ASCII
 | 
						|
    CHAR8   ModelName[40];      ///< ASCII
 | 
						|
    UINT16  multi_sector_cmd_max_sct_cnt;
 | 
						|
    UINT16  reserved_48;
 | 
						|
    UINT16  capabilities_49;
 | 
						|
    UINT16  capabilities_50;
 | 
						|
    UINT16  obsolete_51_52[2];
 | 
						|
    UINT16  field_validity;
 | 
						|
    UINT16  obsolete_54_58[5];
 | 
						|
    UINT16  mutil_sector_setting;
 | 
						|
    UINT16  user_addressable_sectors_lo;
 | 
						|
    UINT16  user_addressable_sectors_hi;
 | 
						|
    UINT16  obsolete_62;
 | 
						|
    UINT16  multi_word_dma_mode;
 | 
						|
    UINT16  advanced_pio_modes;
 | 
						|
    UINT16  min_multi_word_dma_cycle_time;
 | 
						|
    UINT16  rec_multi_word_dma_cycle_time;
 | 
						|
    UINT16  min_pio_cycle_time_without_flow_control;
 | 
						|
    UINT16  min_pio_cycle_time_with_flow_control;
 | 
						|
    UINT16  reserved_69_74[6];
 | 
						|
    UINT16  queue_depth;
 | 
						|
    UINT16  reserved_76_79[4];
 | 
						|
    UINT16  major_version_no;
 | 
						|
    UINT16  minor_version_no;
 | 
						|
    UINT16  cmd_set_support_82;
 | 
						|
    UINT16  cmd_set_support_83;
 | 
						|
    UINT16  cmd_feature_support;
 | 
						|
    UINT16  cmd_feature_enable_85;
 | 
						|
    UINT16  cmd_feature_enable_86;
 | 
						|
    UINT16  cmd_feature_default;
 | 
						|
    UINT16  ultra_dma_select;
 | 
						|
    UINT16  time_required_for_sec_erase;
 | 
						|
    UINT16  time_required_for_enhanced_sec_erase;
 | 
						|
    UINT16  current_advanced_power_mgmt_value;
 | 
						|
    UINT16  master_pwd_revison_code;
 | 
						|
    UINT16  hardware_reset_result;
 | 
						|
    UINT16  current_auto_acoustic_mgmt_value;
 | 
						|
    UINT16  reserved_95_99[5];
 | 
						|
    UINT16  max_user_lba_for_48bit_addr[4];
 | 
						|
    UINT16  reserved_104_126[23];
 | 
						|
    UINT16  removable_media_status_notification_support;
 | 
						|
    UINT16  security_status;
 | 
						|
    UINT16  vendor_data_129_159[31];
 | 
						|
    UINT16  cfa_power_mode;
 | 
						|
    UINT16  cfa_reserved_161_175[15];
 | 
						|
    UINT16  current_media_serial_no[30];
 | 
						|
    UINT16  reserved_206_254[49];
 | 
						|
    UINT16  integrity_word;
 | 
						|
} EFI_ATAPI_IDENTIFY_DATA;
 | 
						|
 | 
						|
#pragma pack()
 | 
						|
//
 | 
						|
//*******************************************************
 | 
						|
// EFI_IDENTIFY_DATA
 | 
						|
//*******************************************************
 | 
						|
//
 | 
						|
typedef union {
 | 
						|
  EFI_ATA_IDENTIFY_DATA       AtaData;
 | 
						|
  EFI_ATAPI_IDENTIFY_DATA     AtapiData;
 | 
						|
} EFI_IDENTIFY_DATA;
 | 
						|
 | 
						|
#define   EFI_ATAPI_DEVICE_IDENTIFY_DATA  0x8000
 | 
						|
 | 
						|
//
 | 
						|
/////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// Function prototype declaration, for ANSI compatability
 | 
						|
//
 | 
						|
/**
 | 
						|
  Returns the information about the specified IDE channel.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
 | 
						|
  @param  Channel               Zero-based channel number.
 | 
						|
  @param  Enabled               TRUE if this channel is enabled. Disabled channels are not scanned
 | 
						|
                                to see if any devices are present.
 | 
						|
  @param  MaxDevices            The maximum number of IDE devices that the bus driver
 | 
						|
                                can expect on this channel.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Information was returned without any errors.
 | 
						|
  @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount).
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IDE_CONTROLLER_GET_CHANNEL_INFO)(
 | 
						|
  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
 | 
						|
  IN  UINT8                           Channel,
 | 
						|
  OUT BOOLEAN                         *Enabled,
 | 
						|
  OUT UINT8                           *MaxDevices
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  The notifications from the IDE bus driver that it is about to enter a certain
 | 
						|
  phase of the IDE channel enumeration process.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
 | 
						|
  @param  Phase                 The phase during enumeration.
 | 
						|
  @param  Channel               Zero-based channel number.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The notification was accepted without any errors.
 | 
						|
  @retval EFI_NOT_SUPPORTED     Phase is not supported.
 | 
						|
  @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount).
 | 
						|
  @retval EFI_NOT_READY         This phase cannot be entered at this time.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IDE_CONTROLLER_NOTIFY_PHASE)(
 | 
						|
  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL  *This,
 | 
						|
  IN EFI_IDE_CONTROLLER_ENUM_PHASE     Phase,
 | 
						|
  IN UINT8                             Channel
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Submits the device information to the IDE controller driver.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
 | 
						|
  @param  Channel               Zero-based channel number.
 | 
						|
  @param  Device                Zero-based device number on the Channel.
 | 
						|
  @param  IdentifyData          The device's response to the ATA IDENTIFY_DEVICE command.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The information was accepted without any errors.
 | 
						|
  @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount).
 | 
						|
                                Or Device is invalid.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IDE_CONTROLLER_SUBMIT_DATA)(
 | 
						|
  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
 | 
						|
  IN  UINT8                           Channel,
 | 
						|
  IN  UINT8                           Device,
 | 
						|
  IN  EFI_IDENTIFY_DATA               *IdentifyData
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Disqualifies specific modes for an IDE device.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
 | 
						|
  @param  Channel               Zero-based channel number.
 | 
						|
  @param  Device                Zero-based device number on the Channel.
 | 
						|
  @param  BadModes              The modes that the device does not support and that
 | 
						|
                                should be disqualified.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The modes were accepted without any errors.
 | 
						|
  @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount).
 | 
						|
                                Or Device is invalid.
 | 
						|
                                
 | 
						|
  @note: Inconsistent with specification here:  
 | 
						|
         Framework Spec IdeCont defined another case to return EFI_INVALID_PARAMETER when
 | 
						|
         IdentifyData is NULL. However in the function there is no parameter named IdentifyData.
 | 
						|
         So that should be a typo error in spec.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IDE_CONTROLLER_DISQUALIFY_MODE)(
 | 
						|
  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
 | 
						|
  IN  UINT8                           Channel,
 | 
						|
  IN  UINT8                           Device,
 | 
						|
  IN  EFI_ATA_COLLECTIVE_MODE         *BadModes
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Returns the information about the optimum modes for the specified IDE device.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
 | 
						|
  @param  Channel               Zero-based channel number.
 | 
						|
  @param  Device                Zero-based device number on the Channel.
 | 
						|
  @param  SupportedModes        The optimum modes for the device.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           SupportedModes was returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount).
 | 
						|
                                Or Device is invalid. Or SupportedModes is NULL.
 | 
						|
  @retval EFI_NOT_READY         Modes cannot be calculated due to a lack of data.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IDE_CONTROLLER_CALCULATE_MODE)(
 | 
						|
  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
 | 
						|
  IN  UINT8                           Channel,
 | 
						|
  IN  UINT8                           Device,
 | 
						|
  OUT EFI_ATA_COLLECTIVE_MODE         **SupportedModes
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
  Commands the IDE controller driver to program the IDE controller hardware
 | 
						|
  so that the specified device can operate at the specified mode.
 | 
						|
 | 
						|
  @param  This                  Pointer to the EFI_IDE_CONTROLLER_INIT_PROTOCOL instance.
 | 
						|
  @param  Channel               Zero-based channel number.
 | 
						|
  @param  Device                Zero-based device number on the Channel.
 | 
						|
  @param  Modes                 The modes to set.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The command was accepted without any errors.
 | 
						|
  @retval EFI_INVALID_PARAMETER Channel is invalid (Channel >= ChannelCount).
 | 
						|
                                Or Device is invalid.
 | 
						|
  @retval EFI_NOT_READY         Modes cannot be set at this time due to lack of data.
 | 
						|
  @retval EFI_DEVICE_ERROR      Modes cannot be set due to hardware failure.
 | 
						|
                                The IDE bus driver should not use this device.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_IDE_CONTROLLER_SET_TIMING)(
 | 
						|
  IN EFI_IDE_CONTROLLER_INIT_PROTOCOL *This,
 | 
						|
  IN  UINT8                           Channel,
 | 
						|
  IN  UINT8                           Device,
 | 
						|
  IN  EFI_ATA_COLLECTIVE_MODE         *Modes
 | 
						|
);
 | 
						|
 | 
						|
//
 | 
						|
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						|
// Interface structure
 | 
						|
// EFI_IDE_CONTROLLER_INIT_PROTOCOL protocol provides the chipset specific information to the IDE bus driver.
 | 
						|
// An IDE Bus driver wants to manage an IDE bus and possible IDE devices will have to retrieve the
 | 
						|
// EFI_IDE_CONTROLLER_INIT_PROTOCOL instances.
 | 
						|
//
 | 
						|
/**
 | 
						|
  Provides the basic interfaces to abstract an IDE controller.
 | 
						|
**/
 | 
						|
struct _EFI_IDE_CONTROLLER_INIT_PROTOCOL {
 | 
						|
  ///
 | 
						|
  /// Returns the information about a specific channel.
 | 
						|
  ///
 | 
						|
  EFI_IDE_CONTROLLER_GET_CHANNEL_INFO    GetChannelInfo;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// The notification that the IDE bus driver is about to enter the
 | 
						|
  /// specified phase during the enumeration process.  
 | 
						|
  ///
 | 
						|
  EFI_IDE_CONTROLLER_NOTIFY_PHASE        NotifyPhase;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// Submits the Drive Identify data that was returned by the device.
 | 
						|
  ///
 | 
						|
  EFI_IDE_CONTROLLER_SUBMIT_DATA         SubmitData;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// Submits information about modes that should be disqualified.
 | 
						|
  ///
 | 
						|
  EFI_IDE_CONTROLLER_DISQUALIFY_MODE     DisqualifyMode;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// Calculates and returns the optimum mode for a particular IDE device.
 | 
						|
  ///
 | 
						|
  EFI_IDE_CONTROLLER_CALCULATE_MODE      CalculateMode;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// Programs the IDE controller hardware to the default timing or per the modes
 | 
						|
  /// that were returned by the last call to CalculateMode().  
 | 
						|
  ///
 | 
						|
  EFI_IDE_CONTROLLER_SET_TIMING          SetTiming;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// Set to TRUE if the enumeration group includes all the channels that are
 | 
						|
  /// produced by this controller. FALSE if an enumeration group consists of
 | 
						|
  /// only one channel.  
 | 
						|
  ///
 | 
						|
  BOOLEAN                                EnumAll;
 | 
						|
  
 | 
						|
  ///
 | 
						|
  /// The number of channels that are produced by this controller.
 | 
						|
  ///
 | 
						|
  UINT8                                  ChannelCount;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiIdeControllerInitProtocolGuid;
 | 
						|
 | 
						|
#endif
 |