mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 14:27:52 +00:00 
			
		
		
		
	 9d510e61fc
			
		
	
	
		9d510e61fc
		
	
	
	
	
		
			
			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
 |