text: /***********************license start***********************************
  * Copyright (c) 2003-2017  Cavium Inc. (support@cavium.com). All rights
  * reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  * met:
  *
  *   * Redistributions of source code must retain the above copyright
  *     notice, this list of conditions and the following disclaimer.
  *
  *   * Redistributions in binary form must reproduce the above
  *     copyright notice, this list of conditions and the following
  *     disclaimer in the documentation and/or other materials provided
  *     with the distribution.
  *
  *   * Neither the name of Cavium Inc. nor the names of
  *     its contributors may be used to endorse or promote products
  *     derived from this software without specific prior written
  *     permission.
  *
  * This Software, including technical data, may be subject to U.S. export
  * control laws, including the U.S. Export Administration Act and its
  * associated regulations, and may be subject to export or import
  * regulations in other countries.
  *
  * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
  * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR
  * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT
  * TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY
  * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT
  * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES
  * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR
  * PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT,
  * QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE  RISK
  * ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
  ***********************license end**************************************/
  
  /**
   * @file
   *
   * Interface to the NIC.
   *
   * @addtogroup hal
   * @{
   */
  
  typedef enum
  {
      BDK_NIC_TYPE_BGX,           /* All chips */
      BDK_NIC_TYPE_TNS,           /* Only allowed on CN88XX */
      BDK_NIC_TYPE_LBK,           /* CN81XX and CN83XX */
      BDK_NIC_TYPE_RGMII,         /* CN83XX */
  } bdk_nic_type_t;
  
  /**
   * Configure NIC for a specific port. This is called for each
   * port on every interface that connects to NIC.
   *
   * @param handle Handle for port to config
   * @param ntype  Type of LMAC this NIC connects to
   * @param lmac_credits
   *               Size of the LMAC buffer in bytes. Used to configure the number of credits to
   *               setup between the NIC and LMAC
   *
   * @return Zero on success, negative on failure
   */
  extern int bdk_nic_port_init(bdk_if_handle_t handle, bdk_nic_type_t ntype, int lmac_credits);
  
  /**
   * Get the current TX queue depth. Note that this operation may be slow
   * and adversly affect packet IO performance.
   *
   * @param handle Port to check
   *
   * @return Depth of the queue in packets
   */
  extern int bdk_nic_get_queue_depth(bdk_if_handle_t handle);
  
  /**
   * Send a packet
   *
   * @param handle Handle of port to send on
   * @param packet Packet to send
   *
   * @return Zero on success, negative on failure
   */
  extern int bdk_nic_transmit(bdk_if_handle_t handle, const bdk_if_packet_t *packet);
  
  /**
   * Query NIC and fill in the transmit stats for the supplied
   * interface handle.
   *
   * @param handle Port handle
   */
  extern void bdk_nic_fill_tx_stats(bdk_if_handle_t handle);
  
  /**
   * Query NIC and fill in the receive stats for the supplied
   * interface handle.
   *
   * @param handle Port handle
   */
  extern void bdk_nic_fill_rx_stats(bdk_if_handle_t handle);
  
  /** @} */
  