sonic-buildimage/platform/pddf/i2c/modules/include/pddf_led_defs.h
FuzailBrcm d6768b3259
[pddf]: Adding S3IP supported attribute for LEDs in PDDF (#15074)
The S3IP (Simplified Switch System INtegration Program) sysfs specification defines a unified interface to access peripheral hardware on devices from different vendors, making it easier for SONiC to support different devices and platforms.

PDDF is a framework to simplify the driver and SONiC platform APIs development for new platforms. This effort is first step in combining the two frameworks.

This specific PR adds the S3IP supported sysfs attributes in PDDF common LED driver.
2023-05-18 14:06:19 -07:00

149 lines
3.3 KiB
C

/*
* Copyright 2019 Broadcom.
* The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* Description
* Platform LED related defines and structures
*/
/*****************************************
* kobj list
*****************************************/
struct kobject *platform_kobj=NULL;
struct kobject *led_kobj=NULL;
struct kobject *state_attr_kobj=NULL;
struct kobject *cur_state_kobj=NULL;
/*****************************************
* Static Data provided from user
* space JSON data file
*****************************************/
#define NAME_SIZE 32
#define VALUE_SIZE 5
typedef enum {
STATUS_LED_COLOR_OFF=0,
STATUS_LED_COLOR_GREEN=1,
STATUS_LED_COLOR_YELLOW=2,
STATUS_LED_COLOR_RED=3,
STATUS_LED_COLOR_BLUE=4,
STATUS_LED_COLOR_GREEN_BLINK=5,
STATUS_LED_COLOR_YELLOW_BLINK=6,
STATUS_LED_COLOR_RED_BLINK=7,
STATUS_LED_COLOR_BLUE_BLINK=8,
STATUS_LED_COLOR_AMBER,
STATUS_LED_COLOR_AMBER_BLINK,
MAX_LED_STATUS
}LED_STATUS;
char* LED_STATUS_STR[] = {
"off",
"green",
"yellow",
"red",
"blue",
"green_blink",
"yellow_blink",
"red_blink",
"blue_blink",
"amber",
"amber_blink"
};
typedef struct
{
char bits[NAME_SIZE];
int pos;
int mask_bits;
}MASK_BITS;
typedef struct
{
int swpld_addr;
int swpld_addr_offset;
MASK_BITS bits;
u8 reg_values[VALUE_SIZE];
char value[NAME_SIZE];
char attr_devtype[NAME_SIZE];
char attr_devname[NAME_SIZE];
} LED_DATA;
typedef struct
{
int state;
char color[NAME_SIZE];
/* S3IP System LED RW sysfs */
int sys_led;
int bmc_led;
int fan_led;
int psu_led;
int loc_led;
/* S3IP Power LED RO sysfs */
int psu1_led;
int psu2_led;
/* S3IP Fantray LED RO sysfs */
int fantray1_led;
int fantray2_led;
int fantray3_led;
int fantray4_led;
int fantray5_led;
int fantray6_led;
} CUR_STATE_DATA;
typedef struct
{
CUR_STATE_DATA cur_state;
char device_name[NAME_SIZE];
int index;
LED_DATA data[MAX_LED_STATUS];
int swpld_addr;
int swpld_addr_offset;
char attr_devtype[NAME_SIZE];
char attr_devname[NAME_SIZE];
} LED_OPS_DATA;
typedef enum{
LED_SYS,
LED_PSU,
LED_FAN,
LED_FANTRAY,
LED_DIAG,
LED_LOC,
LED_BMC,
LED_TYPE_MAX
} LED_TYPE;
char* LED_TYPE_STR[LED_TYPE_MAX] =
{
"LED_SYS",
"LED_PSU",
"LED_FAN",
"LED_FANTRAY",
"LED_DIAG",
"LED_LOC",
"LED_BMC"
};
/*****************************************
* Data exported from kernel for
* user space plugin to get/set
*****************************************/
#define PDDF_LED_DATA_ATTR( _prefix, _name, _mode, _show, _store, _type, _len, _addr) \
struct pddf_data_attribute pddf_dev_##_prefix##_attr_##_name = { .dev_attr = __ATTR(_name, _mode, _show, _store), \
.type = _type , \
.len = _len , \
.addr = _addr }