Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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