[LY6,LY8,LY9] Change all low-level function-call to onlp APIs

This commit is contained in:
Jonathan Tsai
2017-02-22 13:45:18 +08:00
parent f4faf45af4
commit 0c7cc3b62e
18 changed files with 61 additions and 566 deletions

View File

@@ -1,19 +0,0 @@
#ifndef __QUANTA_LIB_GPIO_H__
#define __QUANTA_LIB_GPIO_H__
#define GPIO_LOW 0
#define GPIO_HIGH 1
#define GPIO_IN 0
#define GPIO_OUT 1
#define GPIO_PATH "/sys/class/gpio"
#define GPIO_EXPORT GPIO_PATH "/export"
#define GPIO_UNEXPORT GPIO_PATH "/unexport"
#define GPIO_PREF GPIO_PATH "/gpio"
int pca953x_gpio_value_get(int gpio, int *value);
int pca953x_gpio_direction_set(int gpio, int direction);
int pca953x_gpio_value_set(int gpio, int value);
#endif /* __QUANTA_LIB_GPIO_H__ */

View File

@@ -1,7 +0,0 @@
#ifndef __QUANTA_LIB_I2C_H__
#define __QUANTA_LIB_I2C_H__
int i2c_block_read(int bus, uint8_t addr, uint8_t offset, int size,
uint8_t* rdata, uint32_t flags);
#endif /* __QUANTA_LIB_I2C_H__ */

View File

@@ -1,82 +0,0 @@
#include <onlp/onlp.h>
#include <onlplib/file.h>
#include <quanta_lib/gpio.h>
#include <sys/stat.h>
#include <limits.h>
static int file_exists(char *filename) {
struct stat st;
return (stat(filename, &st) == 0);
}
static int try_export_gpio(int gpio) {
char filename[PATH_MAX];
memset(filename, 0, sizeof(filename));
sprintf(filename, "%s%d/value", GPIO_PREF, gpio);
if(!file_exists(filename)) {
onlp_file_write_int(gpio, GPIO_EXPORT);
}
return ONLP_STATUS_OK;
}
static int try_unexport_gpio(int gpio) {
char filename[PATH_MAX];
memset(filename, 0, sizeof(filename));
sprintf(filename, "%s%d/value", GPIO_PREF, gpio);
if(file_exists(filename)) {
onlp_file_write_int(gpio, GPIO_UNEXPORT);
}
return ONLP_STATUS_OK;
}
int pca953x_gpio_value_get(int gpio, int *value) {
int ret;
try_export_gpio(gpio);
ret = onlp_file_read_int(value, "%s%d/value", GPIO_PREF, gpio);
try_unexport_gpio(gpio);
return ret;
}
int pca953x_gpio_direction_set(int gpio, int direction) {
int ret;
try_export_gpio(gpio);
switch(direction) {
case GPIO_IN:
ret = onlp_file_write_str("in", "%s%d/direction", GPIO_PREF, gpio);
break;
case GPIO_OUT:
ret = onlp_file_write_str("out", "%s%d/direction", GPIO_PREF, gpio);
break;
default:
ret = ONLP_STATUS_E_UNSUPPORTED;
break;
}
try_unexport_gpio(gpio);
return ret;
}
int pca953x_gpio_value_set(int gpio, int value) {
int ret;
pca953x_gpio_direction_set(gpio, GPIO_OUT);
try_export_gpio(gpio);
ret = onlp_file_write_int(value, "%s%d/value", GPIO_PREF, gpio);
try_unexport_gpio(gpio);
return ret;
}

View File

@@ -1,51 +0,0 @@
#include <onlp/onlp.h>
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include <quanta_lib/i2c.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/i2c-dev.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <errno.h>
/* first byte of rdata is length of result */
int
i2c_block_read(int bus, uint8_t addr, uint8_t offset, int size,
uint8_t* rdata, uint32_t flags)
{
int fd;
fd = onlp_i2c_open(bus, addr, flags);
if(fd < 0) {
return fd;
}
int count = size;
uint8_t* p = rdata;
while(count > 0) {
int rsize = (count >= ONLPLIB_CONFIG_I2C_BLOCK_SIZE) ? ONLPLIB_CONFIG_I2C_BLOCK_SIZE : count;
int rv = i2c_smbus_read_i2c_block_data(fd,
offset,
rsize,
p);
if(rv != rsize) {
printf("i2c-%d: reading address 0x%x, offset %d, size=%d failed",
bus, addr, offset, rsize);
goto error;
}
p += rsize;
count -= rsize;
}
close(fd);
return 0;
error:
close(fd);
return -1;
}

View File

@@ -11,7 +11,6 @@
#include <onlp/platformi/psui.h>
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include <quanta_lib/i2c.h>
#include <onlplib/gpio.h>
#include "x86_64_quanta_ly6_rangeley_int.h"
#include "x86_64_quanta_ly6_rangeley_log.h"
@@ -85,7 +84,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
info->status |= 1;
memset(buffer, 0, sizeof(buffer));
rv = i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_MODEL, PMBUS_MFR_MODEL_LEN, buffer, ONLP_I2C_F_FORCE);
rv = onlp_i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_MODEL, PMBUS_MFR_MODEL_LEN, buffer, ONLP_I2C_F_FORCE);
if(rv >= 0){
aim_strlcpy(info->model, (char *) (buffer+1), (buffer[0] + 1));
}
@@ -94,7 +93,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
}
memset(buffer, 0, sizeof(buffer));
rv = i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_SERIAL, PMBUS_MFR_SERIAL_LEN, buffer, ONLP_I2C_F_FORCE);
rv = onlp_i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_SERIAL, PMBUS_MFR_SERIAL_LEN, buffer, ONLP_I2C_F_FORCE);
if(rv >= 0){
aim_strlcpy(info->serial, (char *) (buffer+1), (buffer[0] + 1));
}

View File

@@ -26,13 +26,12 @@
#include <x86_64_quanta_ly6_rangeley/x86_64_quanta_ly6_rangeley_gpio_table.h>
#include <onlp/platformi/sfpi.h>
#include <onlplib/sfp.h>
#include <onlplib/gpio.h>
#include "x86_64_quanta_ly6_rangeley_log.h"
#include <unistd.h>
#include <fcntl.h>
#include <quanta_lib/gpio.h>
/**
* This table maps the presence gpio, reset gpio, and eeprom file
* for each SFP port.
@@ -86,9 +85,12 @@ int
onlp_sfpi_init(void)
{
int value = -1, ret;
ret = pca953x_gpio_value_get(QUANTA_LY6_QSFP_EN_GPIO_P3V3_PW_EN, &value);
if(ret == ONLP_STATUS_OK && value != GPIO_HIGH) {
ret = pca953x_gpio_value_set(QUANTA_LY6_QSFP_EN_GPIO_P3V3_PW_EN, GPIO_HIGH);
onlp_gpio_export(QUANTA_LY6_QSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_IN);
ret = onlp_gpio_get(QUANTA_LY6_QSFP_EN_GPIO_P3V3_PW_EN, &value);
if(ret == ONLP_STATUS_OK && value != 1) {
onlp_gpio_export(QUANTA_LY6_QSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_OUT);
ret = onlp_gpio_set(QUANTA_LY6_QSFP_EN_GPIO_P3V3_PW_EN, 1);
sleep(1);
}
@@ -115,8 +117,8 @@ onlp_sfpi_is_present(int port)
int value = 0;
sfpmap_t* sfp = SFP_GET(port);
if(sfp->present_gpio > 0) {
if(pca953x_gpio_value_get(sfp->present_gpio, &value) == ONLP_STATUS_OK)
return (value == GPIO_LOW);
if(onlp_gpio_get(sfp->present_gpio, &value) == ONLP_STATUS_OK)
return (value == 0);
else
return ONLP_STATUS_E_MISSING;
}

View File

@@ -1,19 +0,0 @@
#ifndef __QUANTA_LIB_GPIO_H__
#define __QUANTA_LIB_GPIO_H__
#define GPIO_LOW 0
#define GPIO_HIGH 1
#define GPIO_IN 0
#define GPIO_OUT 1
#define GPIO_PATH "/sys/class/gpio"
#define GPIO_EXPORT GPIO_PATH "/export"
#define GPIO_UNEXPORT GPIO_PATH "/unexport"
#define GPIO_PREF GPIO_PATH "/gpio"
int pca953x_gpio_value_get(int gpio, int *value);
int pca953x_gpio_direction_set(int gpio, int direction);
int pca953x_gpio_value_set(int gpio, int value);
#endif /* __QUANTA_LIB_GPIO_H__ */

View File

@@ -1,7 +0,0 @@
#ifndef __QUANTA_LIB_I2C_H__
#define __QUANTA_LIB_I2C_H__
int i2c_block_read(int bus, uint8_t addr, uint8_t offset, int size,
uint8_t* rdata, uint32_t flags);
#endif /* __QUANTA_LIB_I2C_H__ */

View File

@@ -1,82 +0,0 @@
#include <onlp/onlp.h>
#include <onlplib/file.h>
#include <quanta_lib/gpio.h>
#include <sys/stat.h>
#include <limits.h>
static int file_exists(char *filename) {
struct stat st;
return (stat(filename, &st) == 0);
}
static int try_export_gpio(int gpio) {
char filename[PATH_MAX];
memset(filename, 0, sizeof(filename));
sprintf(filename, "%s%d/value", GPIO_PREF, gpio);
if(!file_exists(filename)) {
onlp_file_write_int(gpio, GPIO_EXPORT);
}
return ONLP_STATUS_OK;
}
static int try_unexport_gpio(int gpio) {
char filename[PATH_MAX];
memset(filename, 0, sizeof(filename));
sprintf(filename, "%s%d/value", GPIO_PREF, gpio);
if(file_exists(filename)) {
onlp_file_write_int(gpio, GPIO_UNEXPORT);
}
return ONLP_STATUS_OK;
}
int pca953x_gpio_value_get(int gpio, int *value) {
int ret;
try_export_gpio(gpio);
ret = onlp_file_read_int(value, "%s%d/value", GPIO_PREF, gpio);
try_unexport_gpio(gpio);
return ret;
}
int pca953x_gpio_direction_set(int gpio, int direction) {
int ret;
try_export_gpio(gpio);
switch(direction) {
case GPIO_IN:
ret = onlp_file_write_str("in", "%s%d/direction", GPIO_PREF, gpio);
break;
case GPIO_OUT:
ret = onlp_file_write_str("out", "%s%d/direction", GPIO_PREF, gpio);
break;
default:
ret = ONLP_STATUS_E_UNSUPPORTED;
break;
}
try_unexport_gpio(gpio);
return ret;
}
int pca953x_gpio_value_set(int gpio, int value) {
int ret;
pca953x_gpio_direction_set(gpio, GPIO_OUT);
try_export_gpio(gpio);
ret = onlp_file_write_int(value, "%s%d/value", GPIO_PREF, gpio);
try_unexport_gpio(gpio);
return ret;
}

View File

@@ -1,51 +0,0 @@
#include <onlp/onlp.h>
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include <quanta_lib/i2c.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/i2c-dev.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <errno.h>
/* first byte of rdata is length of result */
int
i2c_block_read(int bus, uint8_t addr, uint8_t offset, int size,
uint8_t* rdata, uint32_t flags)
{
int fd;
fd = onlp_i2c_open(bus, addr, flags);
if(fd < 0) {
return fd;
}
int count = size;
uint8_t* p = rdata;
while(count > 0) {
int rsize = (count >= ONLPLIB_CONFIG_I2C_BLOCK_SIZE) ? ONLPLIB_CONFIG_I2C_BLOCK_SIZE : count;
int rv = i2c_smbus_read_i2c_block_data(fd,
offset,
rsize,
p);
if(rv != rsize) {
printf("i2c-%d: reading address 0x%x, offset %d, size=%d failed",
bus, addr, offset, rsize);
goto error;
}
p += rsize;
count -= rsize;
}
close(fd);
return 0;
error:
close(fd);
return -1;
}

View File

@@ -11,7 +11,6 @@
#include <onlp/platformi/psui.h>
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include <quanta_lib/i2c.h>
#include <onlplib/gpio.h>
#include "x86_64_quanta_ly8_rangeley_int.h"
#include "x86_64_quanta_ly8_rangeley_log.h"
@@ -85,7 +84,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
info->status |= 1;
memset(buffer, 0, sizeof(buffer));
rv = i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_MODEL, PMBUS_MFR_MODEL_LEN, buffer, ONLP_I2C_F_FORCE);
rv = onlp_i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_MODEL, PMBUS_MFR_MODEL_LEN, buffer, ONLP_I2C_F_FORCE);
if(rv >= 0) {
aim_strlcpy(info->model, (char *) (buffer+1), (buffer[0]+1));
}
@@ -94,7 +93,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
}
memset(buffer, 0, sizeof(buffer));
rv = i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_SERIAL, PMBUS_MFR_SERIAL_LEN, buffer, ONLP_I2C_F_FORCE);
rv = onlp_i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_SERIAL, PMBUS_MFR_SERIAL_LEN, buffer, ONLP_I2C_F_FORCE);
if(rv >= 0) {
aim_strlcpy(info->serial, (char *) (buffer+1), (buffer[0] + 1));
} else {

View File

@@ -26,13 +26,12 @@
#include <x86_64_quanta_ly8_rangeley/x86_64_quanta_ly8_rangeley_gpio_table.h>
#include <onlp/platformi/sfpi.h>
#include <onlplib/sfp.h>
#include <onlplib/gpio.h>
#include "x86_64_quanta_ly8_rangeley_log.h"
#include <unistd.h>
#include <fcntl.h>
#include <quanta_lib/gpio.h>
/**
* This table maps the presence gpio, reset gpio, and eeprom file
* for each SFP port.
@@ -103,22 +102,35 @@ static sfpmap_t sfpmap__[] =
{ 70, QUANTA_LY8_QSFP_QDB_GPIO_PRSNT_70_N /* 446 */, "/sys/class/gpio/gpio446/value", "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-23/i2c-89/89-0050/eeprom", "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-23/i2c-89/89-0051/eeprom" },
};
#define SFP_GET(_port) (sfpmap__ + _port)
int
onlp_sfpi_init(void)
{
int value = -1, ret;
ret = pca953x_gpio_value_get(QUANTA_LY8_QSFP_EN_GPIO_P3V3_PW_EN, &value);
if(ret == ONLP_STATUS_OK && value != GPIO_HIGH) {
ret = pca953x_gpio_value_set(QUANTA_LY8_QSFP_EN_GPIO_P3V3_PW_EN, GPIO_HIGH);
int value = -1, ret, i;
sfpmap_t* sfp;
onlp_gpio_export(QUANTA_LY8_QSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_IN);
ret = onlp_gpio_get(QUANTA_LY8_QSFP_EN_GPIO_P3V3_PW_EN, &value);
if(ret == ONLP_STATUS_OK && value != 1) {
onlp_gpio_export(QUANTA_LY8_QSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_OUT);
ret = onlp_gpio_set(QUANTA_LY8_QSFP_EN_GPIO_P3V3_PW_EN, 1);
}
if(ret == ONLP_STATUS_OK) {
ret = pca953x_gpio_value_get(QUANTA_LY8_QSFP_QDB_GPIO_MOD_EN_N, &value);
if(ret == ONLP_STATUS_OK && value != GPIO_LOW) {
ret = pca953x_gpio_value_set(QUANTA_LY8_QSFP_QDB_GPIO_MOD_EN_N, GPIO_LOW);
onlp_gpio_export(QUANTA_LY8_QSFP_QDB_GPIO_MOD_EN_N, ONLP_GPIO_DIRECTION_IN);
ret = onlp_gpio_get(QUANTA_LY8_QSFP_QDB_GPIO_MOD_EN_N, &value);
if(ret == ONLP_STATUS_OK && value != 0) {
onlp_gpio_export(QUANTA_LY8_QSFP_QDB_GPIO_MOD_EN_N, ONLP_GPIO_DIRECTION_OUT);
ret = onlp_gpio_set(QUANTA_LY8_QSFP_QDB_GPIO_MOD_EN_N, 0);
}
}
for(i = 0; i < 54; i++) {
sfp = SFP_GET(i);
onlp_gpio_export(sfp->present_gpio, ONLP_GPIO_DIRECTION_IN);
}
return ret;
}
@@ -134,16 +146,14 @@ onlp_sfpi_bitmap_get(onlp_sfp_bitmap_t* bmap)
return ONLP_STATUS_OK;
}
#define SFP_GET(_port) (sfpmap__ + _port)
int
onlp_sfpi_is_present(int port)
{
int value = 0;
sfpmap_t* sfp = SFP_GET(port);
if(sfp->present_gpio > 0) {
if(pca953x_gpio_value_get(sfp->present_gpio, &value) == ONLP_STATUS_OK)
return (value == GPIO_LOW);
if(onlp_gpio_get(sfp->present_gpio, &value) == ONLP_STATUS_OK)
return (value == 0);
else
return ONLP_STATUS_E_MISSING;
}

View File

@@ -1,19 +0,0 @@
#ifndef __QUANTA_LIB_GPIO_H__
#define __QUANTA_LIB_GPIO_H__
#define GPIO_LOW 0
#define GPIO_HIGH 1
#define GPIO_IN 0
#define GPIO_OUT 1
#define GPIO_PATH "/sys/class/gpio"
#define GPIO_EXPORT GPIO_PATH "/export"
#define GPIO_UNEXPORT GPIO_PATH "/unexport"
#define GPIO_PREF GPIO_PATH "/gpio"
int pca953x_gpio_value_get(int gpio, int *value);
int pca953x_gpio_direction_set(int gpio, int direction);
int pca953x_gpio_value_set(int gpio, int value);
#endif /* __QUANTA_LIB_GPIO_H__ */

View File

@@ -1,7 +0,0 @@
#ifndef __QUANTA_LIB_I2C_H__
#define __QUANTA_LIB_I2C_H__
int i2c_block_read(int bus, uint8_t addr, uint8_t offset, int size,
unsigned char *rdata, uint32_t flags);
#endif /* __QUANTA_LIB_I2C_H__ */

View File

@@ -1,82 +0,0 @@
#include <onlp/onlp.h>
#include <onlplib/file.h>
#include <quanta_lib/gpio.h>
#include <sys/stat.h>
#include <limits.h>
static int file_exists(char *filename) {
struct stat st;
return (stat(filename, &st) == 0);
}
static int try_export_gpio(int gpio) {
char filename[PATH_MAX];
memset(filename, 0, sizeof(filename));
sprintf(filename, "%s%d/value", GPIO_PREF, gpio);
if(!file_exists(filename)) {
onlp_file_write_int(gpio, GPIO_EXPORT);
}
return ONLP_STATUS_OK;
}
static int try_unexport_gpio(int gpio) {
char filename[PATH_MAX];
memset(filename, 0, sizeof(filename));
sprintf(filename, "%s%d/value", GPIO_PREF, gpio);
if(file_exists(filename)) {
onlp_file_write_int(gpio, GPIO_UNEXPORT);
}
return ONLP_STATUS_OK;
}
int pca953x_gpio_value_get(int gpio, int *value) {
int ret;
try_export_gpio(gpio);
ret = onlp_file_read_int(value, "%s%d/value", GPIO_PREF, gpio);
try_unexport_gpio(gpio);
return ret;
}
int pca953x_gpio_direction_set(int gpio, int direction) {
int ret;
try_export_gpio(gpio);
switch(direction) {
case GPIO_IN:
ret = onlp_file_write_str("in", "%s%d/direction", GPIO_PREF, gpio);
break;
case GPIO_OUT:
ret = onlp_file_write_str("out", "%s%d/direction", GPIO_PREF, gpio);
break;
default:
ret = ONLP_STATUS_E_UNSUPPORTED;
break;
}
try_unexport_gpio(gpio);
return ret;
}
int pca953x_gpio_value_set(int gpio, int value) {
int ret;
pca953x_gpio_direction_set(gpio, GPIO_OUT);
try_export_gpio(gpio);
ret = onlp_file_write_int(value, "%s%d/value", GPIO_PREF, gpio);
try_unexport_gpio(gpio);
return ret;
}

View File

@@ -1,97 +0,0 @@
#include <onlp/onlp.h>
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include <quanta_lib/i2c.h>
#include <fcntl.h>
#include <unistd.h>
#if ONLPLIB_CONFIG_I2C_USE_CUSTOM_HEADER == 1
#include <linux/i2c-devices.h>
#else
#include <linux/i2c-dev.h>
#endif
#include <sys/types.h>
#include <sys/ioctl.h>
#include "x86_64_quanta_ly9_rangeley_log.h"
#include <AIM/aim_printf.h>
#include <errno.h>
int i2c_dev_smbus_access(int file, char read_write, __u8 command,
int size, union i2c_smbus_data *data)
{
struct i2c_smbus_ioctl_data args;
args.read_write = read_write;
args.command = command;
args.size = size;
args.data = data;
return ioctl(file, I2C_SMBUS, &args);
}
int i2c_dev_read_block(int file, uint8_t command, unsigned char *buffer, int length)
{
union i2c_smbus_data data;
int i;
if (length > 32)
length = 32;
data.block[0] = length;
if (i2c_dev_smbus_access(file, I2C_SMBUS_READ, command,
length == 32 ? I2C_SMBUS_I2C_BLOCK_BROKEN :
I2C_SMBUS_I2C_BLOCK_DATA, &data))
return -1;
else{
for (i = 1; i <= data.block[0]; i++)
buffer[i - 1] = data.block[i];
}
return 0;
}
/* first byte of rdata is length of result */
int
i2c_block_read(int bus, uint8_t addr, uint8_t offset, int size,
unsigned char *rdata, uint32_t flags)
{
int fd;
int force = I2C_SLAVE, rv;
fd = onlp_i2c_open(bus, addr, flags);
if(fd < 0) {
return fd;
}
fd = onlp_file_open(O_RDWR, 1, "/dev/i2c-%d", bus);
if(fd < 0) {
AIM_LOG_MSG("/dev/i2c-%d open Error!", bus);
return fd;
}
/* Set SLAVE or SLAVE_FORCE address */
rv = ioctl(fd,
force ? I2C_SLAVE_FORCE : I2C_SLAVE,
addr);
if(rv == -1) {
AIM_LOG_ERROR("i2c-%d: %s slave address 0x%x failed: %{errno}",
bus,
(flags & ONLP_I2C_F_FORCE) ? "forcing" : "setting",
addr,
errno);
goto error;
}
if ((i2c_dev_read_block(fd, offset, rdata, size)) < 0)
{
printf("/dev/i2c-%d read Error!\n", bus);
close (fd);
return -1;
}
close(fd);
return 0;
error:
close(fd);
return -1;
}

View File

@@ -11,7 +11,6 @@
#include <onlp/platformi/psui.h>
#include <onlplib/file.h>
#include <onlplib/i2c.h>
#include <quanta_lib/i2c.h>
#include <onlplib/gpio.h>
#include "x86_64_quanta_ly9_rangeley_int.h"
#include "x86_64_quanta_ly9_rangeley_log.h"
@@ -85,7 +84,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
info->status |= 1;
memset(buffer, 0, sizeof(buffer));
rv = i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_MODEL, PMBUS_MFR_MODEL_LEN, buffer, ONLP_I2C_F_FORCE);
rv = onlp_i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_MODEL, PMBUS_MFR_MODEL_LEN, buffer, ONLP_I2C_F_FORCE);
buffer[buffer[0] + 1] = 0x00;
if(rv >= 0){
aim_strlcpy(info->model, (char *) (buffer+1), (buffer[0] + 1));
@@ -95,7 +94,7 @@ onlp_psui_info_get(onlp_oid_t id, onlp_psu_info_t* info)
}
memset(buffer, 0, sizeof(buffer));
rv = i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_SERIAL, PMBUS_MFR_SERIAL_LEN, buffer, ONLP_I2C_F_FORCE);
rv = onlp_i2c_block_read(psu_info[pid].busno, psu_info[pid].addr, PMBUS_MFR_SERIAL, PMBUS_MFR_SERIAL_LEN, buffer, ONLP_I2C_F_FORCE);
buffer[buffer[0] + 1] = 0x00;
if(rv >= 0){
aim_strlcpy(info->serial, (char *) (buffer+1), (buffer[0] + 1));

View File

@@ -26,13 +26,12 @@
#include <x86_64_quanta_ly9_rangeley/x86_64_quanta_ly9_rangeley_gpio_table.h>
#include <onlp/platformi/sfpi.h>
#include <onlplib/sfp.h>
#include <onlplib/gpio.h>
#include "x86_64_quanta_ly9_rangeley_log.h"
#include <unistd.h>
#include <fcntl.h>
#include <quanta_lib/gpio.h>
/**
* This table maps the presence gpio, reset gpio, and eeprom file
* for each SFP port.
@@ -67,21 +66,34 @@ static qsfpmap_t qsfpmap__[] =
{ 54, QUANTA_LY9_QSFP_QDB_GPIO_PRSNT_54_N, NULL, "/sys/devices/pci0000:00/0000:00:1f.3/i2c-0/i2c-23/i2c-49/49-0050/eeprom", NULL },
};
#define SFP_GET(_port) (sfpmap__ + _port - 49)
#define QSFP_GET(_port) (qsfpmap__ + _port - 53)
int
onlp_sfpi_init(void)
{
int value = -1, ret;
ret = pca953x_gpio_value_get(QUANTA_LY9_QSFP_EN_GPIO_P3V3_PW_EN, &value);
if(ret == ONLP_STATUS_OK && value != GPIO_LOW) {
ret = pca953x_gpio_value_set(QUANTA_LY9_QSFP_EN_GPIO_P3V3_PW_EN, GPIO_LOW);
int value = -1, ret, i;
qsfpmap_t* qsfp;
onlp_gpio_export(QUANTA_LY9_QSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_IN);
ret = onlp_gpio_get(QUANTA_LY9_QSFP_EN_GPIO_P3V3_PW_EN, &value);
if(ret == ONLP_STATUS_OK && value != 0) {
onlp_gpio_export(QUANTA_LY9_QSFP_EN_GPIO_P3V3_PW_EN, ONLP_GPIO_DIRECTION_OUT);
ret = onlp_gpio_set(QUANTA_LY9_QSFP_EN_GPIO_P3V3_PW_EN, 0);
}
if(ret == ONLP_STATUS_OK) {
ret = pca953x_gpio_value_get(QUANTA_LY9_QSFP_QDB_GPIO_MOD_EN_N, &value);
if(ret == ONLP_STATUS_OK && value != GPIO_LOW) {
ret = pca953x_gpio_value_set(QUANTA_LY9_QSFP_QDB_GPIO_MOD_EN_N, GPIO_LOW);
onlp_gpio_export(QUANTA_LY9_QSFP_QDB_GPIO_MOD_EN_N, ONLP_GPIO_DIRECTION_IN);
ret = onlp_gpio_get(QUANTA_LY9_QSFP_QDB_GPIO_MOD_EN_N, &value);
if(ret == ONLP_STATUS_OK && value != 0) {
onlp_gpio_export(QUANTA_LY9_QSFP_QDB_GPIO_MOD_EN_N, ONLP_GPIO_DIRECTION_OUT);
ret = onlp_gpio_set(QUANTA_LY9_QSFP_QDB_GPIO_MOD_EN_N, 0);
}
}
for(i = 53; i < 55; i++) {
qsfp = QSFP_GET(i);
onlp_gpio_export(qsfp->present_gpio, ONLP_GPIO_DIRECTION_IN);
}
return ret;
}
@@ -98,9 +110,6 @@ onlp_sfpi_bitmap_get(onlp_sfp_bitmap_t* bmap)
return ONLP_STATUS_OK;
}
#define SFP_GET(_port) (sfpmap__ + _port - 49)
#define QSFP_GET(_port) (qsfpmap__ + _port - 53)
int
onlp_sfpi_is_present(int port)
{
@@ -110,8 +119,8 @@ onlp_sfpi_is_present(int port)
qsfpmap_t* qsfp = QSFP_GET(port);
if(qsfp->present_gpio > 0) {
if(pca953x_gpio_value_get(qsfp->present_gpio, &value) == ONLP_STATUS_OK)
return (value == GPIO_LOW);
if(onlp_gpio_get(qsfp->present_gpio, &value) == ONLP_STATUS_OK)
return (value == 0);
else
return ONLP_STATUS_E_MISSING;
}