/* $NoKeywords */
/**
 * @file
 *
 * AmdSataInitLib.h
 *
 * Public SATA PHY layer initilization and training routines for Serdes registers.
 *
 * @xrefitem bom "File Content Label" "Release Content"
 * @e project: FDK
 * @e sub-project: UEFI
 * @e version: $Revision: 338015 $ @e date: $Date: 2016-04-04 10:40:16 -0500 (Mon, 04 Apr 2016) $
 *
 */
/*****************************************************************************
*
*  Copyright 2013 - 2016 ADVANCED MICRO DEVICES, INC.  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 _AMD_SATA_INIT_LIB_H_
#define _AMD_SATA_INIT_LIB_H_
#ifdef __cplusplus
  extern "C" {
  #endif

  /**
   *---------------------------------------------------------------------------------------
   *
   *  SataPhyInit
   *
   *  Description:
   *    Library call that trains the SATA PHY.
   *
   *  Control flow:
   *    1. Initialize variables
   *    2. Continue to set Serdes bits while not locked
   *
   *  Parameters:
   *    @param[in]      cmu_number           Cmu block number. Port 0,1 belongs to CMU 0
   *    @param[in]      EvenPortGen           Port Gen value for even port in given CMU
   *    @param[in]      OddPortGen            Port Gen Value for Odd Port in given CMU
   *
   *    @return         VOID
   *
   *------------------------------------------------------------------------------------
   **/
  VOID
  EFIAPI
  SataPhyInit (
    IN       UINT32 cmu_number,
    IN       UINT32 EvenPortGen,
    IN       UINT32 OddPortGen
    );

  /**
   *---------------------------------------------------------------------------------------
   *
   *  SetCwMinSata0
   *
   *  Description:
   *
   *  Parameters:
   *    @param[in]      Portnum            Port number
   *
   *    @return         VOID
   *
   *------------------------------------------------------------------------------------
   **/
  VOID
  EFIAPI
  SetCwMinSata0 (
    IN       UINT32 Portnum
    );

  /**
   *---------------------------------------------------------------------------------------
   *
   *  SetCwMinSata1
   *
   *  Description:
   *
   *  Parameters:
   *    @param[in]      Portnum            Port number
   *
   *    @return         VOID
   *
   *------------------------------------------------------------------------------------
   **/
  VOID
  EFIAPI
  SetCwMinSata1 (
    IN       UINT32 Portnum
    );

  /**
   *---------------------------------------------------------------------------------------
   *
   *  SetPrdSingleSata0
   *
   *  Description:
   *
   *  Parameters:
   *    @param[in]      Portnum            Port number
   *
   *    @return         VOID
   *
   *------------------------------------------------------------------------------------
   **/
  VOID
  EFIAPI
  SetPrdSingleSata0 (
    IN       UINT32 Portnum
    );

  /**
  *---------------------------------------------------------------------------------------
  *
  *  SetPrdSingleSata1
  *
  *  Description:
  *
  *  Parameters:
  *    @param[in]      Portnum            Port number
  *
  *    @return         VOID
  *
  *------------------------------------------------------------------------------------
  **/
  VOID
  EFIAPI
  SetPrdSingleSata1 (
    IN       UINT32 Portnum
    );

/****** DO NOT WRITE BELOW THIS LINE *******/
  #ifdef __cplusplus
  }
#endif
#endif

