emad.h 2.7 KB

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