UmberHubManager/fiwi/adnacom_pcie_catalog.py

147 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Known Adnacom Monitor H3 / PEX8718 boards (PCI BDF, board serial, SFP serials per lane).
Populated from operator screenshots; used during panel calibrate so PCIe metadata can be
chosen with number keys (no copy/paste).
"""
from typing import Any, Dict, List
# SFP order is monitor "SFP 1" … "SFP 4" (adapter_port 14).
ADNACOM_KNOWN_CARDS: List[Dict[str, Any]] = [
{
"bus_address": "0000:01:00.0",
"board_label": "H3",
"board_serial": "4C-0A-3D-B2-13-13",
"switch_chip": "PEX8718",
"slot_port": 0,
"link_capability": "Gen3 x4",
"link_state": "Gen3 x4",
"sfp_serials": [
"6C82510221225",
"6C82510221222",
"6C82510221223",
"6C82510221224",
],
},
{
"bus_address": "0000:07:00.0",
"board_label": "H3",
"board_serial": "4C-0A-3D-B2-13-19",
"switch_chip": "PEX8718",
"slot_port": 0,
"link_capability": "Gen3 x4",
"link_state": "Gen3 x4",
"sfp_serials": [
"6C82510221226",
"6C82601120819",
"6C82512030665",
"6C82601120820",
],
},
{
"bus_address": "0000:21:00.0",
"board_label": "H3",
"board_serial": "4C-0A-3D-02-13-15",
"switch_chip": "PEX8718",
"slot_port": 0,
"link_capability": "Gen3 x4",
"link_state": "Gen3 x4",
"sfp_serials": [
"6C82601120813",
"6C82601120811",
"6C82601120814",
"6C82601120816",
],
},
{
"bus_address": "0000:c1:00.0",
"board_label": "H3",
"board_serial": "4C-0A-3D-5B-13-03",
"switch_chip": "PEX8718",
"slot_port": 0,
"link_capability": "Gen3 x4",
"link_state": "Gen3 x4",
"sfp_serials": [
"6C82510221389",
"6C82510221388",
"6C82510221387",
"6C82510221386",
],
},
{
"bus_address": "0000:c7:00.0",
"board_label": "H3",
"board_serial": "4C-0A-3D-02-13-1A",
"switch_chip": "PEX8718",
"slot_port": 0,
"link_capability": "Gen3 x4",
"link_state": "Gen3 x4",
"sfp_serials": [
"6C82601120815",
"6C82601120818",
"6C82512030663",
"6C82601120817",
],
},
{
"bus_address": "0000:e2:00.0",
"board_label": "H3",
"board_serial": "4C-0A-3D-02-13-17",
"switch_chip": "PEX8718",
"slot_port": 0,
"link_capability": "Gen3 x4",
"link_state": "Gen3 x4",
"sfp_serials": [
"6C82510221229",
"6C82510221230",
"6C82510221228",
"6C82510221227",
],
},
]
def short_bdf(bus_address: str) -> str:
s = (bus_address or "").strip()
if s.startswith("0000:"):
return s[5:]
return s
def board_serial_tail(board_serial: str) -> str:
s = (board_serial or "").strip()
if len(s) <= 10:
return s
return s[-10:]
def print_catalog_menu() -> None:
print(" Known Adnacom H3 / PEX8718 cards (match the dropdown in Adnacom Monitor):", flush=True)
for i, c in enumerate(ADNACOM_KNOWN_CARDS, start=1):
bdf = short_bdf(c["bus_address"])
tail = board_serial_tail(c["board_serial"])
print(
f" {i}) {bdf:>8} {c['board_label']} board SN …{tail}",
flush=True,
)
print(" m) Type PCIe fields manually (long-form prompts)", flush=True)
def pcie_from_card_and_lane(card: Dict[str, Any], sfp_lane_1_4: int) -> Dict[str, Any]:
if sfp_lane_1_4 < 1 or sfp_lane_1_4 > 4:
raise ValueError("sfp_lane_1_4 must be 14")
serials = card["sfp_serials"]
serial = serials[sfp_lane_1_4 - 1]
return {
"bus_address": card["bus_address"],
"board_label": card["board_label"],
"board_serial": card["board_serial"],
"switch_chip": card["switch_chip"],
"slot_port": int(card["slot_port"]),
"link_capability": card["link_capability"],
"link_state": card["link_state"],
"adapter_port": sfp_lane_1_4,
"sfp_serial": serial,
}