Files
chipsec-chipsec/chipsec/library/device.py
William Leara 79f81bbb7e fix for flake8 rules related to whitespace
This commit fixes whitespace errors from checkers W291,W292,W293,W391.  They were found by running "flake8 ." from the root directory.  These are errors defined by "pycodestyle", and have no functional impact to the source.  This is simply fixing whitespace as defined by CHIPSEC's .flake8 configuration.

background:
https://www.flake8rules.com/rules/W291.html
https://www.flake8rules.com/rules/W292.html
https://www.flake8rules.com/rules/W293.html
https://www.flake8rules.com/rules/W391.html

tool versions: flake8 v7.3.0, python v3.13.11

Signed-off-by: William Leara <william.leara@dell.com>
2026-03-10 14:20:23 -07:00

143 lines
4.5 KiB
Python

# CHIPSEC: Platform Security Assessment Framework
# Copyright (c) 2024, Intel Corporation
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; Version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Contact information:
# chipsec@intel.com
#
"""
Device interface module.
This module provides functionality to access and manage device configurations
in the CHIPSEC framework, including PCI devices and I/O spaces.
"""
from typing import Any, List, Optional, Tuple
from chipsec.cfg.parsers.ip.pci_device import PCIConfig
from chipsec.library.register import ObjList
class Device:
"""
Device interface for platform device definitions.
Provides methods to access and query device configurations,
particularly PCI devices and I/O space configurations.
"""
def __init__(self, cs: Any) -> None:
"""
Initialize the Device interface.
Args:
cs: Chipset interface object
"""
self.cs = cs
def get_instance_by_name(self, device_name: str,
instance: Any) -> Optional[PCIConfig]:
"""
Get a specific device instance by name and instance identifier.
Args:
device_name: Name of the device
instance: Instance identifier to retrieve
Returns:
Device instance if found, None otherwise
"""
devlist = self.get_list_by_name(device_name)
for dev in devlist:
if instance in dev.instances:
return dev.instances[instance]
return None
def get_list_by_name(self, device_name: str) -> List[Any]:
"""
Get list of enabled device objects by name.
Args:
device_name: Name of the device to retrieve objects for
Returns:
List of enabled device objects matching the name
"""
objList = self._get_defined_list(device_name)
return objList.filter_enabled()
def _get_defined_list(self, device_name: str) -> List[Any]:
"""
Get list of all defined device objects by name.
Args:
device_name: Name of the device to retrieve objects for
Returns:
List of all defined device objects matching the name
"""
devices = self.cs.Cfg.get_objlist(device_name)
objlist = ObjList()
[objlist.extend(ip.obj) for ip in devices]
return objlist
def is_defined(self, device_name: str) -> bool:
"""
Check if a device is defined in the configuration.
Args:
device_name: Name of the device to check
Returns:
True if device is defined, False otherwise
"""
return len(self._get_defined_list(device_name)) > 0
def get_bus(self, device_name: str) -> List[int]:
"""
Retrieve bus value(s) from PCI device instances.
Args:
device_name: Name of the PCI device
Returns:
List of bus numbers for all instances of the device
"""
dev_list = self.get_list_by_name(device_name)
buses = []
for dev in dev_list:
for instance_key in dev.instances.keys():
buses.append(dev.instances[instance_key].bus)
return buses
def get_IO_space(self, io_name: str) -> Tuple[Optional[str],
Optional[str]]:
"""
Retrieve BAR values for given I/O range.
Args:
io_name: Name of the I/O space
Returns:
Tuple of (register_name, base_field_name) if found,
(None, None) otherwise
"""
if io_name in self.cs.Cfg.IO_BARS:
reg = self.cs.Cfg.IO_BARS[io_name].get('register')
bf = self.cs.Cfg.IO_BARS[io_name].get('base_field')
return (reg, bf)
else:
return (None, None)