From 9094eb7dbe36c529c8b3a764d9f71cf3f26f2594 Mon Sep 17 00:00:00 2001 From: Brandon Chuang Date: Tue, 6 Mar 2018 16:15:47 +0800 Subject: [PATCH 1/5] [as7312-54x] Support PSU serial number --- .../onlp/builds/src/module/src/platform_lib.c | 27 +++++++++++++++++++ .../onlp/builds/src/module/src/platform_lib.h | 1 + .../onlp/builds/src/module/src/psui.c | 4 ++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.c index 7d7d8d31..e820a63e 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.c @@ -1,3 +1,5 @@ +#include +#include #include #include #include "platform_lib.h" @@ -173,3 +175,28 @@ int psu_ym2651y_pmbus_info_set(int id, char *node, int value) return ONLP_STATUS_OK; } + +#define PSU_SERIAL_NUMBER_LEN 18 + +int psu_serial_number_get(int id, char *serial, int serial_len) +{ + int size = 0; + int ret = ONLP_STATUS_OK; + char *prefix = NULL; + + if (serial == NULL || serial_len < PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_PARAM; + } + + prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX; + + ret = onlp_file_read((uint8_t*)serial, PSU_SERIAL_NUMBER_LEN, &size, "%s%s", prefix, "psu_mfr_serial"); + if (ret != ONLP_STATUS_OK || size != PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_INTERNAL; + + } + + serial[PSU_SERIAL_NUMBER_LEN] = '\0'; + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.h index 7fb175b0..2f0ad8c9 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/platform_lib.h @@ -72,6 +72,7 @@ typedef enum psu_type { } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_serial_number_get(int id, char *serial, int serial_len); //#define DEBUG_MODE 1 diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/psui.c index 77074bb8..006402d6 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7312-54x/onlp/builds/src/module/src/psui.c @@ -102,7 +102,9 @@ psu_ym2651y_info_get(onlp_psu_info_t* info) if (psu_ym2651y_pmbus_info_get(index, "psu_p_out", &val) == 0) { info->mpout = val; info->caps |= ONLP_PSU_CAPS_POUT; - } + } + + psu_serial_number_get(index, info->serial, sizeof(info->serial)); return ONLP_STATUS_OK; } From 6eacf04db4dfb32a41ed488fae1fa4fe6ab1e322 Mon Sep 17 00:00:00 2001 From: Brandon Chuang Date: Tue, 6 Mar 2018 16:18:52 +0800 Subject: [PATCH 2/5] [as5912-54x] Support PSU serial number --- .../onlp/builds/src/module/src/platform_lib.c | 24 +++++++++++++++++++ .../onlp/builds/src/module/src/platform_lib.h | 1 + .../onlp/builds/src/module/src/psui.c | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.c index b14867bd..a79bb0b0 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.c @@ -200,3 +200,27 @@ int psu_ym2651y_pmbus_info_set(int id, char *node, int value) return ONLP_STATUS_OK; } +#define PSU_SERIAL_NUMBER_LEN 18 + +int psu_serial_number_get(int id, char *serial, int serial_len) +{ + int size = 0; + int ret = ONLP_STATUS_OK; + char *prefix = NULL; + + if (serial == NULL || serial_len < PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_PARAM; + } + + prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX; + + ret = onlp_file_read((uint8_t*)serial, PSU_SERIAL_NUMBER_LEN, &size, "%s%s", prefix, "psu_mfr_serial"); + if (ret != ONLP_STATUS_OK || size != PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_INTERNAL; + + } + + serial[PSU_SERIAL_NUMBER_LEN] = '\0'; + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.h index 24242bfb..97163cad 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/platform_lib.h @@ -67,6 +67,7 @@ typedef enum psu_type { } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_serial_number_get(int id, char *serial, int serial_len); enum onlp_thermal_id { diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/psui.c index 6da5aa58..7beedeb5 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as5912-54x/onlp/builds/src/module/src/psui.c @@ -101,7 +101,9 @@ psu_ym2651y_info_get(onlp_psu_info_t* info) if (psu_ym2651y_pmbus_info_get(index, "psu_p_out", &val) == 0) { info->mpout = val; info->caps |= ONLP_PSU_CAPS_POUT; - } + } + + psu_serial_number_get(index, info->serial, sizeof(info->serial)); return ONLP_STATUS_OK; } From 07e8ad4013d28f7dad108c6c8707b9a486e8cafb Mon Sep 17 00:00:00 2001 From: Brandon Chuang Date: Tue, 6 Mar 2018 16:21:35 +0800 Subject: [PATCH 3/5] [as7712-32x] Support PSU serial number --- .../onlp/builds/src/module/src/platform_lib.c | 27 +++++++++++++++++++ .../onlp/builds/src/module/src/platform_lib.h | 1 + .../onlp/builds/src/module/src/psui.c | 2 ++ 3 files changed, 30 insertions(+) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.c index b4ef2d04..ea139ae7 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.c @@ -23,6 +23,8 @@ * * ***********************************************************/ +#include +#include #include #include #include @@ -198,3 +200,28 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) return PSU_TYPE_UNKNOWN; } + +#define PSU_SERIAL_NUMBER_LEN 18 + +int psu_serial_number_get(int id, char *serial, int serial_len) +{ + int size = 0; + int ret = ONLP_STATUS_OK; + char *prefix = NULL; + + if (serial == NULL || serial_len < PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_PARAM; + } + + prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX; + + ret = onlp_file_read((uint8_t*)serial, PSU_SERIAL_NUMBER_LEN, &size, "%s%s", prefix, "psu_mfr_serial"); + if (ret != ONLP_STATUS_OK || size != PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_INTERNAL; + + } + + serial[PSU_SERIAL_NUMBER_LEN] = '\0'; + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.h index 10c3f8d6..a1e32542 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/platform_lib.h @@ -64,6 +64,7 @@ typedef enum psu_type { } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_serial_number_get(int id, char *serial, int serial_len); #define DEBUG_MODE 0 diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/psui.c index 88c02f03..9a1a1436 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/module/src/psui.c @@ -128,6 +128,8 @@ psu_ym2651_info_get(onlp_psu_info_t* info) info->caps |= ONLP_PSU_CAPS_POUT; } + psu_serial_number_get(index, info->serial, sizeof(info->serial)); + return ONLP_STATUS_OK; } From 09633ae72c8fba069d0e90f174c0124e36a35582 Mon Sep 17 00:00:00 2001 From: Brandon Chuang Date: Tue, 6 Mar 2018 16:24:44 +0800 Subject: [PATCH 4/5] [as7716-32x] Support PSU serial number --- .../onlp/builds/src/module/src/platform_lib.c | 27 +++++++++++++++++++ .../onlp/builds/src/module/src/platform_lib.h | 1 + .../onlp/builds/src/module/src/psui.c | 2 ++ 3 files changed, 30 insertions(+) diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.c index b4ef2d04..ea139ae7 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.c @@ -23,6 +23,8 @@ * * ***********************************************************/ +#include +#include #include #include #include @@ -198,3 +200,28 @@ psu_type_t get_psu_type(int id, char* modelname, int modelname_len) return PSU_TYPE_UNKNOWN; } + +#define PSU_SERIAL_NUMBER_LEN 18 + +int psu_serial_number_get(int id, char *serial, int serial_len) +{ + int size = 0; + int ret = ONLP_STATUS_OK; + char *prefix = NULL; + + if (serial == NULL || serial_len < PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_PARAM; + } + + prefix = (id == PSU1_ID) ? PSU1_AC_PMBUS_PREFIX : PSU2_AC_PMBUS_PREFIX; + + ret = onlp_file_read((uint8_t*)serial, PSU_SERIAL_NUMBER_LEN, &size, "%s%s", prefix, "psu_mfr_serial"); + if (ret != ONLP_STATUS_OK || size != PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_INTERNAL; + + } + + serial[PSU_SERIAL_NUMBER_LEN] = '\0'; + return ONLP_STATUS_OK; +} + diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.h index 6c88df33..d6d367ed 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/platform_lib.h @@ -64,6 +64,7 @@ typedef enum psu_type { } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_serial_number_get(int id, char *serial, int serial_len); #define DEBUG_MODE 0 diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/psui.c index 562901d2..f12f6e8e 100644 --- a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/module/src/psui.c @@ -128,6 +128,8 @@ psu_ym2651_info_get(onlp_psu_info_t* info) info->caps |= ONLP_PSU_CAPS_POUT; } + psu_serial_number_get(index, info->serial, sizeof(info->serial)); + return ONLP_STATUS_OK; } From 3b304d59c49546a1696c2c07a3b9ae30dcf2be53 Mon Sep 17 00:00:00 2001 From: Jostar Yang Date: Thu, 8 Mar 2018 17:54:50 +0800 Subject: [PATCH 5/5] Add to support read psu serial number for as6812-32x --- .../builds/x86-64-accton-as6812-32x-psu.c | 92 ++++++++++++++++--- .../onlp/builds/src/module/src/platform_lib.c | 28 ++++++ .../onlp/builds/src/module/src/platform_lib.h | 1 + .../onlp/builds/src/module/src/psui.c | 3 + 4 files changed, 113 insertions(+), 11 deletions(-) mode change 100644 => 100755 packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c mode change 100644 => 100755 packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c mode change 100644 => 100755 packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h mode change 100644 => 100755 packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c old mode 100644 new mode 100755 index ead60143..7a96c931 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/modules/builds/x86-64-accton-as6812-32x-psu.c @@ -42,9 +42,10 @@ static ssize_t show_index(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_status(struct device *dev, struct device_attribute *da, char *buf); static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf); +static ssize_t show_serial_number(struct device *dev, struct device_attribute *da,char *buf); static int as6812_32x_psu_read_block(struct i2c_client *client, u8 command, u8 *data,int data_len); extern int as6812_32x_i2c_cpld_read(unsigned short cpld_addr, u8 reg); -static int as6812_32x_psu_model_name_get(struct device *dev); +static int as6812_32x_psu_model_name_get(struct device *dev, int get_serial); /* Addresses scanned */ @@ -60,6 +61,7 @@ struct as6812_32x_psu_data { u8 index; /* PSU index */ u8 status; /* Status(present/power_good) register read from CPLD */ char model_name[14]; /* Model name, read from eeprom */ + char serial[16]; /* Model name, read from eeprom */ }; static struct as6812_32x_psu_data *as6812_32x_psu_update_device(struct device *dev); @@ -68,7 +70,8 @@ enum as6812_32x_psu_sysfs_attributes { PSU_INDEX, PSU_PRESENT, PSU_MODEL_NAME, - PSU_POWER_GOOD + PSU_POWER_GOOD, + PSU_SERIAL_NUMBER }; /* sysfs attributes for hwmon @@ -76,12 +79,14 @@ enum as6812_32x_psu_sysfs_attributes { static SENSOR_DEVICE_ATTR(psu_index, S_IRUGO, show_index, NULL, PSU_INDEX); static SENSOR_DEVICE_ATTR(psu_present, S_IRUGO, show_status, NULL, PSU_PRESENT); static SENSOR_DEVICE_ATTR(psu_model_name, S_IRUGO, show_model_name,NULL, PSU_MODEL_NAME); +static SENSOR_DEVICE_ATTR(psu_serial, S_IRUGO, show_serial_number, NULL, PSU_SERIAL_NUMBER); static SENSOR_DEVICE_ATTR(psu_power_good, S_IRUGO, show_status, NULL, PSU_POWER_GOOD); static struct attribute *as6812_32x_psu_attributes[] = { &sensor_dev_attr_psu_index.dev_attr.attr, &sensor_dev_attr_psu_present.dev_attr.attr, &sensor_dev_attr_psu_model_name.dev_attr.attr, + &sensor_dev_attr_psu_serial.dev_attr.attr, &sensor_dev_attr_psu_power_good.dev_attr.attr, NULL }; @@ -116,6 +121,25 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da, return sprintf(buf, "%d\n", status); } +static ssize_t show_serial_number(struct device *dev, struct device_attribute *da, + char *buf) +{ + struct as6812_32x_psu_data *data = as6812_32x_psu_update_device(dev); + + if (!data->valid) { + return 0; + } + + if (!IS_PRESENT(data->index, data->status)) { + return 0; + } + + if (as6812_32x_psu_model_name_get(dev, 1) < 0) { + return -ENXIO; + } + return sprintf(buf, "%s\n", data->serial); +} + static ssize_t show_model_name(struct device *dev, struct device_attribute *da, char *buf) { @@ -129,7 +153,7 @@ static ssize_t show_model_name(struct device *dev, struct device_attribute *da, return 0; } - if (as6812_32x_psu_model_name_get(dev) < 0) { + if (as6812_32x_psu_model_name_get(dev, 0) < 0) { return -ENXIO; } return sprintf(buf, "%s\n", data->model_name); @@ -264,6 +288,57 @@ enum psu_type { PSU_UM400D01_01G /* DC48V - B2F */ }; +struct serial_number_info { + enum psu_type type; + u8 offset; + u8 length; +}; + +struct serial_number_info serials[] = { +{PSU_YM_2401_JCR, 0x20, 11}, +{PSU_YM_2401_JDR, 0x20, 11}, +{PSU_CPR_4011_4M11, 0x46, 15}, +{PSU_CPR_4011_4M21, 0x46, 15}, +{PSU_CPR_6011_2M11, 0x46, 15}, +{PSU_CPR_6011_2M21, 0x46, 15}, +{PSU_UM400D_01G, 0x50, 9}, +{PSU_UM400D01_01G, 0x50, 12}, +}; + +static int as6812_32x_psu_serial_number_get(struct device *dev, enum psu_type type) +{ + struct i2c_client *client = to_i2c_client(dev); + struct as6812_32x_psu_data *data = i2c_get_clientdata(client); + int i, status; + + switch (type) { + case PSU_CPR_4011_4M11: + case PSU_CPR_4011_4M21: + case PSU_CPR_6011_2M11: + case PSU_CPR_6011_2M21: + { + status = as6812_32x_psu_read_block(client, serials[i].offset, + data->serial, serials[i].length); + if (status < 0) { + data->serial[0] = '\0'; + dev_dbg(&client->dev, "unable to read serial number from (0x%x) offset(0x%x)\n", + client->addr, serials[i].offset); + return status; + } + else { + data->serial[serials[i].length] = '\0'; + return 0; + } + } + break; + default: + break; + } + + return -ENODATA; +} + + struct model_name_info { enum psu_type type; u8 offset; @@ -282,7 +357,7 @@ struct model_name_info models[] = { {PSU_UM400D01_01G, 0x50, 12, "um400d01-01G"}, }; -static int as6812_32x_psu_model_name_get(struct device *dev) +static int as6812_32x_psu_model_name_get(struct device *dev, int get_serial) { struct i2c_client *client = to_i2c_client(dev); struct as6812_32x_psu_data *data = i2c_get_clientdata(client); @@ -313,7 +388,7 @@ static int as6812_32x_psu_model_name_get(struct device *dev) /* Determine if the model name is known, if not, read next index */ if (strncmp(data->model_name, models[i].model_name, models[i].length) == 0) { - return 0; + return get_serial ? as6812_32x_psu_serial_number_get(dev, i) : 0; } else { data->model_name[0] = '\0'; @@ -359,12 +434,7 @@ exit: } static int __init as6812_32x_psu_init(void) -{ - extern int platform_accton_as6812_32x(void); - if(!platform_accton_as6812_32x()) { - return -ENODEV; - } - +{ return i2c_add_driver(&as6812_32x_psu_driver); } diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c old mode 100644 new mode 100755 index 1591cddd..789ac74d --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.c @@ -23,6 +23,8 @@ * * ***********************************************************/ +#include +#include #include #include #include @@ -248,3 +250,29 @@ int psu_ym2401_pmbus_info_set(int id, char *node, int value) return ONLP_STATUS_OK; } +#define PSU_SERIAL_NUMBER_LEN 18 + +int psu_serial_number_get(int id, int is_ac, char *serial, int serial_len) +{ + int size = 0; + int ret = ONLP_STATUS_OK; + char *prefix = NULL; + + if (serial == NULL || serial_len < PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_PARAM; + } + + memset((void *)serial, 0x0, serial_len); + if(is_ac) + prefix = (id == PSU1_ID) ? PSU1_AC_EEPROM_PREFIX : PSU2_AC_EEPROM_PREFIX; + else + prefix = (id == PSU1_ID) ? PSU1_DC_EEPROM_PREFIX : PSU2_DC_EEPROM_PREFIX; + ret = onlp_file_read((uint8_t*)serial, PSU_SERIAL_NUMBER_LEN, &size, "%s%s", prefix, "psu_serial"); + if (ret != ONLP_STATUS_OK || size != PSU_SERIAL_NUMBER_LEN) { + return ONLP_STATUS_E_INTERNAL; + + } + + serial[PSU_SERIAL_NUMBER_LEN] = '\0'; + return ONLP_STATUS_OK; +} \ No newline at end of file diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h old mode 100644 new mode 100755 index 77a1aec4..7cc3f21a --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/platform_lib.h @@ -72,6 +72,7 @@ typedef enum psu_type { } psu_type_t; psu_type_t get_psu_type(int id, char* modelname, int modelname_len); +int psu_serial_number_get(int id, int is_ac, char *serial, int serial_len); int psu_ym2401_pmbus_info_get(int id, char *node, int *value); int psu_ym2401_pmbus_info_set(int id, char *node, int value); diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c old mode 100644 new mode 100755 index cfaffbaf..f1bd0309 --- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c +++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/module/src/psui.c @@ -225,6 +225,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) int val = 0; int ret = ONLP_STATUS_OK; int index = ONLP_OID_ID_GET(id); + int is_ac=1; psu_type_t psu_type; VALIDATE(id); @@ -270,12 +271,14 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info) break; case PSU_TYPE_DC_48V_F2B: case PSU_TYPE_DC_48V_B2F: + is_ac=0; ret = psu_um400d_info_get(info); break; default: ret = ONLP_STATUS_E_UNSUPPORTED; break; } + psu_serial_number_get(index, is_ac, info->serial, sizeof(info->serial)); return ret; }