2019-05-27 14:55:06 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
2016-10-17 23:49:55 +08:00
|
|
|
/* Copyright (C) 2016 National Instruments Corp.
|
|
|
|
*/
|
|
|
|
#ifndef __PHY_LED_TRIGGERS
|
|
|
|
#define __PHY_LED_TRIGGERS
|
|
|
|
|
|
|
|
struct phy_device;
|
|
|
|
|
|
|
|
#ifdef CONFIG_LED_TRIGGER_PHY
|
|
|
|
|
|
|
|
#include <linux/leds.h>
|
net: phy: leds: Fix truncated LED trigger names
Commit 4567d686f5c6d955 ("phy: increase size of MII_BUS_ID_SIZE and
bus_id") increased the size of MII bus IDs, but forgot to update the
private definition in <linux/phy_led_triggers.h>.
This may cause:
1. Truncation of LED trigger names,
2. Duplicate LED trigger names,
3. Failures registering LED triggers,
4. Crashes due to bad error handling in the LED trigger failure path.
To fix this, and prevent the definitions going out of sync again in the
future, let the PHY LED trigger code use the existing MII_BUS_ID_SIZE
definition.
Example:
- Before I had triggers "ee700000.etherne:01:100Mbps" and
"ee700000.etherne:01:10Mbps",
- After the increase of MII_BUS_ID_SIZE, both became
"ee700000.ethernet-ffffffff:01:" => FAIL,
- Now, the triggers are "ee700000.ethernet-ffffffff:01:100Mbps" and
"ee700000.ethernet-ffffffff:01:10Mbps", which are unique again.
Fixes: 4567d686f5c6d955 ("phy: increase size of MII_BUS_ID_SIZE and bus_id")
Fixes: 2e0bc452f4721520 ("net: phy: leds: add support for led triggers on phy link state change")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-01-25 18:39:50 +08:00
|
|
|
#include <linux/phy.h>
|
2016-10-17 23:49:55 +08:00
|
|
|
|
2018-11-10 02:48:03 +08:00
|
|
|
#define PHY_LED_TRIGGER_SPEED_SUFFIX_SIZE 11
|
2016-10-17 23:49:55 +08:00
|
|
|
|
net: phy: leds: Fix truncated LED trigger names
Commit 4567d686f5c6d955 ("phy: increase size of MII_BUS_ID_SIZE and
bus_id") increased the size of MII bus IDs, but forgot to update the
private definition in <linux/phy_led_triggers.h>.
This may cause:
1. Truncation of LED trigger names,
2. Duplicate LED trigger names,
3. Failures registering LED triggers,
4. Crashes due to bad error handling in the LED trigger failure path.
To fix this, and prevent the definitions going out of sync again in the
future, let the PHY LED trigger code use the existing MII_BUS_ID_SIZE
definition.
Example:
- Before I had triggers "ee700000.etherne:01:100Mbps" and
"ee700000.etherne:01:10Mbps",
- After the increase of MII_BUS_ID_SIZE, both became
"ee700000.ethernet-ffffffff:01:" => FAIL,
- Now, the triggers are "ee700000.ethernet-ffffffff:01:100Mbps" and
"ee700000.ethernet-ffffffff:01:10Mbps", which are unique again.
Fixes: 4567d686f5c6d955 ("phy: increase size of MII_BUS_ID_SIZE and bus_id")
Fixes: 2e0bc452f4721520 ("net: phy: leds: add support for led triggers on phy link state change")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-01-25 18:39:50 +08:00
|
|
|
#define PHY_LINK_LED_TRIGGER_NAME_SIZE (MII_BUS_ID_SIZE + \
|
2019-12-10 02:31:43 +08:00
|
|
|
sizeof_field(struct mdio_device, addr)+\
|
2016-10-17 23:49:55 +08:00
|
|
|
PHY_LED_TRIGGER_SPEED_SUFFIX_SIZE)
|
|
|
|
|
|
|
|
struct phy_led_trigger {
|
|
|
|
struct led_trigger trigger;
|
|
|
|
char name[PHY_LINK_LED_TRIGGER_NAME_SIZE];
|
|
|
|
unsigned int speed;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
extern int phy_led_triggers_register(struct phy_device *phy);
|
|
|
|
extern void phy_led_triggers_unregister(struct phy_device *phy);
|
|
|
|
extern void phy_led_trigger_change_speed(struct phy_device *phy);
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
static inline int phy_led_triggers_register(struct phy_device *phy)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static inline void phy_led_triggers_unregister(struct phy_device *phy) { }
|
|
|
|
static inline void phy_led_trigger_change_speed(struct phy_device *phy) { }
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|