lredev.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * include/net/lredev.h - lre device API
  4. * Copyright (c) 2019 Texas Instruments Incorporated - http://www.ti.com/
  5. */
  6. #ifndef _LINUX_LREDEV_H_
  7. #define _LINUX_LREDEV_H_
  8. #include <linux/netdevice.h>
  9. /* PRP duplicate discard modes */
  10. enum iec62439_3_dd_modes {
  11. IEC62439_3_DA = 1,
  12. IEC62439_3_DD,
  13. };
  14. /* HSR modes */
  15. enum iec62439_3_hsr_modes {
  16. IEC62439_3_HSR_MODE_H = 1,
  17. IEC62439_3_HSR_MODE_N,
  18. IEC62439_3_HSR_MODE_T,
  19. IEC62439_3_HSR_MODE_U,
  20. IEC62439_3_HSR_MODE_M,
  21. };
  22. /* PRP Transparent reception modes */
  23. enum iec62439_3_tr_modes {
  24. IEC62439_3_TR_REMOVE_RCT = 1,
  25. IEC62439_3_TR_PASS_RCT,
  26. };
  27. enum iec62439_3_clear_nt_cmd {
  28. IEC62439_3_CLEAR_NT_NO_OP,
  29. IEC62439_3_CLEAR_NT,
  30. };
  31. enum lredev_attr_id {
  32. LREDEV_ATTR_ID_UNDEFINED,
  33. /* For HSR only */
  34. LREDEV_ATTR_ID_HSR_MODE,
  35. /* Duplicate discard for PRP */
  36. LREDEV_ATTR_ID_DD_MODE,
  37. /* Duplicate List Reside Max time for HSR & PRP */
  38. LREDEV_ATTR_ID_DLRMT,
  39. /* Transparent reception for PRP */
  40. LREDEV_ATTR_ID_PRP_TR,
  41. /* Clear node table - for HSR & PRP */
  42. LREDEV_ATTR_ID_CLEAR_NT,
  43. };
  44. struct lredev_attr {
  45. enum lredev_attr_id id;
  46. union {
  47. enum iec62439_3_hsr_modes mode;
  48. enum iec62439_3_dd_modes dd_mode;
  49. /* in msec */
  50. u32 dl_reside_max_time;
  51. enum iec62439_3_tr_modes tr_mode;
  52. enum iec62439_3_clear_nt_cmd clear_nt_cmd;
  53. };
  54. };
  55. enum iec62439_node_type {
  56. IEC62439_3_DANP,
  57. IEC62439_3_REDBOXP,
  58. IEC62439_3_VDANP,
  59. IEC62439_3_DANH,
  60. IEC62439_3_REDBOXH,
  61. IEC62439_3_VDANH,
  62. };
  63. struct lre_node_table_entry {
  64. u8 mac_address[ETH_ALEN];
  65. /* in 1/100 seconds */
  66. u32 time_last_seen_a;
  67. /* in 1/100 seconds */
  68. u32 time_last_seen_b;
  69. enum iec62439_node_type node_type;
  70. };
  71. #define LRE_MAX_NT_ENTRIES 256
  72. struct lre_stats {
  73. u32 cnt_tx_a;
  74. u32 cnt_tx_b;
  75. u32 cnt_tx_c;
  76. u32 cnt_errwronglan_a;
  77. u32 cnt_errwronglan_b;
  78. u32 cnt_errwronglan_c;
  79. u32 cnt_rx_a;
  80. u32 cnt_rx_b;
  81. u32 cnt_rx_c;
  82. u32 cnt_errors_a;
  83. u32 cnt_errors_b;
  84. u32 cnt_errors_c;
  85. u32 cnt_nodes;
  86. u32 cnt_proxy_nodes;
  87. u32 cnt_unique_rx_a;
  88. u32 cnt_unique_rx_b;
  89. u32 cnt_unique_rx_c;
  90. u32 cnt_duplicate_rx_a;
  91. u32 cnt_duplicate_rx_b;
  92. u32 cnt_duplicate_rx_c;
  93. u32 cnt_multiple_rx_a;
  94. u32 cnt_multiple_rx_b;
  95. u32 cnt_multiple_rx_c;
  96. u32 cnt_own_rx_a;
  97. u32 cnt_own_rx_b;
  98. };
  99. /**
  100. * struct lredev_ops - lredev operations
  101. *
  102. * @lredev_attr_get: Get a attribute (see switchdev_attr).
  103. *
  104. * @lredev_port_attr_set: Set a attribute (see switchdev_attr).
  105. */
  106. struct lredev_ops {
  107. int (*lredev_attr_get)(struct net_device *dev,
  108. struct lredev_attr *attr);
  109. int (*lredev_attr_set)(struct net_device *dev,
  110. struct lredev_attr *attr);
  111. int (*lredev_get_node_table)(struct net_device *dev,
  112. struct lre_node_table_entry table[],
  113. int size);
  114. int (*lredev_get_stats)(struct net_device *dev,
  115. struct lre_stats *stats);
  116. int (*lredev_set_sv_vlan_id)(struct net_device *dev, u16 vid);
  117. };
  118. #endif