emad.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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_DR,
  19. MLXSW_EMAD_TLV_TYPE_REG,
  20. MLXSW_EMAD_TLV_TYPE_USERDATA,
  21. MLXSW_EMAD_TLV_TYPE_OOBETH,
  22. };
  23. /* OP TLV */
  24. #define MLXSW_EMAD_OP_TLV_LEN 4 /* Length in u32 */
  25. enum {
  26. MLXSW_EMAD_OP_TLV_CLASS_REG_ACCESS = 1,
  27. MLXSW_EMAD_OP_TLV_CLASS_IPC = 2,
  28. };
  29. enum mlxsw_emad_op_tlv_status {
  30. MLXSW_EMAD_OP_TLV_STATUS_SUCCESS,
  31. MLXSW_EMAD_OP_TLV_STATUS_BUSY,
  32. MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED,
  33. MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV,
  34. MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED,
  35. MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED,
  36. MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED,
  37. MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER,
  38. MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE,
  39. MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK,
  40. MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR = 0x70,
  41. };
  42. static inline char *mlxsw_emad_op_tlv_status_str(u8 status)
  43. {
  44. switch (status) {
  45. case MLXSW_EMAD_OP_TLV_STATUS_SUCCESS:
  46. return "operation performed";
  47. case MLXSW_EMAD_OP_TLV_STATUS_BUSY:
  48. return "device is busy";
  49. case MLXSW_EMAD_OP_TLV_STATUS_VERSION_NOT_SUPPORTED:
  50. return "version not supported";
  51. case MLXSW_EMAD_OP_TLV_STATUS_UNKNOWN_TLV:
  52. return "unknown TLV";
  53. case MLXSW_EMAD_OP_TLV_STATUS_REGISTER_NOT_SUPPORTED:
  54. return "register not supported";
  55. case MLXSW_EMAD_OP_TLV_STATUS_CLASS_NOT_SUPPORTED:
  56. return "class not supported";
  57. case MLXSW_EMAD_OP_TLV_STATUS_METHOD_NOT_SUPPORTED:
  58. return "method not supported";
  59. case MLXSW_EMAD_OP_TLV_STATUS_BAD_PARAMETER:
  60. return "bad parameter";
  61. case MLXSW_EMAD_OP_TLV_STATUS_RESOURCE_NOT_AVAILABLE:
  62. return "resource not available";
  63. case MLXSW_EMAD_OP_TLV_STATUS_MESSAGE_RECEIPT_ACK:
  64. return "acknowledged. retransmit";
  65. case MLXSW_EMAD_OP_TLV_STATUS_INTERNAL_ERROR:
  66. return "internal error";
  67. default:
  68. return "*UNKNOWN*";
  69. }
  70. }
  71. enum {
  72. MLXSW_EMAD_OP_TLV_REQUEST,
  73. MLXSW_EMAD_OP_TLV_RESPONSE
  74. };
  75. enum {
  76. MLXSW_EMAD_OP_TLV_METHOD_QUERY = 1,
  77. MLXSW_EMAD_OP_TLV_METHOD_WRITE = 2,
  78. MLXSW_EMAD_OP_TLV_METHOD_SEND = 3,
  79. MLXSW_EMAD_OP_TLV_METHOD_EVENT = 5,
  80. };
  81. /* END TLV */
  82. #define MLXSW_EMAD_END_TLV_LEN 1 /* Length in u32 */
  83. #endif