From 0a77891f1cf0da4d96f03619e7a2e60c4a19318e Mon Sep 17 00:00:00 2001 From: Junjie Mao Date: Sat, 16 Apr 2022 00:16:03 +0800 Subject: [PATCH] board_inspector: maintain a mapping from cap names to cap struct In order to ease the access of certain capability structure of a PCI config space, this patch changes the class PCIConfigSpace to maintain a _caps_as_dict dictionary that maps capability names (as specified in the caps.py and extcaps.py) to the actual capability structures. Tracked-On: #7301 Signed-off-by: Junjie Mao --- .../board_inspector/pcieparser/__init__.py | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/misc/config_tools/board_inspector/pcieparser/__init__.py b/misc/config_tools/board_inspector/pcieparser/__init__.py index f0bf8f2f4..f9d2414a3 100644 --- a/misc/config_tools/board_inspector/pcieparser/__init__.py +++ b/misc/config_tools/board_inspector/pcieparser/__init__.py @@ -22,14 +22,20 @@ class PCIConfigSpace(namedtuple("PCIConfigSpace", ["header", "caps", "extcaps"]) acc += str(extcap) return acc + def caps_as_dict(self): + if not hasattr(self, "_caps_as_dict"): + self._caps_as_dict = dict() + for cap in self.caps: + self._caps_as_dict[cap.name] = cap + for cap in self.extcaps: + self._caps_as_dict[cap.name] = cap + return self._caps_as_dict + def has_cap(self, cap_name): - for cap in self.caps: - if cap_name == cap.name: - return True - for cap in self.extcaps: - if cap_name == cap.name: - return True - return False + return cap_name in self.caps_as_dict().keys() + + def get_cap(self, cap_name): + return self.caps_as_dict().get(cap_name) def parse_config_space(path): try: