MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sff_8636_show_dom

Function sff_8636_show_dom

dpdk/lib/ethdev/sff_8636.c:641–725  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

639}
640
641static void sff_8636_show_dom(const uint8_t *data, uint32_t eeprom_len, struct rte_tel_data *d)
642{
643 struct sff_diags sd = {0};
644 const char *rx_power_string = NULL;
645 char power_string[SFF_MAX_DESC_SIZE];
646 char val_string[SFF_ITEM_VAL_COMPOSE_SIZE];
647 int i;
648
649 /*
650 * There is no clear identifier to signify the existence of
651 * optical diagnostics similar to SFF-8472. So checking existence
652 * of page 3, will provide the guarantee for existence of alarms
653 * and thresholds
654 * If pagging support exists, then supports_alarms is marked as 1
655 */
656
657 if (eeprom_len == RTE_ETH_MODULE_SFF_8636_MAX_LEN) {
658 if (!(data[SFF_8636_STATUS_2_OFFSET] &
659 SFF_8636_STATUS_PAGE_3_PRESENT)) {
660 sd.supports_alarms = 1;
661 }
662 }
663
664 sd.rx_power_type = data[SFF_8636_DIAG_TYPE_OFFSET] &
665 SFF_8636_RX_PWR_TYPE_MASK;
666 sd.tx_power_type = data[SFF_8636_DIAG_TYPE_OFFSET] &
667 SFF_8636_RX_PWR_TYPE_MASK;
668
669 sff_8636_dom_parse(data, &sd);
670
671 SFF_SPRINT_TEMP(val_string, sd.sfp_temp[SFF_MCURR]);
672 ssf_add_dict_string(d, "Module temperature", val_string);
673
674 SFF_SPRINT_VCC(val_string, sd.sfp_voltage[SFF_MCURR]);
675 ssf_add_dict_string(d, "Module voltage", val_string);
676
677 /*
678 * SFF-8636/8436 spec is not clear whether RX power/ TX bias
679 * current fields are supported or not. A valid temperature
680 * reading is used as existence for TX/RX power.
681 */
682 if ((sd.sfp_temp[SFF_MCURR] == 0x0) ||
683 (sd.sfp_temp[SFF_MCURR] == (int16_t)0xFFFF))
684 return;
685
686 ssf_add_dict_string(d, "Alarm/warning flags implemented",
687 (sd.supports_alarms ? "Yes" : "No"));
688
689 for (i = 0; i < SFF_MAX_CHANNEL_NUM; i++) {
690 snprintf(power_string, SFF_MAX_DESC_SIZE, "%s (Channel %d)",
691 "Laser tx bias current", i+1);
692 SFF_SPRINT_BIAS(val_string, sd.scd[i].bias_cur);
693 ssf_add_dict_string(d, power_string, val_string);
694 }
695
696 for (i = 0; i < SFF_MAX_CHANNEL_NUM; i++) {
697 snprintf(power_string, SFF_MAX_DESC_SIZE, "%s (Channel %d)",
698 "Transmit avg optical power", i+1);

Callers 1

sff_8636_show_allFunction · 0.85

Calls 4

sff_8636_dom_parseFunction · 0.85
ssf_add_dict_stringFunction · 0.85
snprintfFunction · 0.85
sff_show_thresholdsFunction · 0.85

Tested by

no test coverage detected