Skip to content

Commit 7791950

Browse files
brandonchuanglguohan
authored andcommitted
[Accton AS7326]: Add lpmode in sfputil.py (#2905)
Signed-off-by: brandon_chuang <[email protected]>
1 parent aac0c24 commit 7791950

File tree

1 file changed

+58
-4
lines changed
  • device/accton/x86_64-accton_as7326_56x-r0/plugins

1 file changed

+58
-4
lines changed

device/accton/x86_64-accton_as7326_56x-r0/plugins/sfputil.py

+58-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
try:
77
import time
8+
import string
9+
from ctypes import create_string_buffer
810
from sonic_sfp.sfputilbase import SfpUtilBase
911
except ImportError as e:
1012
raise ImportError("%s - required module not found" % str(e))
@@ -193,11 +195,63 @@ def get_presence(self, port_num):
193195

194196
return False
195197

196-
def get_low_power_mode(self, port_num):
197-
raise NotImplementedError
198+
def get_low_power_mode(self, port_num):
199+
# Check for invalid port_num
200+
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
201+
return False
198202

199-
def set_low_power_mode(self, port_num, lpmode):
200-
raise NotImplementedError
203+
try:
204+
eeprom = None
205+
206+
if not self.get_presence(port_num):
207+
return False
208+
209+
eeprom = open(self.port_to_eeprom_mapping[port_num], "rb")
210+
eeprom.seek(93)
211+
lpmode = ord(eeprom.read(1))
212+
213+
if ((lpmode & 0x3) == 0x1):
214+
return False # High Power Mode if "Power override" bit is 1 and "Power set" bit is 0
215+
else:
216+
return True # Low Power Mode if one of the following conditions is matched:
217+
# 1. Power override" bit is 0
218+
# 2. Power override" bit is 1 and "Power set" bit is 1
219+
except IOError as e:
220+
print "Error: unable to open file: %s" % str(e)
221+
return False
222+
finally:
223+
if eeprom is not None:
224+
eeprom.close()
225+
time.sleep(0.01)
226+
227+
def set_low_power_mode(self, port_num, lpmode):
228+
# Check for invalid port_num
229+
if port_num < self.qsfp_port_start or port_num > self.qsfp_port_end:
230+
return False
231+
232+
try:
233+
eeprom = None
234+
235+
if not self.get_presence(port_num):
236+
return False # Port is not present, unable to set the eeprom
237+
238+
# Fill in write buffer
239+
regval = 0x3 if lpmode else 0x1 # 0x3:Low Power Mode, 0x1:High Power Mode
240+
buffer = create_string_buffer(1)
241+
buffer[0] = chr(regval)
242+
243+
# Write to eeprom
244+
eeprom = open(self.port_to_eeprom_mapping[port_num], "r+b")
245+
eeprom.seek(93)
246+
eeprom.write(buffer[0])
247+
return True
248+
except IOError as e:
249+
print "Error: unable to open file: %s" % str(e)
250+
return False
251+
finally:
252+
if eeprom is not None:
253+
eeprom.close()
254+
time.sleep(0.01)
201255

202256
def reset(self, port_num):
203257
raise NotImplementedError

0 commit comments

Comments
 (0)