162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/* Copyright (c) 2015-2018 Mellanox Technologies. All rights reserved */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef _MLXSW_EMAD_H 562306a36Sopenharmony_ci#define _MLXSW_EMAD_H 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#define MLXSW_EMAD_MAX_FRAME_LEN 1518 /* Length in u8 */ 862306a36Sopenharmony_ci#define MLXSW_EMAD_MAX_RETRY 5 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci/* EMAD Ethernet header */ 1162306a36Sopenharmony_ci#define MLXSW_EMAD_ETH_HDR_LEN 0x10 /* Length in u8 */ 1262306a36Sopenharmony_ci#define MLXSW_EMAD_EH_DMAC "\x01\x02\xc9\x00\x00\x01" 1362306a36Sopenharmony_ci#define MLXSW_EMAD_EH_SMAC "\x00\x02\xc9\x01\x02\x03" 1462306a36Sopenharmony_ci#define MLXSW_EMAD_EH_ETHERTYPE 0x8932 1562306a36Sopenharmony_ci#define MLXSW_EMAD_EH_MLX_PROTO 0 1662306a36Sopenharmony_ci#define MLXSW_EMAD_EH_PROTO_VERSION 0 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* EMAD TLV Types */ 1962306a36Sopenharmony_cienum { 2062306a36Sopenharmony_ci MLXSW_EMAD_TLV_TYPE_END, 2162306a36Sopenharmony_ci MLXSW_EMAD_TLV_TYPE_OP, 2262306a36Sopenharmony_ci MLXSW_EMAD_TLV_TYPE_STRING, 2362306a36Sopenharmony_ci MLXSW_EMAD_TLV_TYPE_REG, 2462306a36Sopenharmony_ci MLXSW_EMAD_TLV_TYPE_LATENCY, 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* OP TLV */ 2862306a36Sopenharmony_ci#define MLXSW_EMAD_OP_TLV_LEN 4 /* Length in u32 */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cienum { 3162306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_CLASS_REG_ACCESS = 1, 3262306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_CLASS_IPC = 2, 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cienum mlxsw_emad_op_tlv_status { 3662306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_SUCCESS, 3762306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_BUSY, 3862306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED, 3962306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV, 4062306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED, 4162306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED, 4262306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED, 4362306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER, 4462306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE, 4562306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK, 4662306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR = 0x70, 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistatic inline char *mlxsw_emad_op_tlv_status_str(u8 status) 5062306a36Sopenharmony_ci{ 5162306a36Sopenharmony_ci switch (status) { 5262306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_SUCCESS: 5362306a36Sopenharmony_ci return "operation performed"; 5462306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_BUSY: 5562306a36Sopenharmony_ci return "device is busy"; 5662306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED: 5762306a36Sopenharmony_ci return "version not supported"; 5862306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV: 5962306a36Sopenharmony_ci return "unknown TLV"; 6062306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED: 6162306a36Sopenharmony_ci return "register not supported"; 6262306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED: 6362306a36Sopenharmony_ci return "class not supported"; 6462306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED: 6562306a36Sopenharmony_ci return "method not supported"; 6662306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER: 6762306a36Sopenharmony_ci return "bad parameter"; 6862306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE: 6962306a36Sopenharmony_ci return "resource not available"; 7062306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK: 7162306a36Sopenharmony_ci return "acknowledged. retransmit"; 7262306a36Sopenharmony_ci case MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR: 7362306a36Sopenharmony_ci return "internal error"; 7462306a36Sopenharmony_ci default: 7562306a36Sopenharmony_ci return "*UNKNOWN*"; 7662306a36Sopenharmony_ci } 7762306a36Sopenharmony_ci} 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_cienum { 8062306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_REQUEST, 8162306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_RESPONSE 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cienum { 8562306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_METHOD_QUERY = 1, 8662306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_METHOD_WRITE = 2, 8762306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_METHOD_SEND = 3, 8862306a36Sopenharmony_ci MLXSW_EMAD_OP_TLV_METHOD_EVENT = 5, 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci/* STRING TLV */ 9262306a36Sopenharmony_ci#define MLXSW_EMAD_STRING_TLV_LEN 33 /* Length in u32 */ 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* LATENCY TLV */ 9562306a36Sopenharmony_ci#define MLXSW_EMAD_LATENCY_TLV_LEN 7 /* Length in u32 */ 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* END TLV */ 9862306a36Sopenharmony_ci#define MLXSW_EMAD_END_TLV_LEN 1 /* Length in u32 */ 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci#endif 101