mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2026-01-04 22:11:26 +00:00
Fix management port led issue
This commit is contained in:
@@ -90,3 +90,27 @@ int onlp_file_read_string(char *filename, char *buffer, int buf_size, int data_l
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int mdio_read(int skfd, int location, struct ifreq ifr)
|
||||
{
|
||||
struct mii_data *mii = (struct mii_data *)&ifr.ifr_data;
|
||||
mii->reg_num = location;
|
||||
if (ioctl(skfd, SIOCGMIIREG, &ifr) < 0) {
|
||||
fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return mii->val_out;
|
||||
}
|
||||
|
||||
void mdio_write(int skfd, int location, int value, struct ifreq ifr)
|
||||
{
|
||||
struct mii_data *mii = (struct mii_data *)&ifr.ifr_data;
|
||||
mii->reg_num = location;
|
||||
mii->val_in = value;
|
||||
if (ioctl(skfd, SIOCSMIIREG, &ifr) < 0) {
|
||||
fprintf(stderr, "SIOCSMIIREG on %s failed: %s\n", ifr.ifr_name,
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
#ifndef __PLATFORM_LIB_H__
|
||||
#define __PLATFORM_LIB_H__
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <net/if.h>
|
||||
#include <linux/sockios.h>
|
||||
#include <errno.h>
|
||||
#include "x86_64_accton_asgvolt64_log.h"
|
||||
|
||||
#define CHASSIS_FAN_COUNT 4
|
||||
@@ -43,6 +49,16 @@
|
||||
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 mdio_read(int skfd, int location, struct ifreq ifr);
|
||||
void mdio_write(int skfd, int location, int value, struct ifreq ifr);
|
||||
|
||||
|
||||
struct mii_data {
|
||||
unsigned short int phy_id;
|
||||
unsigned short int reg_num;
|
||||
unsigned short int val_in;
|
||||
unsigned short int val_out;
|
||||
};
|
||||
|
||||
|
||||
enum onlp_thermal_id
|
||||
|
||||
@@ -43,6 +43,38 @@ onlp_sysi_platform_get(void)
|
||||
return "x86-64-accton-asgvolt64-r0";
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sysi_init(void)
|
||||
{
|
||||
int skfd = -1;
|
||||
char interface[64];
|
||||
struct ifreq ifr;
|
||||
|
||||
if ((skfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
|
||||
perror("socket");
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
memset(interface, 0x0, 64);
|
||||
strncpy(interface, "eth0", strlen("eth0"));
|
||||
strncpy(ifr.ifr_name, interface, IFNAMSIZ);
|
||||
if (ioctl(skfd, SIOCGMIIPHY, &ifr) < 0) {
|
||||
if (errno != ENODEV)
|
||||
fprintf(stderr, "SIOCGMIIPHY on '%s' failed: %s\n",
|
||||
interface, strerror(errno));
|
||||
|
||||
close(skfd);
|
||||
return ONLP_STATUS_E_INTERNAL;
|
||||
}
|
||||
/* fix mgt port led issue */
|
||||
mdio_write(skfd, 0x16, 3, ifr);
|
||||
mdio_write(skfd, 0x10, 0x7204, ifr);
|
||||
mdio_write(skfd, 0x11, 0x4455, ifr);
|
||||
mdio_write(skfd, 0x16, 0, ifr);
|
||||
close(skfd);
|
||||
|
||||
return ONLP_STATUS_OK;
|
||||
}
|
||||
|
||||
int
|
||||
onlp_sysi_onie_data_get(uint8_t** data, int* size)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user