mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 13:35:48 +01:00 
			
		
		
		
	1. Do not use tab characters 2. No trailing white space in one line 3. All files must end with CRLF Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
		
			
				
	
	
		
			163 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Define the PPI to abstract the functions that enable IDE and SATA channels, and to retrieve
 | 
						|
  the base I/O port address for each of the enabled IDE and SATA channels.
 | 
						|
 | 
						|
Copyright (c) 2006 - 2018, 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 _PEI_ATA_CONTROLLER_PPI_H_
 | 
						|
#define _PEI_ATA_CONTROLLER_PPI_H_
 | 
						|
 | 
						|
///
 | 
						|
/// Global ID for the PEI_ATA_CONTROLLER_PPI.
 | 
						|
///
 | 
						|
#define PEI_ATA_CONTROLLER_PPI_GUID \
 | 
						|
  { \
 | 
						|
    0xa45e60d1, 0xc719, 0x44aa, {0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d } \
 | 
						|
  }
 | 
						|
 | 
						|
///
 | 
						|
/// Forward declaration for the PEI_ATA_CONTROLLER_PPI.
 | 
						|
///
 | 
						|
typedef struct _PEI_ATA_CONTROLLER_PPI PEI_ATA_CONTROLLER_PPI;
 | 
						|
 | 
						|
///
 | 
						|
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
 | 
						|
/// disable the IDE channels.
 | 
						|
/// This is designed for old generation chipset with PATA/SATA controllers.
 | 
						|
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
 | 
						|
///
 | 
						|
#define PEI_ICH_IDE_NONE        0x00
 | 
						|
 | 
						|
///
 | 
						|
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
 | 
						|
/// enable the Primary IDE channel.
 | 
						|
/// This is designed for old generation chipset with PATA/SATA controllers.
 | 
						|
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
 | 
						|
///
 | 
						|
#define PEI_ICH_IDE_PRIMARY     0x01
 | 
						|
 | 
						|
///
 | 
						|
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
 | 
						|
/// enable the Secondary IDE channel.
 | 
						|
/// This is designed for old generation chipset with PATA/SATA controllers.
 | 
						|
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
 | 
						|
///
 | 
						|
#define PEI_ICH_IDE_SECONDARY   0x02
 | 
						|
 | 
						|
///
 | 
						|
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
 | 
						|
/// disable the SATA channel.
 | 
						|
/// This is designed for old generation chipset with PATA/SATA controllers.
 | 
						|
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
 | 
						|
///
 | 
						|
#define PEI_ICH_SATA_NONE       0x04
 | 
						|
 | 
						|
///
 | 
						|
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
 | 
						|
/// enable the Primary SATA channel.
 | 
						|
/// This is designed for old generation chipset with PATA/SATA controllers.
 | 
						|
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
 | 
						|
///
 | 
						|
#define PEI_ICH_SATA_PRIMARY    0x08
 | 
						|
 | 
						|
///
 | 
						|
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
 | 
						|
/// enable the Secondary SATA channel.
 | 
						|
/// This is designed for old generation chipset with PATA/SATA controllers.
 | 
						|
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
 | 
						|
///
 | 
						|
#define PEI_ICH_SATA_SECONDARY  0x010
 | 
						|
 | 
						|
///
 | 
						|
/// Structure that contains the base addresses for the IDE registers
 | 
						|
///
 | 
						|
typedef struct {
 | 
						|
  ///
 | 
						|
  /// Base I/O port address of the IDE controller's command block
 | 
						|
  ///
 | 
						|
  UINT16  CommandBlockBaseAddr;
 | 
						|
  ///
 | 
						|
  /// Base I/O port address of the IDE controller's control block
 | 
						|
  ///
 | 
						|
  UINT16  ControlBlockBaseAddr;
 | 
						|
} IDE_REGS_BASE_ADDR;
 | 
						|
 | 
						|
/**
 | 
						|
  Sets IDE and SATA channels to an enabled or disabled state.
 | 
						|
 | 
						|
  This service enables or disables the IDE and SATA channels specified by ChannelMask.
 | 
						|
  It may ignore ChannelMask setting to enable or disable IDE and SATA channels based on the platform policy.
 | 
						|
  The number of the enabled channels will be returned by GET_IDE_REGS_BASE_ADDR() function.
 | 
						|
 | 
						|
  If the new state is set, then EFI_SUCCESS is returned.  If the new state can
 | 
						|
  not be set, then EFI_DEVICE_ERROR is returned.
 | 
						|
 | 
						|
  @param[in] PeiServices   The pointer to the PEI Services Table.
 | 
						|
  @param[in] This          The pointer to this instance of the PEI_ATA_CONTROLLER_PPI.
 | 
						|
  @param[in] ChannelMask   The bitmask that identifies the IDE and SATA channels to
 | 
						|
                           enable or disable. This parameter is optional.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS        The IDE or SATA channels were enabled or disabled successfully.
 | 
						|
  @retval EFI_DEVICE_ERROR   The IDE or SATA channels could not be enabled or disabled.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *PEI_ENABLE_ATA)(
 | 
						|
  IN EFI_PEI_SERVICES        **PeiServices,
 | 
						|
  IN PEI_ATA_CONTROLLER_PPI  *This,
 | 
						|
  IN UINT8                   ChannelMask
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Retrieves the I/O port base addresses for command and control registers of the
 | 
						|
  enabled IDE/SATA channels.
 | 
						|
 | 
						|
  This service fills in the structure poionted to by IdeRegsBaseAddr with the I/O
 | 
						|
  port base addresses for the command and control registers of the IDE and SATA
 | 
						|
  channels that were previously enabled in EnableAtaChannel().  The number of
 | 
						|
  enabled IDE and SATA channels is returned.
 | 
						|
 | 
						|
  @param[in]  PeiServices       The pointer to the PEI Services Table.
 | 
						|
  @param[in]  This              The pointer to this instance of the PEI_ATA_CONTROLLER_PPI.
 | 
						|
  @param[out] IdeRegsBaseAddr   The pointer to caller allocated space to return the
 | 
						|
                                I/O port base addresses of the IDE and SATA channels
 | 
						|
                                that were previosuly enabled with EnableAtaChannel().
 | 
						|
 | 
						|
  @return   The number of enabled IDE and SATA channels in the platform.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
UINT32
 | 
						|
(EFIAPI *GET_IDE_REGS_BASE_ADDR)(
 | 
						|
  IN  EFI_PEI_SERVICES        **PeiServices,
 | 
						|
  IN  PEI_ATA_CONTROLLER_PPI  *This,
 | 
						|
  OUT IDE_REGS_BASE_ADDR      *IdeRegsBaseAddr
 | 
						|
  );
 | 
						|
 | 
						|
///
 | 
						|
/// This PPI contains services to enable and disable IDE and SATA channels and
 | 
						|
/// retrieves the base I/O port addresses to the enabled IDE and SATA channels.
 | 
						|
///
 | 
						|
struct _PEI_ATA_CONTROLLER_PPI {
 | 
						|
  PEI_ENABLE_ATA          EnableAtaChannel;
 | 
						|
  GET_IDE_REGS_BASE_ADDR  GetIdeRegsBaseAddr;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gPeiAtaControllerPpiGuid;
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
 |