/** @File
    Routines for translating between host and network byte-order.

    Copyright (c) 2011, 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 that accompanies this
    distribution.  The full text of the license may be found at
    http://opensource.org/licenses/bsd-license.

    THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
    WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/
#include  <Library/BaseLib.h>
#include  <LibConfig.h>
#include  <sys/endian.h>

// Undefine macro versions of the functions to be defined below.
#undef  htonl
#undef  htons
#undef  ntohl
#undef  ntohs

/** 32-bit Host to Network byte order conversion.

  @param[in]  Datum   The 32-bit value to be converted.
  @return     Datum, converted to network byte order.
**/
uint32_t
htonl(
  IN  uint32_t Datum
  )
{
#if BYTE_ORDER == LITTLE_ENDIAN
  return SwapBytes32(Datum);
#else
  return Datum;
#endif
}

/** 16-bit Host to Network byte order conversion.

  @param[in]  Datum   The 16-bit value to be converted.
  @return     Datum, converted to network byte order.
**/
uint16_t
htons(
  IN  uint16_t Datum
  )
{
#if BYTE_ORDER == LITTLE_ENDIAN
  return SwapBytes16(Datum);
#else
  return Datum;
#endif
}

/** 32-bit Network to Host byte order conversion.

  @param[in]  Datum   The 16-bit value to be converted.
  @return     Datum, converted to host byte order.
**/
uint32_t
ntohl(
  IN  uint32_t Datum
  )
{
#if BYTE_ORDER == LITTLE_ENDIAN
  return SwapBytes32(Datum);
#else
  return Datum;
#endif
}

/** 16-bit Network to Host byte order conversion.

  @param[in]  Datum   The 16-bit value to be converted.
  @return     Datum, converted to host byte order.
**/
uint16_t
ntohs(
  IN uint16_t Datum
  )
{
#if BYTE_ORDER == LITTLE_ENDIAN
  return SwapBytes16(Datum);
#else
  return Datum;
#endif
}
