def native_write_pci_reg(self, bus, device, function, offset, value, size=4, domain=0): device_name = "{domain:04x}:{bus:02x}:{device:02x}.{function}".format( domain=domain, bus=bus, device=device, function=function) device_path = "/sys/bus/pci/devices/{}/config".format(device_name) if not os.path.exists(device_path): if offset < 256: from chipsec.helper.linux.legacy_pci import LEGACY_PCI pci = LEGACY_PCI() value = pci.write_pci_config(bus, device, function, offset, value) return False try: config = open(device_path, "wb") except IOError as err: raise OsHelperError("Unable to open {}".format(device_path), err.errno) config.seek(offset) config.write(defines.pack1(value, size)) config.close()
def native_write_pci_reg(self, bus, device, function, offset, value, size=4, domain=0): device_name = "{domain:04x}:{bus:02x}:{device:02x}.{function}".format( domain=domain, bus=bus, device=device, function=function) device_path = "/sys/bus/pci/devices/{}/config".format(device_name) try: config = open(device_path, "wb") except IOError as err: raise OsHelperError("Unable to open {}".format(device_path), err.errno) config.seek(offset) config.write(defines.pack1(value, size)) config.close()
def native_write_mmio_reg(self, phys_address, size, value): if self.devmem_available(): reg = defines.pack1(value, size) region = self.memory_mapping(phys_address, size) if not region: os.lseek(self.dev_mem, phys_address, os.SEEK_SET) written = os.write(self.dev_mem, reg) if written != size: logger().error("Unable to write all data to MMIO (wrote %d of %d)" % (written, size)) else: region.seek(phys_address - region.start) region.write(reg)
def native_write_mmio_reg(self, bar_base, bar_size, offset, size, value): if bar_size is None: bar_size = offset + size if self.devmem_available(): reg = defines.pack1(value, size) region = self.memory_mapping(bar_base, bar_size) if not region: self.native_map_io_space(bar_base, bar_size, 0) region = self.memory_mapping(bar_base, bar_size) if not region: logger().error("Unable to map region {:08x}".format(bar_base)) region.seek(bar_base + offset - region.start) written = region.write(reg) if written != size: logger().error("Unable to write all data to MMIO (wrote {:d} of {:d})".format(written, size))
def native_write_mmio_reg(self, bar_base, bar_size, offset, size, value): if bar_size is None: bar_size = offset + size if self.devmem_available(): reg = defines.pack1(value, size) region = self.memory_mapping(bar_base, bar_size) if not region: self.native_map_io_space(bar_base, bar_size) region = self.memory_mapping(bar_base, bar_size) if not region: logger().error("Unable to map region {:08x}".format(bar_base)) region.seek(bar_base + offset - region.start) region.write(reg) if written != size: logger().error("Unable to write all data to MMIO (wrote %d of %d)" % (written, size))
def native_write_mmio_reg(self, bar_base, bar_size, offset, size, value): if bar_size is None: bar_size = offset + size if self.devmem_available(): reg = defines.pack1(value, size) region = self.memory_mapping(bar_base, bar_size) if not region: self.native_map_io_space(bar_base, bar_size, 0) region = self.memory_mapping(bar_base, bar_size) if not region: logger().error("Unable to map region {:08x}".format(bar_base)) # Create memoryview into mmap'ed region in dword granularity region_mv = memoryview(region) region_dw = region_mv.cast('I') # Create memoryview containing data in dword data_mv = memoryview(reg) data_dw = data_mv.cast('I') # write one DWORD offset_in_region = (bar_base + offset - region.start) // 4 region_dw[offset_in_region] = data_dw[0]