1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 2/* Copyright (c) 2015-2018 Mellanox Technologies. All rights reserved */ 3 4#ifndef _MLXSW_EMAD_H 5#define _MLXSW_EMAD_H 6 7#define MLXSW_EMAD_MAX_FRAME_LEN 1518 /* Length in u8 */ 8#define MLXSW_EMAD_MAX_RETRY 5 9 10/* EMAD Ethernet header */ 11#define MLXSW_EMAD_ETH_HDR_LEN 0x10 /* Length in u8 */ 12#define MLXSW_EMAD_EH_DMAC "\x01\x02\xc9\x00\x00\x01" 13#define MLXSW_EMAD_EH_SMAC "\x00\x02\xc9\x01\x02\x03" 14#define MLXSW_EMAD_EH_ETHERTYPE 0x8932 15#define MLXSW_EMAD_EH_MLX_PROTO 0 16#define MLXSW_EMAD_EH_PROTO_VERSION 0 17 18/* EMAD TLV Types */ 19enum { 20 MLXSW_EMAD_TLV_TYPE_END, 21 MLXSW_EMAD_TLV_TYPE_OP, 22 MLXSW_EMAD_TLV_TYPE_STRING, 23 MLXSW_EMAD_TLV_TYPE_REG, 24 MLXSW_EMAD_TLV_TYPE_LATENCY, 25}; 26 27/* OP TLV */ 28#define MLXSW_EMAD_OP_TLV_LEN 4 /* Length in u32 */ 29 30enum { 31 MLXSW_EMAD_OP_TLV_CLASS_REG_ACCESS = 1, 32 MLXSW_EMAD_OP_TLV_CLASS_IPC = 2, 33}; 34 35enum mlxsw_emad_op_tlv_status { 36 MLXSW_EMAD_OP_TLV_STATUS_SUCCESS, 37 MLXSW_EMAD_OP_TLV_STATUS_BUSY, 38 MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED, 39 MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV, 40 MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED, 41 MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED, 42 MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED, 43 MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER, 44 MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE, 45 MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK, 46 MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR = 0x70, 47}; 48 49static inline char *mlxsw_emad_op_tlv_status_str(u8 status) 50{ 51 switch (status) { 52 case MLXSW_EMAD_OP_TLV_STATUS_SUCCESS: 53 return "operation performed"; 54 case MLXSW_EMAD_OP_TLV_STATUS_BUSY: 55 return "device is busy"; 56 case MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED: 57 return "version not supported"; 58 case MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV: 59 return "unknown TLV"; 60 case MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED: 61 return "register not supported"; 62 case MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED: 63 return "class not supported"; 64 case MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED: 65 return "method not supported"; 66 case MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER: 67 return "bad parameter"; 68 case MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE: 69 return "resource not available"; 70 case MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK: 71 return "acknowledged. retransmit"; 72 case MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR: 73 return "internal error"; 74 default: 75 return "*UNKNOWN*"; 76 } 77} 78 79enum { 80 MLXSW_EMAD_OP_TLV_REQUEST, 81 MLXSW_EMAD_OP_TLV_RESPONSE 82}; 83 84enum { 85 MLXSW_EMAD_OP_TLV_METHOD_QUERY = 1, 86 MLXSW_EMAD_OP_TLV_METHOD_WRITE = 2, 87 MLXSW_EMAD_OP_TLV_METHOD_SEND = 3, 88 MLXSW_EMAD_OP_TLV_METHOD_EVENT = 5, 89}; 90 91/* STRING TLV */ 92#define MLXSW_EMAD_STRING_TLV_LEN 33 /* Length in u32 */ 93 94/* LATENCY TLV */ 95#define MLXSW_EMAD_LATENCY_TLV_LEN 7 /* Length in u32 */ 96 97/* END TLV */ 98#define MLXSW_EMAD_END_TLV_LEN 1 /* Length in u32 */ 99 100#endif 101