• Philipp Stanner's avatar
    PCI: Add managed partial-BAR request and map infrastructure · bbaff68b
    Philipp Stanner authored
    The pcim_iomap_devres table tracks entire-BAR mappings, so we can't use it
    to build a managed version of pci_iomap_range(), which maps partial BARs.
    
    Add struct pcim_addr_devres, which can track request and mapping of both
    entire BARs and partial BARs.
    
    Add the following internal devres functions based on struct
    pcim_addr_devres:
    
      pcim_iomap_region()               # request & map entire BAR
      pcim_iounmap_region()             # unmap & release entire BAR
      pcim_request_region()             # request entire BAR
      pcim_release_region()             # release entire BAR
      pcim_request_all_regions()        # request all entire BARs
      pcim_release_all_regions()        # release all entire BARs
    
    Rework the following public interfaces using the new infrastructure
    listed above:
    
      pcim_iomap()                      # map partial BAR
      pcim_iounmap()                    # unmap partial BAR
      pcim_iomap_regions()              # request & map specified BARs
      pcim_iomap_regions_request_all()  # request all BARs, map specified BARs
      pcim_iounmap_regions()            # unmap & release specified BARs
    
    Link: https://lore.kernel.org/r/20240613115032.29098-4-pstanner@redhat.comSigned-off-by: default avatarPhilipp Stanner <pstanner@redhat.com>
    Signed-off-by: default avatarKrzysztof Wilczyński <kwilczynski@kernel.org>
    [bhelgaas: commit log]
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    bbaff68b
devres.c 24.1 KB