IB/ipath: Support blinking LEDs with an led_override file
When we want to find an InfiniPath HCA in a rack of nodes, it is often expeditious to blink the status LEDs via a userspace /sys file. A write-only led_override "file" is published per device. Writes to this file are interpreted as (string form) numbers, and the resulting value sent to ipath_set_led_override(). The upper eight bits are interpretted as a 4.4 fixed-point "frequency in Hertz", and the bottom two 4-bit values are alternately (D0..3, then D4..7) used by the board-specific LED-setting function to override the normal state. Signed-off-by: Michael Albaugh <michael.albaugh@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
committed by
Roland Dreier
parent
a024291b36
commit
82466f00ec
@@ -575,6 +575,16 @@ struct ipath_devdata {
|
||||
u16 ipath_gpio_scl_num;
|
||||
u64 ipath_gpio_sda;
|
||||
u64 ipath_gpio_scl;
|
||||
|
||||
/* used to override LED behavior */
|
||||
u8 ipath_led_override; /* Substituted for normal value, if non-zero */
|
||||
u16 ipath_led_override_timeoff; /* delta to next timer event */
|
||||
u8 ipath_led_override_vals[2]; /* Alternates per blink-frame */
|
||||
u8 ipath_led_override_phase; /* Just counts, LSB picks from vals[] */
|
||||
atomic_t ipath_led_override_timer_active;
|
||||
/* Used to flash LEDs in override mode */
|
||||
struct timer_list ipath_led_override_timer;
|
||||
|
||||
};
|
||||
|
||||
/* Private data for file operations */
|
||||
@@ -716,6 +726,15 @@ void ipath_get_eeprom_info(struct ipath_devdata *);
|
||||
u64 ipath_snap_cntr(struct ipath_devdata *, ipath_creg);
|
||||
void ipath_disarm_senderrbufs(struct ipath_devdata *, int);
|
||||
|
||||
/*
|
||||
* Set LED override, only the two LSBs have "public" meaning, but
|
||||
* any non-zero value substitutes them for the Link and LinkTrain
|
||||
* LED states.
|
||||
*/
|
||||
#define IPATH_LED_PHYS 1 /* Physical (linktraining) GREEN LED */
|
||||
#define IPATH_LED_LOG 2 /* Logical (link) YELLOW LED */
|
||||
void ipath_set_led_override(struct ipath_devdata *dd, unsigned int val);
|
||||
|
||||
/*
|
||||
* number of words used for protocol header if not set by ipath_userinit();
|
||||
*/
|
||||
|
Reference in New Issue
Block a user