0001
0002
0003
0004 #ifndef _MLXSW_EMAD_H
0005 #define _MLXSW_EMAD_H
0006
0007 #define MLXSW_EMAD_MAX_FRAME_LEN 1518
0008 #define MLXSW_EMAD_MAX_RETRY 5
0009
0010
0011 #define MLXSW_EMAD_ETH_HDR_LEN 0x10
0012 #define MLXSW_EMAD_EH_DMAC "\x01\x02\xc9\x00\x00\x01"
0013 #define MLXSW_EMAD_EH_SMAC "\x00\x02\xc9\x01\x02\x03"
0014 #define MLXSW_EMAD_EH_ETHERTYPE 0x8932
0015 #define MLXSW_EMAD_EH_MLX_PROTO 0
0016 #define MLXSW_EMAD_EH_PROTO_VERSION 0
0017
0018
0019 enum {
0020 MLXSW_EMAD_TLV_TYPE_END,
0021 MLXSW_EMAD_TLV_TYPE_OP,
0022 MLXSW_EMAD_TLV_TYPE_STRING,
0023 MLXSW_EMAD_TLV_TYPE_REG,
0024 };
0025
0026
0027 #define MLXSW_EMAD_OP_TLV_LEN 4
0028
0029 enum {
0030 MLXSW_EMAD_OP_TLV_CLASS_REG_ACCESS = 1,
0031 MLXSW_EMAD_OP_TLV_CLASS_IPC = 2,
0032 };
0033
0034 enum mlxsw_emad_op_tlv_status {
0035 MLXSW_EMAD_OP_TLV_STATUS_SUCCESS,
0036 MLXSW_EMAD_OP_TLV_STATUS_BUSY,
0037 MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED,
0038 MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV,
0039 MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED,
0040 MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED,
0041 MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED,
0042 MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER,
0043 MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE,
0044 MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK,
0045 MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR = 0x70,
0046 };
0047
0048 static inline char *mlxsw_emad_op_tlv_status_str(u8 status)
0049 {
0050 switch (status) {
0051 case MLXSW_EMAD_OP_TLV_STATUS_SUCCESS:
0052 return "operation performed";
0053 case MLXSW_EMAD_OP_TLV_STATUS_BUSY:
0054 return "device is busy";
0055 case MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED:
0056 return "version not supported";
0057 case MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV:
0058 return "unknown TLV";
0059 case MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED:
0060 return "register not supported";
0061 case MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED:
0062 return "class not supported";
0063 case MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED:
0064 return "method not supported";
0065 case MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER:
0066 return "bad parameter";
0067 case MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE:
0068 return "resource not available";
0069 case MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK:
0070 return "acknowledged. retransmit";
0071 case MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR:
0072 return "internal error";
0073 default:
0074 return "*UNKNOWN*";
0075 }
0076 }
0077
0078 enum {
0079 MLXSW_EMAD_OP_TLV_REQUEST,
0080 MLXSW_EMAD_OP_TLV_RESPONSE
0081 };
0082
0083 enum {
0084 MLXSW_EMAD_OP_TLV_METHOD_QUERY = 1,
0085 MLXSW_EMAD_OP_TLV_METHOD_WRITE = 2,
0086 MLXSW_EMAD_OP_TLV_METHOD_SEND = 3,
0087 MLXSW_EMAD_OP_TLV_METHOD_EVENT = 5,
0088 };
0089
0090
0091 #define MLXSW_EMAD_STRING_TLV_LEN 33
0092
0093
0094 #define MLXSW_EMAD_END_TLV_LEN 1
0095
0096 #endif