rtl8366rb.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. #ifndef _RTL8366RB_H
  3. #define _RTL8366RB_H
  4. #include "realtek.h"
  5. #define RTL8366RB_PORT_NUM_CPU 5
  6. #define RTL8366RB_NUM_PORTS 6
  7. #define RTL8366RB_PHY_NO_MAX 4
  8. #define RTL8366RB_NUM_LEDGROUPS 4
  9. #define RTL8366RB_PHY_ADDR_MAX 31
  10. /* LED control registers */
  11. /* The LED blink rate is global; it is used by all triggers in all groups. */
  12. #define RTL8366RB_LED_BLINKRATE_REG 0x0430
  13. #define RTL8366RB_LED_BLINKRATE_MASK 0x0007
  14. #define RTL8366RB_LED_BLINKRATE_28MS 0x0000
  15. #define RTL8366RB_LED_BLINKRATE_56MS 0x0001
  16. #define RTL8366RB_LED_BLINKRATE_84MS 0x0002
  17. #define RTL8366RB_LED_BLINKRATE_111MS 0x0003
  18. #define RTL8366RB_LED_BLINKRATE_222MS 0x0004
  19. #define RTL8366RB_LED_BLINKRATE_446MS 0x0005
  20. /* LED trigger event for each group */
  21. #define RTL8366RB_LED_CTRL_REG 0x0431
  22. #define RTL8366RB_LED_CTRL_OFFSET(led_group) \
  23. (4 * (led_group))
  24. #define RTL8366RB_LED_CTRL_MASK(led_group) \
  25. (0xf << RTL8366RB_LED_CTRL_OFFSET(led_group))
  26. /* The RTL8366RB_LED_X_X registers are used to manually set the LED state only
  27. * when the corresponding LED group in RTL8366RB_LED_CTRL_REG is
  28. * RTL8366RB_LEDGROUP_FORCE. Otherwise, it is ignored.
  29. */
  30. #define RTL8366RB_LED_0_1_CTRL_REG 0x0432
  31. #define RTL8366RB_LED_2_3_CTRL_REG 0x0433
  32. #define RTL8366RB_LED_X_X_CTRL_REG(led_group) \
  33. ((led_group) <= 1 ? \
  34. RTL8366RB_LED_0_1_CTRL_REG : \
  35. RTL8366RB_LED_2_3_CTRL_REG)
  36. #define RTL8366RB_LED_0_X_CTRL_MASK GENMASK(5, 0)
  37. #define RTL8366RB_LED_X_1_CTRL_MASK GENMASK(11, 6)
  38. #define RTL8366RB_LED_2_X_CTRL_MASK GENMASK(5, 0)
  39. #define RTL8366RB_LED_X_3_CTRL_MASK GENMASK(11, 6)
  40. enum rtl8366_ledgroup_mode {
  41. RTL8366RB_LEDGROUP_OFF = 0x0,
  42. RTL8366RB_LEDGROUP_DUP_COL = 0x1,
  43. RTL8366RB_LEDGROUP_LINK_ACT = 0x2,
  44. RTL8366RB_LEDGROUP_SPD1000 = 0x3,
  45. RTL8366RB_LEDGROUP_SPD100 = 0x4,
  46. RTL8366RB_LEDGROUP_SPD10 = 0x5,
  47. RTL8366RB_LEDGROUP_SPD1000_ACT = 0x6,
  48. RTL8366RB_LEDGROUP_SPD100_ACT = 0x7,
  49. RTL8366RB_LEDGROUP_SPD10_ACT = 0x8,
  50. RTL8366RB_LEDGROUP_SPD100_10_ACT = 0x9,
  51. RTL8366RB_LEDGROUP_FIBER = 0xa,
  52. RTL8366RB_LEDGROUP_AN_FAULT = 0xb,
  53. RTL8366RB_LEDGROUP_LINK_RX = 0xc,
  54. RTL8366RB_LEDGROUP_LINK_TX = 0xd,
  55. RTL8366RB_LEDGROUP_MASTER = 0xe,
  56. RTL8366RB_LEDGROUP_FORCE = 0xf,
  57. __RTL8366RB_LEDGROUP_MODE_MAX
  58. };
  59. #if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS)
  60. struct rtl8366rb_led {
  61. u8 port_num;
  62. u8 led_group;
  63. struct realtek_priv *priv;
  64. struct led_classdev cdev;
  65. };
  66. int rtl8366rb_setup_leds(struct realtek_priv *priv);
  67. #else
  68. static inline int rtl8366rb_setup_leds(struct realtek_priv *priv)
  69. {
  70. return 0;
  71. }
  72. #endif /* IS_ENABLED(CONFIG_LEDS_CLASS) */
  73. /**
  74. * struct rtl8366rb - RTL8366RB-specific data
  75. * @max_mtu: per-port max MTU setting
  76. * @pvid_enabled: if PVID is set for respective port
  77. * @leds: per-port and per-ledgroup led info
  78. */
  79. struct rtl8366rb {
  80. unsigned int max_mtu[RTL8366RB_NUM_PORTS];
  81. bool pvid_enabled[RTL8366RB_NUM_PORTS];
  82. #if IS_ENABLED(CONFIG_NET_DSA_REALTEK_RTL8366RB_LEDS)
  83. struct rtl8366rb_led leds[RTL8366RB_NUM_PORTS][RTL8366RB_NUM_LEDGROUPS];
  84. #endif
  85. };
  86. /* This code is used also with LEDs disabled */
  87. int rb8366rb_set_ledgroup_mode(struct realtek_priv *priv,
  88. u8 led_group,
  89. enum rtl8366_ledgroup_mode mode);
  90. #endif /* _RTL8366RB_H */