/*******************************************************************************
 * BAREFOOT NETWORKS CONFIDENTIAL & PROPRIETARY
 *
 * Copyright (c) 2015-2016 Barefoot Networks, Inc.

 * All Rights Reserved.
 *
 * NOTICE: All information contained herein is, and remains the property of
 * Barefoot Networks, Inc. and its suppliers, if any. The intellectual and
 * technical concepts contained herein are proprietary to Barefoot Networks,
 * Inc.
 * and its suppliers and may be covered by U.S. and Foreign Patents, patents in
 * process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material is
 * strictly forbidden unless prior written permission is obtained from
 * Barefoot Networks, Inc.
 *
 * No warranty, explicit or implicit is provided, unless granted under a
 * written agreement with Barefoot Networks, Inc.
 *
 * $Id: $
 *
 ******************************************************************************/
/*
        pltfm_pm thrift file
*/

namespace py pltfm_pm_rpc
namespace cpp pltfm_pm_rpc

typedef i32 pltfm_pm_status_t
typedef i32 pltfm_pm_dev_port_t
typedef byte pltfm_pm_device_t

exception InvalidPltfmPmOperation {
  1:i32 code
}

enum pltfm_pm_port_speed_t {
  BF_SPEED_NONE = 0,
  BF_SPEED_1G = 1,
  BF_SPEED_10G = 2,
  BF_SPEED_25G = 3,
  BF_SPEED_40G = 4,
  BF_SPEED_40G_NB = 5,
  BF_SPEED_50G = 6,
  BF_SPEED_100G = 7,
  BF_SPEED_40G_NON_BREAKABLE = 8
}

enum pltfm_pm_fec_type_t {
  BF_FEC_TYP_NONE = 0,
  BF_FEC_TYP_FIRECODE = 1,
  BF_FEC_TYP_REED_SOLOMON = 2
}

enum pltfm_pm_oper_status_t {
  DOWN = 0,
  UP = 1
}

enum pltfm_pm_board_type_t {
  BF_PLTFM_BD_ID_MAVERICKS_P0A = 0x0234,
  BF_PLTFM_BD_ID_MAVERICKS_P0B = 0x1234,
  BF_PLTFM_BD_ID_MONTARA_P0A = 0x2234,
  BF_PLTFM_BD_ID_MONTARA_P0B = 0x3234,
  BF_PLTFM_BD_ID_MAVERICKS_P0B_EMU = 0x4234,
  BF_PLTFM_BD_ID_UNKNOWN = 0XFFFF
}

service pltfm_pm_rpc {
    /* init */
    pltfm_pm_status_t pltfm_pm_port_add(1:pltfm_pm_device_t device, 2:pltfm_pm_dev_port_t dev_port, 3:pltfm_pm_port_speed_t ps, 4:pltfm_pm_fec_type_t fec) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_port_del(1:pltfm_pm_device_t device, 2:pltfm_pm_dev_port_t dev_port) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_port_enable(1:pltfm_pm_device_t device, 2:pltfm_pm_dev_port_t dev_port) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_port_dis(1:pltfm_pm_device_t device, 2:pltfm_pm_dev_port_t dev_port) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_switchd_port_cleanup(1:pltfm_pm_device_t device) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_oper_status_t pltfm_pm_port_oper_status_get(1:pltfm_pm_device_t device, 2:pltfm_pm_dev_port_t dev_port) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_board_type_t pltfm_pm_board_type_get() throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_port_an_set(1:pltfm_pm_device_t device, 2:pltfm_pm_dev_port_t dev_port, 3:i32 an_flag) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_serdes_lane_map_set(1:pltfm_pm_device_t device) throws (1:InvalidPltfmPmOperation ouch);
    pltfm_pm_status_t pltfm_pm_serdes_init(1:pltfm_pm_device_t device) throws (1:InvalidPltfmPmOperation ouch);
}
