147 lines
4.2 KiB
Python
147 lines
4.2 KiB
Python
"""
|
||
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 1–4).
|
||
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 1–4")
|
||
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,
|
||
}
|