mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-03 21:17:23 +01:00 
			
		
		
		
	https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
		
			
				
	
	
		
			214 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EDKII_ATA_PASS_THRU_PPI_H_
 | 
						|
#define _EDKII_ATA_PASS_THRU_PPI_H_
 | 
						|
 | 
						|
#include <Protocol/DevicePath.h>
 | 
						|
#include <Protocol/AtaPassThru.h>
 | 
						|
 | 
						|
///
 | 
						|
/// Global ID for the EDKII_PEI_ATA_PASS_THRU_PPI.
 | 
						|
///
 | 
						|
#define EDKII_PEI_ATA_PASS_THRU_PPI_GUID \
 | 
						|
  { \
 | 
						|
    0xa16473fd, 0xd474, 0x4c89, { 0xae, 0xc7, 0x90, 0xb8, 0x3c, 0x73, 0x86, 0x9 } \
 | 
						|
  }
 | 
						|
 | 
						|
//
 | 
						|
// Forward declaration for the EDKII_PEI_ATA_PASS_THRU_PPI.
 | 
						|
//
 | 
						|
typedef struct _EDKII_PEI_ATA_PASS_THRU_PPI  EDKII_PEI_ATA_PASS_THRU_PPI;
 | 
						|
 | 
						|
//
 | 
						|
// Revision The revision to which the ATA Pass Thru PPI interface adheres.
 | 
						|
//          All future revisions must be backwards compatible.
 | 
						|
//          If a future version is not back wards compatible it is not the same GUID.
 | 
						|
//
 | 
						|
#define EDKII_PEI_ATA_PASS_THRU_PPI_REVISION    0x00010000
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Sends an ATA command to an ATA device that is attached to the ATA controller.
 | 
						|
 | 
						|
  @param[in]     This                  The PPI instance pointer.
 | 
						|
  @param[in]     Port                  The port number of the ATA device to send
 | 
						|
                                       the command.
 | 
						|
  @param[in]     PortMultiplierPort    The port multiplier port number of the ATA
 | 
						|
                                       device to send the command.
 | 
						|
                                       If there is no port multiplier, then specify
 | 
						|
                                       0xFFFF.
 | 
						|
  @param[in,out] Packet                A pointer to the ATA command to send to
 | 
						|
                                       the ATA device specified by Port and
 | 
						|
                                       PortMultiplierPort.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS              The ATA command was sent by the host. For
 | 
						|
                                   bi-directional commands, InTransferLength bytes
 | 
						|
                                   were transferred from InDataBuffer. For write
 | 
						|
                                   and bi-directional commands, OutTransferLength
 | 
						|
                                   bytes were transferred by OutDataBuffer.
 | 
						|
  @retval EFI_NOT_FOUND            The specified ATA device is not found.
 | 
						|
  @retval EFI_INVALID_PARAMETER    The contents of Acb are invalid. The ATA command
 | 
						|
                                   was not sent, so no additional status information
 | 
						|
                                   is available.
 | 
						|
  @retval EFI_BAD_BUFFER_SIZE      The ATA command was not executed. The number
 | 
						|
                                   of bytes that could be transferred is returned
 | 
						|
                                   in InTransferLength. For write and bi-directional
 | 
						|
                                   commands, OutTransferLength bytes were transferred
 | 
						|
                                   by OutDataBuffer.
 | 
						|
  @retval EFI_NOT_READY            The ATA command could not be sent because there
 | 
						|
                                   are too many ATA commands already queued. The
 | 
						|
                                   caller may retry again later.
 | 
						|
  @retval EFI_DEVICE_ERROR         A device error occurred while attempting to
 | 
						|
                                   send the ATA command.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_PEI_ATA_PASS_THRU_PASSTHRU) (
 | 
						|
  IN     EDKII_PEI_ATA_PASS_THRU_PPI         *This,
 | 
						|
  IN     UINT16                              Port,
 | 
						|
  IN     UINT16                              PortMultiplierPort,
 | 
						|
  IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET    *Packet
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Used to retrieve the list of legal port numbers for ATA devices on an ATA controller.
 | 
						|
  These can either be the list of ports where ATA devices are actually present or the
 | 
						|
  list of legal port numbers for the ATA controller. Regardless, the caller of this
 | 
						|
  function must probe the port number returned to see if an ATA device is actually
 | 
						|
  present at that location on the ATA controller.
 | 
						|
 | 
						|
  The GetNextPort() function retrieves the port number on an ATA controller. If on
 | 
						|
  input Port is 0xFFFF, then the port number of the first port on the ATA controller
 | 
						|
  is returned in Port and EFI_SUCCESS is returned.
 | 
						|
 | 
						|
  If Port is a port number that was returned on a previous call to GetNextPort(),
 | 
						|
  then the port number of the next port on the ATA controller is returned in Port,
 | 
						|
  and EFI_SUCCESS is returned. If Port is not 0xFFFF and Port was not returned on
 | 
						|
  a previous call to GetNextPort(), then EFI_INVALID_PARAMETER is returned.
 | 
						|
 | 
						|
  If Port is the port number of the last port on the ATA controller, then EFI_NOT_FOUND
 | 
						|
  is returned.
 | 
						|
 | 
						|
  @param[in]     This    The PPI instance pointer.
 | 
						|
  @param[in,out] Port    On input, a pointer to the port number on the ATA controller.
 | 
						|
                         On output, a pointer to the next port number on the ATA
 | 
						|
                         controller. An input value of 0xFFFF retrieves the first
 | 
						|
                         port number on the ATA controller.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS              The next port number on the ATA controller was
 | 
						|
                                   returned in Port.
 | 
						|
  @retval EFI_NOT_FOUND            There are no more ports on this ATA controller.
 | 
						|
  @retval EFI_INVALID_PARAMETER    Port is not 0xFFFF and Port was not returned
 | 
						|
                                   on a previous call to GetNextPort().
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_PEI_ATA_PASS_THRU_THRU_GET_NEXT_PORT) (
 | 
						|
  IN     EDKII_PEI_ATA_PASS_THRU_PPI    *This,
 | 
						|
  IN OUT UINT16                         *Port
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Used to retrieve the list of legal port multiplier port numbers for ATA devices
 | 
						|
  on a port of an ATA controller. These can either be the list of port multiplier
 | 
						|
  ports where ATA devices are actually present on port or the list of legal port
 | 
						|
  multiplier ports on that port. Regardless, the caller of this function must probe
 | 
						|
  the port number and port multiplier port number returned to see if an ATA device
 | 
						|
  is actually present.
 | 
						|
 | 
						|
  The GetNextDevice() function retrieves the port multiplier port number of an ATA
 | 
						|
  device present on a port of an ATA controller.
 | 
						|
 | 
						|
  If PortMultiplierPort points to a port multiplier port number value that was
 | 
						|
  returned on a previous call to GetNextDevice(), then the port multiplier port
 | 
						|
  number of the next ATA device on the port of the ATA controller is returned in
 | 
						|
  PortMultiplierPort, and EFI_SUCCESS is returned.
 | 
						|
 | 
						|
  If PortMultiplierPort points to 0xFFFF, then the port multiplier port number
 | 
						|
  of the first ATA device on port of the ATA controller is returned in PortMultiplierPort
 | 
						|
  and EFI_SUCCESS is returned.
 | 
						|
 | 
						|
  If PortMultiplierPort is not 0xFFFF and the value pointed to by PortMultiplierPort
 | 
						|
  was not returned on a previous call to GetNextDevice(), then EFI_INVALID_PARAMETER
 | 
						|
  is returned.
 | 
						|
 | 
						|
  If PortMultiplierPort is the port multiplier port number of the last ATA device
 | 
						|
  on the port of the ATA controller, then EFI_NOT_FOUND is returned.
 | 
						|
 | 
						|
  @param[in]     This                  The PPI instance pointer.
 | 
						|
  @param[in]     Port                  The port number present on the ATA controller.
 | 
						|
  @param[in,out] PortMultiplierPort    On input, a pointer to the port multiplier
 | 
						|
                                       port number of an ATA device present on the
 | 
						|
                                       ATA controller. If on input a PortMultiplierPort
 | 
						|
                                       of 0xFFFF is specified, then the port multiplier
 | 
						|
                                       port number of the first ATA device is returned.
 | 
						|
                                       On output, a pointer to the port multiplier port
 | 
						|
                                       number of the next ATA device present on an ATA
 | 
						|
                                       controller.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS              The port multiplier port number of the next ATA
 | 
						|
                                   device on the port of the ATA controller was
 | 
						|
                                   returned in PortMultiplierPort.
 | 
						|
  @retval EFI_NOT_FOUND            There are no more ATA devices on this port of
 | 
						|
                                   the ATA controller.
 | 
						|
  @retval EFI_INVALID_PARAMETER    PortMultiplierPort is not 0xFFFF, and PortMultiplierPort
 | 
						|
                                   was not returned on a previous call to GetNextDevice().
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_PEI_ATA_PASS_THRU_GET_NEXT_DEVICE) (
 | 
						|
  IN     EDKII_PEI_ATA_PASS_THRU_PPI    *This,
 | 
						|
  IN     UINT16                         Port,
 | 
						|
  IN OUT UINT16                         *PortMultiplierPort
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Gets the device path information of the underlying ATA host controller.
 | 
						|
 | 
						|
  @param[in]  This                The PPI instance pointer.
 | 
						|
  @param[out] DevicePathLength    The length of the device path in bytes specified
 | 
						|
                                  by DevicePath.
 | 
						|
  @param[out] DevicePath          The device path of the underlying ATA host controller.
 | 
						|
                                  This field re-uses EFI Device Path Protocol as
 | 
						|
                                  defined by Section 10.2 EFI Device Path Protocol
 | 
						|
                                  of UEFI 2.7 Specification.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS              The device path of the ATA host controller has
 | 
						|
                                   been successfully returned.
 | 
						|
  @retval EFI_INVALID_PARAMETER    DevicePathLength or DevicePath is NULL.
 | 
						|
  @retval EFI_OUT_OF_RESOURCES     Not enough resource to return the device path.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EDKII_PEI_ATA_PASS_THRU_GET_DEVICE_PATH) (
 | 
						|
  IN  EDKII_PEI_ATA_PASS_THRU_PPI    *This,
 | 
						|
  OUT UINTN                          *DevicePathLength,
 | 
						|
  OUT EFI_DEVICE_PATH_PROTOCOL       **DevicePath
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// EDKII_PEI_ATA_PASS_THRU_PPI provides the services that are required to send
 | 
						|
// ATA commands to an ATA device during PEI.
 | 
						|
//
 | 
						|
struct _EDKII_PEI_ATA_PASS_THRU_PPI {
 | 
						|
  UINT64                                        Revision;
 | 
						|
  EFI_ATA_PASS_THRU_MODE                        *Mode;
 | 
						|
  EDKII_PEI_ATA_PASS_THRU_PASSTHRU              PassThru;
 | 
						|
  EDKII_PEI_ATA_PASS_THRU_THRU_GET_NEXT_PORT    GetNextPort;
 | 
						|
  EDKII_PEI_ATA_PASS_THRU_GET_NEXT_DEVICE       GetNextDevice;
 | 
						|
  EDKII_PEI_ATA_PASS_THRU_GET_DEVICE_PATH       GetDevicePath;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEdkiiPeiAtaPassThruPpiGuid;
 | 
						|
 | 
						|
#endif
 |