Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
0002 /* Copyright (c) 2015-2018 Mellanox Technologies. All rights reserved */
0003 
0004 #ifndef _MLXSW_EMAD_H
0005 #define _MLXSW_EMAD_H
0006 
0007 #define MLXSW_EMAD_MAX_FRAME_LEN 1518   /* Length in u8 */
0008 #define MLXSW_EMAD_MAX_RETRY 5
0009 
0010 /* EMAD Ethernet header */
0011 #define MLXSW_EMAD_ETH_HDR_LEN 0x10 /* Length in u8 */
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 /* EMAD TLV Types */
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 /* OP TLV */
0027 #define MLXSW_EMAD_OP_TLV_LEN 4     /* Length in u32 */
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 /* STRING TLV */
0091 #define MLXSW_EMAD_STRING_TLV_LEN 33    /* Length in u32 */
0092 
0093 /* END TLV */
0094 #define MLXSW_EMAD_END_TLV_LEN 1    /* Length in u32 */
0095 
0096 #endif