Skip to content

Commit fb0622d

Browse files
committed
[Accton][as5835-54x][as5835-54t] Add presence check for tx_disable
Signed-off-by: Eric Yang <eric_yang@accton.com>
1 parent fcceec1 commit fb0622d

2 files changed

Lines changed: 41 additions & 39 deletions

File tree

  • packages/platforms/accton/x86-64
    • as5835-54t/onlp/builds/x86_64_accton_as5835_54t/module/src
    • as5835-54x/onlp/builds/x86_64_accton_as5835_54x/module/src

packages/platforms/accton/x86-64/as5835-54t/onlp/builds/x86_64_accton_as5835_54t/module/src/sfpi.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,13 @@ onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value)
231231
int rv;
232232
int present = 0;
233233

234+
VALIDATE_QSFP(port);
235+
234236
switch(control)
235237
{
236238
case ONLP_SFP_CONTROL_TX_DISABLE:
237239
case ONLP_SFP_CONTROL_TX_DISABLE_CHANNEL:
238240
{
239-
VALIDATE_QSFP(port);
240241
present = onlp_sfpi_is_present(port);
241242
if(present == 1)
242243
{
@@ -255,7 +256,6 @@ onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value)
255256

256257
case ONLP_SFP_CONTROL_RESET:
257258
{
258-
VALIDATE_QSFP(port);
259259
if (onlp_file_write_int(value, MODULE_RESET_FORMAT, (port+1)) < 0) {
260260
AIM_LOG_ERROR("Unable to write reset status to port(%d)\r\n", port);
261261
rv = ONLP_STATUS_E_INTERNAL;
@@ -268,7 +268,6 @@ onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value)
268268

269269
case ONLP_SFP_CONTROL_LP_MODE:
270270
{
271-
VALIDATE_QSFP(port);
272271
if (onlp_file_write_int(value, MODULE_LPMODE_FORMAT, (port+1)) < 0) {
273272
AIM_LOG_ERROR("Unable to write lpmode status to port(%d)\r\n", port);
274273
rv = ONLP_STATUS_E_INTERNAL;
@@ -294,12 +293,13 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
294293
int tx_dis_val = 0;
295294
int present = 0;
296295

296+
VALIDATE_QSFP(port);
297+
297298
switch(control)
298299
{
299300
case ONLP_SFP_CONTROL_TX_DISABLE:
300301
case ONLP_SFP_CONTROL_TX_DISABLE_CHANNEL:
301302
{
302-
VALIDATE_QSFP(port);
303303
present = onlp_sfpi_is_present(port);
304304
if(present == 1){
305305
/* txdis valid bit(bit0-bit3), xxxx 1111 */
@@ -316,7 +316,6 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
316316

317317
case ONLP_SFP_CONTROL_RESET:
318318
{
319-
VALIDATE_QSFP(port);
320319
if (onlp_file_read_int(value, MODULE_RESET_FORMAT, (port+1)) < 0) {
321320
AIM_LOG_ERROR("Unable to read reset status from port(%d)\r\n", port);
322321
rv = ONLP_STATUS_E_INTERNAL;
@@ -329,7 +328,6 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
329328

330329
case ONLP_SFP_CONTROL_LP_MODE:
331330
{
332-
VALIDATE_QSFP(port);
333331
if (onlp_file_read_int(value, MODULE_LPMODE_FORMAT, (port+1)) < 0) {
334332
AIM_LOG_ERROR("Unable to read lpmode status from port(%d)\r\n", port);
335333
rv = ONLP_STATUS_E_INTERNAL;

packages/platforms/accton/x86-64/as5835-54x/onlp/builds/x86_64_accton_as5835_54x/module/src/sfpi.c

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ int sfp_map[] = {
4242
#define SFP_PORT_MAX 47
4343
#define QSFP_PORT_MIN 48
4444
#define QSFP_PORT_MAX 53
45+
#define MIN_PORT SFP_PORT_MIN
46+
#define MAX_PORT QSFP_PORT_MAX
47+
4548
#define VALIDATE_SFP(_port) \
4649
do { \
4750
if (_port < SFP_PORT_MIN || _port > SFP_PORT_MAX) \
@@ -54,6 +57,12 @@ int sfp_map[] = {
5457
return ONLP_STATUS_E_UNSUPPORTED; \
5558
} while(0)
5659

60+
#define VALIDATE_PORT(_port) \
61+
do { \
62+
if (_port < MIN_PORT || _port > MAX_PORT ) \
63+
return ONLP_STATUS_E_UNSUPPORTED; \
64+
} while(0)
65+
5766
#define PORT_BUS_INDEX(port) (sfp_map[port])
5867

5968
#define PORT_EEPROM_FORMAT "/sys/bus/i2c/devices/%d-0050/eeprom"
@@ -348,38 +357,34 @@ onlp_sfpi_control_set(int port, onlp_sfp_control_t control, int value)
348357
int addr = (port < 38) ? 61 : 62;
349358
int present = 0;
350359

360+
VALIDATE_PORT(port);
361+
351362
switch(control)
352363
{
353364
case ONLP_SFP_CONTROL_TX_DISABLE:
354365
case ONLP_SFP_CONTROL_TX_DISABLE_CHANNEL:
355366
{
356-
if (port >= SFP_PORT_MIN && port <= SFP_PORT_MAX) { //SFP
357-
if (onlp_file_write_int(value, MODULE_TXDISABLE_FORMAT, 3, addr, (port+1)) < 0) {
358-
AIM_LOG_ERROR("Unable to set tx_disable status to port(%d)\r\n", port);
359-
rv = ONLP_STATUS_E_INTERNAL;
360-
}
361-
else {
362-
rv = ONLP_STATUS_OK;
367+
present = onlp_sfpi_is_present(port);
368+
if(present == 1) {
369+
if (port >= SFP_PORT_MIN && port <= SFP_PORT_MAX) { //SFP
370+
if (onlp_file_write_int(value, MODULE_TXDISABLE_FORMAT, 3, addr, (port+1)) < 0) {
371+
AIM_LOG_ERROR("Unable to set tx_disable status to port(%d)\r\n", port);
372+
rv = ONLP_STATUS_E_INTERNAL;
373+
}
374+
else {
375+
rv = ONLP_STATUS_OK;
376+
}
363377
}
364-
}
365-
else if(port >= QSFP_PORT_MIN && port <= QSFP_PORT_MAX){ //QSFP
366-
present = onlp_sfpi_is_present(port);
367-
368-
if(present == 1)
369-
{
378+
else if(port >= QSFP_PORT_MIN && port <= QSFP_PORT_MAX){ //QSFP
370379
/* txdis valid bit(bit0-bit3), xxxx 1111 */
371380
value = value & 0xf;
372381
onlp_sfpi_dev_writeb(port, PORT_EEPROM_DEVADDR, QSFP_EEPROM_OFFSET_TXDIS, value);
373382

374383
rv = ONLP_STATUS_OK;
375384
}
376-
else
377-
{
378-
rv = ONLP_STATUS_E_INTERNAL;
379-
}
380385
}
381386
else {
382-
rv = ONLP_STATUS_E_UNSUPPORTED;
387+
rv = ONLP_STATUS_E_INTERNAL;
383388
}
384389
break;
385390
}
@@ -426,6 +431,8 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
426431
int tx_dis_val = 0;
427432
int present = 0;
428433

434+
VALIDATE_PORT(port);
435+
429436
switch(control)
430437
{
431438
case ONLP_SFP_CONTROL_RX_LOS:
@@ -457,30 +464,27 @@ onlp_sfpi_control_get(int port, onlp_sfp_control_t control, int* value)
457464
case ONLP_SFP_CONTROL_TX_DISABLE:
458465
case ONLP_SFP_CONTROL_TX_DISABLE_CHANNEL:
459466
{
460-
if (port >= SFP_PORT_MIN && port <= SFP_PORT_MAX) { //SFP
461-
if (onlp_file_read_int(value, MODULE_TXDISABLE_FORMAT, 3, addr, (port+1)) < 0) {
462-
AIM_LOG_ERROR("Unable to read tx_disabled status from port(%d)\r\n", port);
463-
rv = ONLP_STATUS_E_INTERNAL;
467+
present = onlp_sfpi_is_present(port);
468+
if(present == 1){
469+
if (port >= SFP_PORT_MIN && port <= SFP_PORT_MAX) { //SFP
470+
if (onlp_file_read_int(value, MODULE_TXDISABLE_FORMAT, 3, addr, (port+1)) < 0) {
471+
AIM_LOG_ERROR("Unable to read tx_disabled status from port(%d)\r\n", port);
472+
rv = ONLP_STATUS_E_INTERNAL;
473+
}
474+
else {
475+
rv = ONLP_STATUS_OK;
476+
}
464477
}
465-
else {
466-
rv = ONLP_STATUS_OK;
467-
}
468-
}
469-
else if(port >= QSFP_PORT_MIN && port <= QSFP_PORT_MAX){ //QSFP
470-
present = onlp_sfpi_is_present(port);
471-
if(present == 1){
478+
else if(port >= QSFP_PORT_MIN && port <= QSFP_PORT_MAX){ //QSFP
472479
/* txdis valid bit(bit0-bit3), xxxx 1111 */
473480
tx_dis_val = onlp_sfpi_dev_readb(port, PORT_EEPROM_DEVADDR, QSFP_EEPROM_OFFSET_TXDIS);
474481
*value = tx_dis_val;
475482

476483
rv = ONLP_STATUS_OK;
477484
}
478-
else{
479-
rv = ONLP_STATUS_E_INTERNAL;
480-
}
481485
}
482486
else {
483-
rv = ONLP_STATUS_E_UNSUPPORTED;
487+
rv = ONLP_STATUS_E_INTERNAL;
484488
}
485489
break;
486490
}

0 commit comments

Comments
 (0)