| 230 | } |
| 231 | |
| 232 | static void sff_8636_show_transceiver(const uint8_t *data, struct rte_tel_data *d) |
| 233 | { |
| 234 | static const char *name = "Transceiver type"; |
| 235 | char val_string[SFF_ITEM_VAL_COMPOSE_SIZE]; |
| 236 | |
| 237 | snprintf(val_string, sizeof(val_string), "0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x", |
| 238 | data[SFF_8636_ETHERNET_COMP_OFFSET], |
| 239 | data[SFF_8636_SONET_COMP_OFFSET], |
| 240 | data[SFF_8636_SAS_COMP_OFFSET], |
| 241 | data[SFF_8636_GIGE_COMP_OFFSET], |
| 242 | data[SFF_8636_FC_LEN_OFFSET], |
| 243 | data[SFF_8636_FC_TECH_OFFSET], |
| 244 | data[SFF_8636_FC_TRANS_MEDIA_OFFSET], |
| 245 | data[SFF_8636_FC_SPEED_OFFSET]); |
| 246 | ssf_add_dict_string(d, "Transceiver codes", val_string); |
| 247 | |
| 248 | /* 10G/40G Ethernet Compliance Codes */ |
| 249 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_10G_LRM) |
| 250 | ssf_add_dict_string(d, name, "10G Ethernet: 10G Base-LRM"); |
| 251 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_10G_LR) |
| 252 | ssf_add_dict_string(d, name, "10G Ethernet: 10G Base-LR"); |
| 253 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_10G_SR) |
| 254 | ssf_add_dict_string(d, name, "10G Ethernet: 10G Base-SR"); |
| 255 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_40G_CR4) |
| 256 | ssf_add_dict_string(d, name, "40G Ethernet: 40G Base-CR4"); |
| 257 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_40G_SR4) |
| 258 | ssf_add_dict_string(d, name, "40G Ethernet: 40G Base-SR4"); |
| 259 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_40G_LR4) |
| 260 | ssf_add_dict_string(d, name, "40G Ethernet: 40G Base-LR4"); |
| 261 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_40G_ACTIVE) |
| 262 | ssf_add_dict_string(d, name, "40G Ethernet: 40G Active Cable (XLPPI)"); |
| 263 | |
| 264 | /* Extended Specification Compliance Codes from SFF-8024 */ |
| 265 | if (data[SFF_8636_ETHERNET_COMP_OFFSET] & SFF_8636_ETHERNET_RSRVD) { |
| 266 | switch (data[SFF_8636_OPTION_1_OFFSET]) { |
| 267 | case SFF_8636_ETHERNET_UNSPECIFIED: |
| 268 | ssf_add_dict_string(d, name, "(reserved or unknown)"); |
| 269 | break; |
| 270 | case SFF_8636_ETHERNET_100G_AOC: |
| 271 | ssf_add_dict_string(d, name, |
| 272 | "100G Ethernet: 100G AOC or 25GAUI C2M AOC with worst BER of 5x10^(-5)"); |
| 273 | break; |
| 274 | case SFF_8636_ETHERNET_100G_SR4: |
| 275 | ssf_add_dict_string(d, name, |
| 276 | "100G Ethernet: 100G Base-SR4 or 25GBase-SR"); |
| 277 | break; |
| 278 | case SFF_8636_ETHERNET_100G_LR4: |
| 279 | ssf_add_dict_string(d, name, "100G Ethernet: 100G Base-LR4"); |
| 280 | break; |
| 281 | case SFF_8636_ETHERNET_100G_ER4: |
| 282 | ssf_add_dict_string(d, name, "100G Ethernet: 100G Base-ER4"); |
| 283 | break; |
| 284 | case SFF_8636_ETHERNET_100G_SR10: |
| 285 | ssf_add_dict_string(d, name, "100G Ethernet: 100G Base-SR10"); |
| 286 | break; |
| 287 | case SFF_8636_ETHERNET_100G_CWDM4_FEC: |
| 288 | ssf_add_dict_string(d, name, "100G Ethernet: 100G CWDM4 MSA with FEC"); |
| 289 | break; |
no test coverage detected