Exemplo n.º 1
0
 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()
Exemplo n.º 2
0
 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()
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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))
Exemplo n.º 7
0
 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))
Exemplo n.º 8
0
    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]