forked from sonic-net/sonic-buildimage
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[device/celestica]: Implement Sfp APIs based on the new platform API (s…
…onic-net#3290) * [platform/cel]: update qsfp driver for dx010 * [device/celestica]: add sfp api * [device/celestica]: add eeprom api
- Loading branch information
1 parent
f7ca312
commit 46a480b
Showing
7 changed files
with
1,612 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
114 changes: 114 additions & 0 deletions
114
device/celestica/x86_64-cel_e1031-r0/sonic_platform/eeprom.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
#!/usr/bin/env python | ||
|
||
############################################################################# | ||
# Celestica Haliburton | ||
# | ||
# Platform and model specific eeprom subclass, inherits from the base class, | ||
# and provides the followings: | ||
# - the eeprom format definition | ||
# - specific encoder/decoder if there is special need | ||
############################################################################# | ||
|
||
try: | ||
import glob | ||
import os | ||
import sys | ||
import imp | ||
import re | ||
from array import array | ||
from cStringIO import StringIO | ||
from sonic_platform_base.sonic_eeprom import eeprom_dts | ||
from sonic_platform_base.sonic_eeprom import eeprom_tlvinfo | ||
except ImportError, e: | ||
raise ImportError(str(e) + "- required module not found") | ||
|
||
CACHE_ROOT = '/var/cache/sonic/decode-syseeprom' | ||
CACHE_FILE = 'syseeprom_cache' | ||
|
||
|
||
class Tlv(eeprom_tlvinfo.TlvInfoDecoder): | ||
|
||
EEPROM_DECODE_HEADLINES = 6 | ||
|
||
def __init__(self): | ||
self._eeprom_path = "/sys/class/i2c-adapter/i2c-2/2-0050/eeprom" | ||
super(Tlv, self).__init__(self._eeprom_path, 0, '', True) | ||
self._eeprom = self._load_eeprom() | ||
|
||
def __parse_output(self, decode_output): | ||
decode_output.replace('\0', '') | ||
lines = decode_output.split('\n') | ||
lines = lines[self.EEPROM_DECODE_HEADLINES:] | ||
_eeprom_info_dict = dict() | ||
|
||
for line in lines: | ||
try: | ||
match = re.search( | ||
'(0x[0-9a-fA-F]{2})([\s]+[\S]+[\s]+)([\S]+)', line) | ||
if match is not None: | ||
idx = match.group(1) | ||
value = match.group(3).rstrip('\0') | ||
|
||
_eeprom_info_dict[idx] = value | ||
except: | ||
pass | ||
return _eeprom_info_dict | ||
|
||
def _load_eeprom(self): | ||
original_stdout = sys.stdout | ||
sys.stdout = StringIO() | ||
err = self.read_eeprom_db() | ||
if err: | ||
# Failed to read EEPROM information from database. Read from cache file | ||
pass | ||
else: | ||
decode_output = sys.stdout.getvalue() | ||
sys.stdout = original_stdout | ||
return self.__parse_output(decode_output) | ||
|
||
status = self.check_status() | ||
if status <> 'ok': | ||
return False | ||
|
||
if not os.path.exists(CACHE_ROOT): | ||
try: | ||
os.makedirs(CACHE_ROOT) | ||
except: | ||
pass | ||
|
||
# | ||
# only the eeprom classes that inherit from eeprom_base | ||
# support caching. Others will work normally | ||
# | ||
try: | ||
self.set_cache_name(os.path.join(CACHE_ROOT, CACHE_FILE)) | ||
except: | ||
pass | ||
|
||
e = self.read_eeprom() | ||
if e is None: | ||
return 0 | ||
|
||
try: | ||
self.update_cache(e) | ||
except: | ||
pass | ||
|
||
self.decode_eeprom(e) | ||
decode_output = sys.stdout.getvalue() | ||
sys.stdout = original_stdout | ||
|
||
(is_valid, valid_crc) = self.is_checksum_valid(e) | ||
if not is_valid: | ||
return False | ||
|
||
return self.__parse_output(decode_output) | ||
|
||
def get_eeprom(self): | ||
return self._eeprom | ||
|
||
def get_serial(self): | ||
return self._eeprom.get('0x23', "Undefined.") | ||
|
||
def get_mac(self): | ||
return self._eeprom.get('0x24', "Undefined.") |
Oops, something went wrong.