101 lines · c
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_H5#define _MLXSW_EMAD_H6 7#define MLXSW_EMAD_MAX_FRAME_LEN 1518 /* Length in u8 */8#define MLXSW_EMAD_MAX_RETRY 59 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 0x893215#define MLXSW_EMAD_EH_MLX_PROTO 016#define MLXSW_EMAD_EH_PROTO_VERSION 017 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_RESPONSE82};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#endif101