mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-12-26 09:47:13 +00:00
[as5912-54xk] Modify source code to follow coding standards
This commit is contained in:
@@ -57,12 +57,12 @@ static struct accton_as5912_54xk_led_data *ledctl = NULL;
|
||||
|
||||
#define LED_TYPE_DIAG_REG_MASK (0x0C)
|
||||
#define LED_MODE_DIAG_GREEN_VALUE (0x04)
|
||||
#define LED_MODE_DIAG_AMBER_VALUE (0x08)
|
||||
#define LED_MODE_DIAG_ORANGE_VALUE (0x08)
|
||||
#define LED_MODE_DIAG_OFF_VALUE (0x0C)
|
||||
|
||||
|
||||
#define LED_TYPE_LOC_REG_MASK (0x10)
|
||||
#define LED_MODE_LOC_AMBER_VALUE (0x00)
|
||||
#define LED_MODE_LOC_ORANGE_VALUE (0x00)
|
||||
#define LED_MODE_LOC_OFF_VALUE (0x10)
|
||||
|
||||
static const u8 led_reg[] = {
|
||||
@@ -80,17 +80,26 @@ enum led_type {
|
||||
|
||||
/* FAN/PSU/DIAG/RELEASE led mode */
|
||||
enum led_light_mode {
|
||||
LED_MODE_OFF = 0,
|
||||
LED_MODE_GREEN,
|
||||
LED_MODE_GREEN_BLINK,
|
||||
LED_MODE_AMBER,
|
||||
LED_MODE_AMBER_BLINK,
|
||||
LED_MODE_RED,
|
||||
LED_MODE_RED_BLINK,
|
||||
LED_MODE_BLUE,
|
||||
LED_MODE_BLUE_BLINK,
|
||||
LED_MODE_AUTO,
|
||||
LED_MODE_UNKNOWN
|
||||
LED_MODE_OFF,
|
||||
LED_MODE_RED = 10,
|
||||
LED_MODE_RED_BLINKING = 11,
|
||||
LED_MODE_ORANGE = 12,
|
||||
LED_MODE_ORANGE_BLINKING = 13,
|
||||
LED_MODE_YELLOW = 14,
|
||||
LED_MODE_YELLOW_BLINKING = 15,
|
||||
LED_MODE_GREEN = 16,
|
||||
LED_MODE_GREEN_BLINKING = 17,
|
||||
LED_MODE_BLUE = 18,
|
||||
LED_MODE_BLUE_BLINKING = 19,
|
||||
LED_MODE_PURPLE = 20,
|
||||
LED_MODE_PURPLE_BLINKING = 21,
|
||||
LED_MODE_AUTO = 22,
|
||||
LED_MODE_AUTO_BLINKING = 23,
|
||||
LED_MODE_WHITE = 24,
|
||||
LED_MODE_WHITE_BLINKING = 25,
|
||||
LED_MODE_CYAN = 26,
|
||||
LED_MODE_CYAN_BLINKING = 27,
|
||||
LED_MODE_UNKNOWN = 99
|
||||
};
|
||||
|
||||
struct led_type_mode {
|
||||
@@ -101,11 +110,11 @@ struct led_type_mode {
|
||||
};
|
||||
|
||||
static struct led_type_mode led_type_mode_data[] = {
|
||||
{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE},
|
||||
{LED_TYPE_LOC, LED_MODE_AMBER, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_AMBER_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_GREEN_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_AMBER, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_AMBER_VALUE},
|
||||
{LED_TYPE_LOC, LED_MODE_OFF, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_OFF_VALUE},
|
||||
{LED_TYPE_LOC, LED_MODE_ORANGE, LED_TYPE_LOC_REG_MASK, LED_MODE_LOC_ORANGE_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_OFF, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_OFF_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_GREEN, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_GREEN_VALUE},
|
||||
{LED_TYPE_DIAG, LED_MODE_ORANGE, LED_TYPE_DIAG_REG_MASK, LED_MODE_DIAG_ORANGE_VALUE},
|
||||
};
|
||||
|
||||
static int led_reg_val_to_light_mode(enum led_type type, u8 reg_val) {
|
||||
@@ -250,14 +259,14 @@ static struct led_classdev accton_as5912_54xk_leds[] = {
|
||||
.default_trigger = "unused",
|
||||
.brightness_set = accton_as5912_54xk_led_loc_set,
|
||||
.brightness_get = accton_as5912_54xk_led_loc_get,
|
||||
.max_brightness = LED_MODE_AMBER,
|
||||
.max_brightness = LED_MODE_ORANGE,
|
||||
},
|
||||
[LED_TYPE_DIAG] = {
|
||||
.name = "accton_as5912_54xk_led::diag",
|
||||
.default_trigger = "unused",
|
||||
.brightness_set = accton_as5912_54xk_led_diag_set,
|
||||
.brightness_get = accton_as5912_54xk_led_diag_get,
|
||||
.max_brightness = LED_MODE_AMBER,
|
||||
.max_brightness = LED_MODE_GREEN,
|
||||
},
|
||||
[LED_TYPE_PSU1] = {
|
||||
.name = "accton_as5912_54xk_led::psu1",
|
||||
|
||||
@@ -5,35 +5,35 @@
|
||||
###############################################################################
|
||||
|
||||
cdefs: &cdefs
|
||||
- x86_64_accton_as5912_54xk_CONFIG_INCLUDE_LOGGING:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_INCLUDE_LOGGING:
|
||||
doc: "Include or exclude logging."
|
||||
default: 1
|
||||
- x86_64_accton_as5912_54xk_CONFIG_LOG_OPTIONS_DEFAULT:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_LOG_OPTIONS_DEFAULT:
|
||||
doc: "Default enabled log options."
|
||||
default: AIM_LOG_OPTIONS_DEFAULT
|
||||
- x86_64_accton_as5912_54xk_CONFIG_LOG_BITS_DEFAULT:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_LOG_BITS_DEFAULT:
|
||||
doc: "Default enabled log bits."
|
||||
default: AIM_LOG_BITS_DEFAULT
|
||||
- x86_64_accton_as5912_54xk_CONFIG_LOG_CUSTOM_BITS_DEFAULT:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_LOG_CUSTOM_BITS_DEFAULT:
|
||||
doc: "Default enabled custom log bits."
|
||||
default: 0
|
||||
- x86_64_accton_as5912_54xk_CONFIG_PORTING_STDLIB:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_PORTING_STDLIB:
|
||||
doc: "Default all porting macros to use the C standard libraries."
|
||||
default: 1
|
||||
- x86_64_accton_as5912_54xk_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS:
|
||||
doc: "Include standard library headers for stdlib porting macros."
|
||||
default: x86_64_accton_as5912_54xk_CONFIG_PORTING_STDLIB
|
||||
- x86_64_accton_as5912_54xk_CONFIG_INCLUDE_UCLI:
|
||||
default: X86_64_ACCTON_AS5912_54XK_CONFIG_PORTING_STDLIB
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_INCLUDE_UCLI:
|
||||
doc: "Include generic uCli support."
|
||||
default: 0
|
||||
- x86_64_accton_as5912_54xk_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION:
|
||||
- X86_64_ACCTON_AS5912_54XK_CONFIG_INCLUDE_DEFAULT_FAN_DIRECTION:
|
||||
doc: "Assume chassis fan direction is the same as the PSU fan direction."
|
||||
default: 0
|
||||
|
||||
|
||||
definitions:
|
||||
cdefs:
|
||||
x86_64_accton_as5912_54xk_CONFIG_HEADER:
|
||||
X86_64_ACCTON_AS5912_54XK_CONFIG_HEADER:
|
||||
defs: *cdefs
|
||||
basename: x86_64_accton_as5912_54xk_config
|
||||
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
#include <onlp/platformi/fani.h>
|
||||
#include "platform_lib.h"
|
||||
|
||||
#define PSU_PREFIX_PATH "/sys/bus/i2c/devices/"
|
||||
|
||||
enum fan_id {
|
||||
FAN_1_ON_FAN_BOARD = 1,
|
||||
FAN_2_ON_FAN_BOARD,
|
||||
@@ -87,18 +85,17 @@ static int
|
||||
_onlp_fani_info_get_fan(int fid, onlp_fan_info_t* info)
|
||||
{
|
||||
int value, ret;
|
||||
char path[64] = {0};
|
||||
|
||||
/* get fan present status
|
||||
*/
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_present", FAN_BOARD_PATH, fid);
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_present", FAN_BOARD_PATH, fid);
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path);
|
||||
AIM_LOG_ERROR("Unable to read status from (%s)\r\n", FAN_BOARD_PATH);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
if (value == 0) {
|
||||
return ONLP_STATUS_OK;
|
||||
return ONLP_STATUS_OK; /* fan is not present */
|
||||
}
|
||||
info->status |= ONLP_FAN_STATUS_PRESENT;
|
||||
|
||||
@@ -107,7 +104,7 @@ _onlp_fani_info_get_fan(int fid, onlp_fan_info_t* info)
|
||||
*/
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_fault", FAN_BOARD_PATH, fid);
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path);
|
||||
AIM_LOG_ERROR("Unable to read status from (%s)\r\n", FAN_BOARD_PATH);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
@@ -120,7 +117,7 @@ _onlp_fani_info_get_fan(int fid, onlp_fan_info_t* info)
|
||||
*/
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_direction", FAN_BOARD_PATH, fid);
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path);
|
||||
AIM_LOG_ERROR("Unable to read status from (%s)\r\n", FAN_BOARD_PATH);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
@@ -131,16 +128,16 @@ _onlp_fani_info_get_fan(int fid, onlp_fan_info_t* info)
|
||||
*/
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_front_speed_rpm", FAN_BOARD_PATH, fid);
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path);
|
||||
AIM_LOG_ERROR("Unable to read status from (%s)\r\n", FAN_BOARD_PATH);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
info->rpm = value;
|
||||
|
||||
/* get rear fan speed
|
||||
*/
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_rear_speed_rpm", FAN_BOARD_PATH, fid);
|
||||
ret = onlp_file_read_int(&value, "%s""fan%d_rear_speed_rpm", FAN_BOARD_PATH, fid);
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path);
|
||||
AIM_LOG_ERROR("Unable to read status from (%s)\r\n", FAN_BOARD_PATH);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
@@ -152,9 +149,9 @@ _onlp_fani_info_get_fan(int fid, onlp_fan_info_t* info)
|
||||
|
||||
/* get speed percentage from rpm
|
||||
*/
|
||||
ret = onlp_file_read_int(&value, "%s""fan_max_speed_rpm", FAN_BOARD_PATH);
|
||||
ret = onlp_file_read_int(&value, "%s""fan_max_speed_rpm", FAN_BOARD_PATH);
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file (%s)\r\n", path);
|
||||
AIM_LOG_ERROR("Unable to read status from (%s)\r\n", FAN_BOARD_PATH);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
@@ -201,17 +198,12 @@ _onlp_fani_info_get_fan_on_psu(int pid, onlp_fan_info_t* info)
|
||||
*/
|
||||
info->status |= _onlp_get_fan_direction_on_psu();
|
||||
|
||||
/* get fan fault status
|
||||
*/
|
||||
if (psu_ym2651y_pmbus_info_get(pid, "psu_fan1_fault", &val) == ONLP_STATUS_OK) {
|
||||
info->status |= (val > 0) ? ONLP_FAN_STATUS_FAILED : 0;
|
||||
}
|
||||
|
||||
/* get fan speed
|
||||
*/
|
||||
if (psu_ym2651y_pmbus_info_get(pid, "psu_fan1_speed_rpm", &val) == ONLP_STATUS_OK) {
|
||||
info->rpm = val;
|
||||
info->percentage = (info->rpm * 100) / MAX_PSU_FAN_SPEED;
|
||||
info->percentage = (info->rpm * 100) / MAX_PSU_FAN_SPEED;
|
||||
info->status |= (val == 0) ? ONLP_FAN_STATUS_FAILED : 0;
|
||||
}
|
||||
|
||||
return ONLP_STATUS_OK;
|
||||
@@ -315,7 +307,7 @@ onlp_fani_percentage_set(onlp_oid_t id, int p)
|
||||
return ONLP_STATUS_E_INVALID;
|
||||
}
|
||||
|
||||
if (onlp_file_write_integer(path, p) < 0) {
|
||||
if (onlp_file_write_int(p, path) < 0) {
|
||||
AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
@@ -360,4 +352,3 @@ onlp_fani_ioctl(onlp_oid_t id, va_list vargs)
|
||||
return ONLP_STATUS_E_UNSUPPORTED;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
#include <onlp/platformi/ledi.h>
|
||||
#include "platform_lib.h"
|
||||
|
||||
#define LED_FORMAT "/sys/class/leds/accton_as5912_54xk_led::%s/brightness"
|
||||
|
||||
#define VALIDATE(_id) \
|
||||
do { \
|
||||
if(!ONLP_OID_IS_LED(_id)) { \
|
||||
@@ -34,32 +36,40 @@
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define LED_FORMAT "/sys/class/leds/accton_as5912_54xk_led::%s/brightness"
|
||||
|
||||
/* LED related data
|
||||
*/
|
||||
enum led_light_mode { /*must be the same with the definition @ kernel driver */
|
||||
LED_MODE_OFF = 0,
|
||||
LED_MODE_GREEN,
|
||||
LED_MODE_GREEN_BLINK,
|
||||
LED_MODE_AMBER,
|
||||
LED_MODE_AMBER_BLINK,
|
||||
LED_MODE_RED,
|
||||
LED_MODE_RED_BLINK,
|
||||
LED_MODE_BLUE,
|
||||
LED_MODE_BLUE_BLINK,
|
||||
LED_MODE_AUTO,
|
||||
LED_MODE_UNKNOWN
|
||||
};
|
||||
|
||||
enum onlp_led_id
|
||||
{
|
||||
LED_LOC = 1,
|
||||
LED_RESERVED = 0,
|
||||
LED_LOC,
|
||||
LED_DIAG,
|
||||
LED_PSU1,
|
||||
LED_PSU2,
|
||||
LED_FAN,
|
||||
};
|
||||
|
||||
enum led_light_mode {
|
||||
LED_MODE_OFF,
|
||||
LED_MODE_RED = 10,
|
||||
LED_MODE_RED_BLINKING = 11,
|
||||
LED_MODE_ORANGE = 12,
|
||||
LED_MODE_ORANGE_BLINKING = 13,
|
||||
LED_MODE_YELLOW = 14,
|
||||
LED_MODE_YELLOW_BLINKING = 15,
|
||||
LED_MODE_GREEN = 16,
|
||||
LED_MODE_GREEN_BLINKING = 17,
|
||||
LED_MODE_BLUE = 18,
|
||||
LED_MODE_BLUE_BLINKING = 19,
|
||||
LED_MODE_PURPLE = 20,
|
||||
LED_MODE_PURPLE_BLINKING = 21,
|
||||
LED_MODE_AUTO = 22,
|
||||
LED_MODE_AUTO_BLINKING = 23,
|
||||
LED_MODE_WHITE = 24,
|
||||
LED_MODE_WHITE_BLINKING = 25,
|
||||
LED_MODE_CYAN = 26,
|
||||
LED_MODE_CYAN_BLINKING = 27,
|
||||
LED_MODE_UNKNOWN = 99
|
||||
};
|
||||
|
||||
typedef struct led_light_mode_map {
|
||||
enum onlp_led_id id;
|
||||
@@ -68,14 +78,14 @@ typedef struct led_light_mode_map {
|
||||
} led_light_mode_map_t;
|
||||
|
||||
led_light_mode_map_t led_map[] = {
|
||||
{LED_LOC, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_LOC, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE},
|
||||
{LED_DIAG, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_DIAG, LED_MODE_GREEN, ONLP_LED_MODE_GREEN},
|
||||
{LED_DIAG, LED_MODE_AMBER, ONLP_LED_MODE_ORANGE},
|
||||
{LED_FAN, LED_MODE_AUTO, ONLP_LED_MODE_AUTO},
|
||||
{LED_PSU1, LED_MODE_AUTO, ONLP_LED_MODE_AUTO},
|
||||
{LED_PSU2, LED_MODE_AUTO, ONLP_LED_MODE_AUTO}
|
||||
{LED_LOC, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_LOC, LED_MODE_ORANGE, ONLP_LED_MODE_ORANGE},
|
||||
{LED_DIAG, LED_MODE_OFF, ONLP_LED_MODE_OFF},
|
||||
{LED_DIAG, LED_MODE_GREEN, ONLP_LED_MODE_GREEN},
|
||||
{LED_DIAG, LED_MODE_ORANGE, ONLP_LED_MODE_ORANGE},
|
||||
{LED_FAN, LED_MODE_AUTO, ONLP_LED_MODE_AUTO},
|
||||
{LED_PSU1, LED_MODE_AUTO, ONLP_LED_MODE_AUTO},
|
||||
{LED_PSU2, LED_MODE_AUTO, ONLP_LED_MODE_AUTO}
|
||||
};
|
||||
|
||||
static char *leds[] = /* must map with onlp_led_id */
|
||||
@@ -160,8 +170,8 @@ onlp_ledi_init(void)
|
||||
/*
|
||||
* Turn off the LOCATION and DIAG LEDs at startup
|
||||
*/
|
||||
onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_LOC), ONLP_LED_MODE_OFF);
|
||||
onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_DIAG), ONLP_LED_MODE_OFF);
|
||||
onlp_ledi_mode_set(ONLP_LED_ID_CREATE(LED_LOC), ONLP_LED_MODE_OFF);
|
||||
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
@@ -170,16 +180,17 @@ int
|
||||
onlp_ledi_info_get(onlp_oid_t id, onlp_led_info_t* info)
|
||||
{
|
||||
int lid, value;
|
||||
|
||||
VALIDATE(id);
|
||||
|
||||
lid = ONLP_OID_ID_GET(id);
|
||||
|
||||
/* Set the onlp_oid_hdr_t and capabilities */
|
||||
/* Set the onlp_oid_hdr_t and capabilities */
|
||||
*info = linfo[ONLP_OID_ID_GET(id)];
|
||||
|
||||
/* Get LED mode */
|
||||
if (onlp_file_read_int(&value, LED_FORMAT, leds[lid]) < 0) {
|
||||
DEBUG_PRINT("Unable to read status from file (%s)", leds[lid]);
|
||||
DEBUG_PRINT("Unable to read status from file "LED_FORMAT, leds[lid]);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
@@ -223,15 +234,11 @@ onlp_ledi_set(onlp_oid_t id, int on_or_off)
|
||||
int
|
||||
onlp_ledi_mode_set(onlp_oid_t id, onlp_led_mode_t mode)
|
||||
{
|
||||
int lid;
|
||||
char path[64] = {0};
|
||||
|
||||
int lid;
|
||||
VALIDATE(id);
|
||||
|
||||
lid = ONLP_OID_ID_GET(id);
|
||||
sprintf(path, LED_FORMAT, leds[lid]);
|
||||
|
||||
if (onlp_file_write_integer(path, onlp_to_driver_led_mode(lid , mode)) < 0) {
|
||||
lid = ONLP_OID_ID_GET(id);
|
||||
if (onlp_file_write_int(onlp_to_driver_led_mode(lid , mode), LED_FORMAT, leds[lid]) < 0) {
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,117 +30,39 @@
|
||||
#include "platform_lib.h"
|
||||
|
||||
#define PSU_NODE_MAX_PATH_LEN 64
|
||||
|
||||
int _onlp_file_write(char *filename, char *buffer, int buf_size, int data_len)
|
||||
{
|
||||
int fd;
|
||||
int len;
|
||||
|
||||
if ((buffer == NULL) || (buf_size < 0)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((fd = open(filename, O_WRONLY, S_IWUSR)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((len = write(fd, buffer, buf_size)) < 0) {
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((close(fd) == -1)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((len > buf_size) || (data_len != 0 && len != data_len)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int onlp_file_write_integer(char *filename, int value)
|
||||
{
|
||||
char buf[8] = {0};
|
||||
sprintf(buf, "%d", value);
|
||||
|
||||
return _onlp_file_write(filename, buf, (int)strlen(buf), 0);
|
||||
}
|
||||
|
||||
int onlp_file_read_binary(char *filename, char *buffer, int buf_size, int data_len)
|
||||
{
|
||||
int fd;
|
||||
int len;
|
||||
|
||||
if ((buffer == NULL) || (buf_size < 0)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((fd = open(filename, O_RDONLY)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((len = read(fd, buffer, buf_size)) < 0) {
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((close(fd) == -1)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((len > buf_size) || (data_len != 0 && len != data_len)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (data_len >= buf_size) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = onlp_file_read_binary(filename, buffer, buf_size-1, data_len);
|
||||
|
||||
if (ret == 0) {
|
||||
buffer[buf_size-1] = '\0';
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define I2C_PSU_MODEL_NAME_LEN 9
|
||||
#define I2C_PSU_FAN_DIR_LEN 3
|
||||
#define PSU_MODEL_NAME_LEN 9
|
||||
#define PSU_FAN_DIR_LEN 3
|
||||
|
||||
psu_type_t get_psu_type(int id, char* modelname, int modelname_len)
|
||||
{
|
||||
char *node = NULL;
|
||||
char model_name[I2C_PSU_MODEL_NAME_LEN + 1] = {0};
|
||||
char fan_dir[I2C_PSU_FAN_DIR_LEN + 1] = {0};
|
||||
|
||||
/* Check AC model name */
|
||||
node = (id == PSU1_ID) ? PSU1_AC_HWMON_NODE(psu_model_name) : PSU2_AC_HWMON_NODE(psu_model_name);
|
||||
int ret = 0, value = 0;
|
||||
char model[PSU_MODEL_NAME_LEN + 1] = {0};
|
||||
char fan_dir[PSU_FAN_DIR_LEN + 1] = {0};
|
||||
char *path = NULL;
|
||||
|
||||
if (onlp_file_read_string(node, model_name, sizeof(model_name), 0) != 0) {
|
||||
if (modelname && modelname_len < PSU_MODEL_NAME_LEN) {
|
||||
return PSU_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Check AC model name */
|
||||
path = (id == PSU1_ID) ? PSU1_AC_EEPROM_NODE(psu_model_name) : PSU2_AC_EEPROM_NODE(psu_model_name);
|
||||
ret = onlp_file_read((uint8_t*)model, PSU_MODEL_NAME_LEN, &value, path);
|
||||
if (ret != ONLP_STATUS_OK || value != PSU_MODEL_NAME_LEN) {
|
||||
return PSU_TYPE_UNKNOWN;
|
||||
|
||||
}
|
||||
|
||||
if (strncmp(model_name, "YM-2651Y", strlen("YM-2651Y")) != 0) {
|
||||
if (strncmp(model, "YM-2651Y", strlen("YM-2651Y")) != 0) {
|
||||
return PSU_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
if (modelname) {
|
||||
strncpy(modelname, model_name, modelname_len-1);
|
||||
strncpy(modelname, model, modelname_len-1);
|
||||
}
|
||||
|
||||
node = (id == PSU1_ID) ? PSU1_AC_PMBUS_NODE(psu_fan_dir) : PSU2_AC_PMBUS_NODE(psu_fan_dir);
|
||||
|
||||
if (onlp_file_read_string(node, fan_dir, sizeof(fan_dir), 0) != 0) {
|
||||
path = (id == PSU1_ID) ? PSU1_AC_PMBUS_NODE(psu_fan_dir) : PSU2_AC_PMBUS_NODE(psu_fan_dir);
|
||||
ret = onlp_file_read((uint8_t*)fan_dir, sizeof(fan_dir), &value, path);
|
||||
if (ret != ONLP_STATUS_OK) {
|
||||
return PSU_TYPE_UNKNOWN;
|
||||
}
|
||||
|
||||
@@ -192,7 +114,7 @@ int psu_ym2651y_pmbus_info_set(int id, char *node, int value)
|
||||
return ONLP_STATUS_E_UNSUPPORTED;
|
||||
};
|
||||
|
||||
if (onlp_file_write_integer(path, value) < 0) {
|
||||
if (onlp_file_write_int(value, path) < 0) {
|
||||
AIM_LOG_ERROR("Unable to write data to file (%s)\r\n", path);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
#define CHASSIS_FAN_COUNT 6
|
||||
#define CHASSIS_THERMAL_COUNT 5
|
||||
#define CHASSIS_PSU_COUNT 2
|
||||
#define CHASSIS_LED_COUNT 5
|
||||
#define CHASSIS_PSU_COUNT 2
|
||||
|
||||
#define PSU1_ID 1
|
||||
#define PSU2_ID 2
|
||||
@@ -42,32 +42,17 @@
|
||||
#define PSU1_AC_PMBUS_NODE(node) PSU1_AC_PMBUS_PREFIX#node
|
||||
#define PSU2_AC_PMBUS_NODE(node) PSU2_AC_PMBUS_PREFIX#node
|
||||
|
||||
#define PSU1_AC_HWMON_PREFIX "/sys/bus/i2c/devices/11-0053/"
|
||||
#define PSU2_AC_HWMON_PREFIX "/sys/bus/i2c/devices/10-0050/"
|
||||
#define PSU1_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/11-0053/"
|
||||
#define PSU2_AC_EEPROM_PREFIX "/sys/bus/i2c/devices/10-0050/"
|
||||
|
||||
#define PSU1_AC_HWMON_NODE(node) PSU1_AC_HWMON_PREFIX#node
|
||||
#define PSU2_AC_HWMON_NODE(node) PSU2_AC_HWMON_PREFIX#node
|
||||
#define PSU1_AC_EEPROM_NODE(node) PSU1_AC_EEPROM_PREFIX#node
|
||||
#define PSU2_AC_EEPROM_NODE(node) PSU2_AC_EEPROM_PREFIX#node
|
||||
|
||||
#define FAN_BOARD_PATH "/sys/bus/i2c/devices/2-0066/"
|
||||
#define FAN_NODE(node) FAN_BOARD_PATH#node
|
||||
|
||||
#define IDPROM_PATH "/sys/class/i2c-adapter/i2c-1/1-0057/eeprom"
|
||||
|
||||
int onlp_file_write_integer(char *filename, int value);
|
||||
int onlp_file_read_binary(char *filename, char *buffer, int buf_size, int data_len);
|
||||
int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_len);
|
||||
|
||||
int psu_ym2651y_pmbus_info_get(int id, char *node, int *value);
|
||||
int psu_ym2651y_pmbus_info_set(int id, char *node, int value);
|
||||
|
||||
typedef enum psu_type {
|
||||
PSU_TYPE_UNKNOWN,
|
||||
PSU_TYPE_AC_F2B,
|
||||
PSU_TYPE_AC_B2F
|
||||
} psu_type_t;
|
||||
|
||||
psu_type_t get_psu_type(int id, char* modelname, int modelname_len);
|
||||
|
||||
enum onlp_thermal_id
|
||||
{
|
||||
THERMAL_RESERVED = 0,
|
||||
@@ -80,6 +65,16 @@ enum onlp_thermal_id
|
||||
THERMAL_1_ON_PSU2,
|
||||
};
|
||||
|
||||
typedef enum psu_type {
|
||||
PSU_TYPE_UNKNOWN,
|
||||
PSU_TYPE_AC_F2B,
|
||||
PSU_TYPE_AC_B2F
|
||||
} psu_type_t;
|
||||
|
||||
psu_type_t get_psu_type(int id, char* modelname, int modelname_len);
|
||||
int psu_ym2651y_pmbus_info_get(int id, char *node, int *value);
|
||||
int psu_ym2651y_pmbus_info_set(int id, char *node, int value);
|
||||
|
||||
#define DEBUG_MODE 0
|
||||
|
||||
#if (DEBUG_MODE == 1)
|
||||
|
||||
@@ -23,14 +23,12 @@
|
||||
*
|
||||
*
|
||||
***********************************************************/
|
||||
#include <onlplib/file.h>
|
||||
#include <onlp/platformi/psui.h>
|
||||
#include <onlplib/file.h>
|
||||
#include "platform_lib.h"
|
||||
|
||||
#define PSU_STATUS_PRESENT 1
|
||||
#define PSU_STATUS_POWER_GOOD 1
|
||||
|
||||
#define PSU_NODE_MAX_INT_LEN 8
|
||||
#define PSU_STATUS_PRESENT 1
|
||||
#define PSU_STATUS_POWER_GOOD 1
|
||||
#define PSU_NODE_MAX_PATH_LEN 64
|
||||
|
||||
#define VALIDATE(_id) \
|
||||
@@ -43,24 +41,17 @@
|
||||
static int
|
||||
psu_status_info_get(int id, char *node, int *value)
|
||||
{
|
||||
int ret = 0;
|
||||
char path[PSU_NODE_MAX_PATH_LEN] = {0};
|
||||
|
||||
char *prefix = NULL;
|
||||
|
||||
*value = 0;
|
||||
|
||||
if (PSU1_ID == id) {
|
||||
ret = onlp_file_read_int(value, "%s%s", PSU1_AC_HWMON_PREFIX, node);
|
||||
}
|
||||
else if (PSU2_ID == id) {
|
||||
ret = onlp_file_read_int(value, "%s%s", PSU2_AC_HWMON_PREFIX, node);
|
||||
}
|
||||
|
||||
if (ret < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file(%s)\r\n", path);
|
||||
prefix = (id == PSU1_ID) ? PSU1_AC_EEPROM_PREFIX : PSU2_AC_EEPROM_PREFIX;
|
||||
if (onlp_file_read_int(value, "%s%s", prefix, node) < 0) {
|
||||
AIM_LOG_ERROR("Unable to read status from file(%s%s)\r\n", prefix, node);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* <bsn.cl fy=2014 v=onl>
|
||||
*
|
||||
* Copyright 2014 Big Switch Networks, Inc.
|
||||
* Copyright 2016 Accton Technology Corporation.
|
||||
* Copyright 2017 Accton Technology Corporation.
|
||||
*
|
||||
* Licensed under the Eclipse Public License, Version 1.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
@@ -30,23 +30,11 @@
|
||||
#include "x86_64_accton_as5912_54xk_log.h"
|
||||
|
||||
#define NUM_OF_SFP_PORT 54
|
||||
#define MAX_SFP_PATH 64
|
||||
static char sfp_node_path[MAX_SFP_PATH] = {0};
|
||||
#define FRONT_PORT_BUS_INDEX(port) (port+26)
|
||||
#define MAX_PORT_PATH 64
|
||||
|
||||
static char*
|
||||
sfp_get_port_path_addr(int port, int addr, char *node_name)
|
||||
{
|
||||
sprintf(sfp_node_path, "/sys/bus/i2c/devices/%d-00%d/%s",
|
||||
FRONT_PORT_BUS_INDEX(port), addr, node_name);
|
||||
return sfp_node_path;
|
||||
}
|
||||
|
||||
static char*
|
||||
sfp_get_port_path(int port, char *node_name)
|
||||
{
|
||||
return sfp_get_port_path_addr(port, 50, node_name);
|
||||
}
|
||||
#define SFP_PORT_FORMAT "/sys/bus/i2c/devices/%d-0050/%s"
|
||||
#define SFP_PORT_DOM_FORMAT "/sys/bus/i2c/devices/%d-0051/%s"
|
||||
#define SFP_BUS_INDEX(port) (port+26)
|
||||
|
||||
/************************************************************
|
||||
*
|
||||
@@ -86,9 +74,7 @@ onlp_sfpi_is_present(int port)
|
||||
* Return < 0 if error.
|
||||
*/
|
||||
int present;
|
||||
char *path = sfp_get_port_path(port, "sfp_is_present");
|
||||
|
||||
if (onlp_file_read_int(&present, path) < 0) {
|
||||
if (onlp_file_read_int(&present, SFP_PORT_FORMAT, SFP_BUS_INDEX(port), "sfp_is_present") < 0) {
|
||||
AIM_LOG_ERROR("Unable to read present status from port(%d)\r\n", port);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
@@ -100,12 +86,10 @@ int
|
||||
onlp_sfpi_presence_bitmap_get(onlp_sfp_bitmap_t* dst)
|
||||
{
|
||||
uint32_t bytes[7];
|
||||
char* path;
|
||||
char path[MAX_PORT_PATH] = {0};
|
||||
FILE* fp;
|
||||
|
||||
AIM_BITMAP_CLR_ALL(dst);
|
||||
|
||||
path = sfp_get_port_path(0, "sfp_is_present_all");
|
||||
sprintf(path, SFP_PORT_FORMAT, SFP_BUS_INDEX(0), "sfp_is_present_all");
|
||||
fp = fopen(path, "r");
|
||||
|
||||
if(fp == NULL) {
|
||||
@@ -148,14 +132,40 @@ onlp_sfpi_presence_bitmap_get(onlp_sfp_bitmap_t* dst)
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sfpi_eeprom_read(int port, uint8_t data[256])
|
||||
{
|
||||
int size = 0;
|
||||
if(onlp_file_read(data, 256, &size, SFP_PORT_FORMAT, SFP_BUS_INDEX(port), "sfp_eeprom") == ONLP_STATUS_OK) {
|
||||
if(size == 256) {
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sfpi_dom_read(int port, uint8_t data[256])
|
||||
{
|
||||
int size = 0;
|
||||
if(onlp_file_read(data, 256, &size, SFP_PORT_DOM_FORMAT, SFP_BUS_INDEX(port), "sfp_eeprom") == ONLP_STATUS_OK) {
|
||||
if(size == 256) {
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sfpi_rx_los_bitmap_get(onlp_sfp_bitmap_t* dst)
|
||||
{
|
||||
uint32_t bytes[6];
|
||||
char* path;
|
||||
char path[MAX_PORT_PATH] = {0};
|
||||
FILE* fp;
|
||||
|
||||
path = sfp_get_port_path(0, "sfp_rx_los_all");
|
||||
sprintf(path, SFP_PORT_FORMAT, SFP_BUS_INDEX(0), "sfp_rx_los_all");
|
||||
fp = fopen(path, "r");
|
||||
|
||||
if(fp == NULL) {
|
||||
@@ -193,41 +203,6 @@ onlp_sfpi_rx_los_bitmap_get(onlp_sfp_bitmap_t* dst)
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sfpi_eeprom_read(int port, uint8_t data[256])
|
||||
{
|
||||
char* path = sfp_get_port_path(port, "sfp_eeprom");
|
||||
|
||||
/*
|
||||
* Read the SFP eeprom into data[]
|
||||
*
|
||||
* Return MISSING if SFP is missing.
|
||||
* Return OK if eeprom is read
|
||||
*/
|
||||
memset(data, 0, 256);
|
||||
|
||||
if (onlp_file_read_binary(path, (char*)data, 256, 256) != 0) {
|
||||
AIM_LOG_ERROR("Unable to read eeprom from port(%d)\r\n", port);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sfpi_dom_read(int port, uint8_t data[256])
|
||||
{
|
||||
char* path = sfp_get_port_path_addr(port, 51, "sfp_eeprom");
|
||||
memset(data, 0, 256);
|
||||
|
||||
if (onlp_file_read_binary(path, (char*)data, 256, 256) != 0) {
|
||||
AIM_LOG_INFO("Unable to read eeprom from port(%d)\r\n", port);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value)
|
||||
{
|
||||
@@ -237,9 +212,7 @@ onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value)
|
||||
{
|
||||
case ONLP_SFP_CONTROL_TX_DISABLE:
|
||||
{
|
||||
char* path = sfp_get_port_path(port, "sfp_tx_disable");
|
||||
|
||||
if (onlp_file_write_integer(path, value) != 0) {
|
||||
if (onlp_file_write_int(value, SFP_PORT_FORMAT, SFP_BUS_INDEX(port), "sfp_tx_disable") != 0) {
|
||||
AIM_LOG_ERROR("Unable to set tx_disable status to port(%d)\r\n", port);
|
||||
rv = ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
@@ -261,15 +234,12 @@ int
|
||||
onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
|
||||
{
|
||||
int rv;
|
||||
char* path = NULL;
|
||||
|
||||
switch(control)
|
||||
{
|
||||
case ONLP_SFP_CONTROL_RX_LOS:
|
||||
{
|
||||
path = sfp_get_port_path(port, "sfp_rx_los");
|
||||
|
||||
if (onlp_file_read_int(value, path) < 0) {
|
||||
if (onlp_file_read_int(value, SFP_PORT_FORMAT, SFP_BUS_INDEX(port), "sfp_rx_los") < 0) {
|
||||
AIM_LOG_ERROR("Unable to read rx_los status from port(%d)\r\n", port);
|
||||
rv = ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
@@ -281,9 +251,7 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
|
||||
|
||||
case ONLP_SFP_CONTROL_TX_FAULT:
|
||||
{
|
||||
path = sfp_get_port_path(port, "sfp_tx_fault");
|
||||
|
||||
if (onlp_file_read_int(value, path) < 0) {
|
||||
if (onlp_file_read_int(value, SFP_PORT_FORMAT, SFP_BUS_INDEX(port), "sfp_tx_fault") < 0) {
|
||||
AIM_LOG_ERROR("Unable to read tx_fault status from port(%d)\r\n", port);
|
||||
rv = ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
@@ -295,9 +263,7 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
|
||||
|
||||
case ONLP_SFP_CONTROL_TX_DISABLE:
|
||||
{
|
||||
path = sfp_get_port_path(port, "sfp_tx_disable");
|
||||
|
||||
if (onlp_file_read_int(value, path) < 0) {
|
||||
if (onlp_file_read_int(value, SFP_PORT_FORMAT, SFP_BUS_INDEX(port), "sfp_tx_disable") < 0) {
|
||||
AIM_LOG_ERROR("Unable to read tx_disabled status from port(%d)\r\n", port);
|
||||
rv = ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
@@ -321,5 +287,3 @@ onlp_sfpi_denit(void)
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user