Lines Matching full:bar
55 /* A requested region spanning an entire BAR. */
59 * A requested region spanning an entire BAR, and a mapping for
60 * the entire BAR.
65 * A mapping within a BAR, either spanning the whole BAR or just a
81 int bar; member
87 res->bar = -1; in pcim_addr_devres_clear()
101 * @bar: BAR the range is within
102 * @offset: offset from the BAR's start address
109 * Request a range within a device's PCI BAR. Sanity check the input.
111 static int __pcim_request_region_range(struct pci_dev *pdev, int bar, in __pcim_request_region_range() argument
116 resource_size_t start = pci_resource_start(pdev, bar); in __pcim_request_region_range()
117 resource_size_t len = pci_resource_len(pdev, bar); in __pcim_request_region_range()
118 unsigned long dev_flags = pci_resource_flags(pdev, bar); in __pcim_request_region_range()
120 if (start == 0 || len == 0) /* Unused BAR. */ in __pcim_request_region_range()
145 static void __pcim_release_region_range(struct pci_dev *pdev, int bar, in __pcim_release_region_range() argument
149 resource_size_t start = pci_resource_start(pdev, bar); in __pcim_release_region_range()
150 resource_size_t len = pci_resource_len(pdev, bar); in __pcim_release_region_range()
151 unsigned long flags = pci_resource_flags(pdev, bar); in __pcim_release_region_range()
156 if (len == 0 || maxlen == 0) /* This an unused BAR. Do nothing. */ in __pcim_release_region_range()
171 static int __pcim_request_region(struct pci_dev *pdev, int bar, in __pcim_request_region() argument
175 unsigned long len = pci_resource_len(pdev, bar); in __pcim_request_region()
177 return __pcim_request_region_range(pdev, bar, offset, len, name, flags); in __pcim_request_region()
180 static void __pcim_release_region(struct pci_dev *pdev, int bar) in __pcim_release_region() argument
183 unsigned long len = pci_resource_len(pdev, bar); in __pcim_release_region()
185 __pcim_release_region_range(pdev, bar, offset, len); in __pcim_release_region()
195 __pcim_release_region(pdev, res->bar); in pcim_addr_resource_release()
199 __pcim_release_region(pdev, res->bar); in pcim_addr_resource_release()
243 return a->bar == b->bar; in pcim_addr_resources_match()
409 static inline bool mask_contains_bar(int mask, int bar) in mask_contains_bar() argument
411 return mask & BIT(bar); in mask_contains_bar()
552 * void __iomem \*mappy = pcim_iomap(pdev, bar, length);
573 * still get a BAR's mapping address through pcim_iomap_table().
576 void __iomem *mapping, int bar) in pcim_add_mapping_to_legacy_table() argument
580 if (!pci_bar_index_is_valid(bar)) in pcim_add_mapping_to_legacy_table()
588 WARN_ON(legacy_iomap_table[bar]); in pcim_add_mapping_to_legacy_table()
590 legacy_iomap_table[bar] = mapping; in pcim_add_mapping_to_legacy_table()
596 * Remove a mapping. The table only contains whole-BAR mappings, so this will
602 int bar; in pcim_remove_mapping_from_legacy_table() local
609 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) { in pcim_remove_mapping_from_legacy_table()
610 if (legacy_iomap_table[bar] == addr) { in pcim_remove_mapping_from_legacy_table()
611 legacy_iomap_table[bar] = NULL; in pcim_remove_mapping_from_legacy_table()
619 * mapping by its BAR index.
621 static void pcim_remove_bar_from_legacy_table(struct pci_dev *pdev, int bar) in pcim_remove_bar_from_legacy_table() argument
625 if (!pci_bar_index_is_valid(bar)) in pcim_remove_bar_from_legacy_table()
632 legacy_iomap_table[bar] = NULL; in pcim_remove_bar_from_legacy_table()
638 * @bar: BAR to iomap
646 * This SHOULD only be used once per BAR.
653 void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen) in pcim_iomap() argument
658 if (!pci_bar_index_is_valid(bar)) in pcim_iomap()
666 mapping = pci_iomap(pdev, bar, maxlen); in pcim_iomap()
671 if (pcim_add_mapping_to_legacy_table(pdev, mapping, bar) != 0) in pcim_iomap()
712 * pcim_iomap_region - Request and iomap a PCI BAR
714 * @bar: Index of a BAR to map
722 void __iomem *pcim_iomap_region(struct pci_dev *pdev, int bar, in pcim_iomap_region() argument
728 if (!pci_bar_index_is_valid(bar)) in pcim_iomap_region()
736 res->bar = bar; in pcim_iomap_region()
738 ret = __pcim_request_region(pdev, bar, name, 0); in pcim_iomap_region()
742 res->baseaddr = pci_iomap(pdev, bar, 0); in pcim_iomap_region()
752 __pcim_release_region(pdev, bar); in pcim_iomap_region()
761 * pcim_iounmap_region - Unmap and release a PCI BAR
763 * @bar: Index of BAR to unmap and release
765 * Unmap a BAR and release its region manually. Only pass BARs that were
768 void pcim_iounmap_region(struct pci_dev *pdev, int bar) in pcim_iounmap_region() argument
774 res_searched.bar = bar; in pcim_iounmap_region()
797 int bar; in pcim_iomap_regions() local
800 for (bar = 0; bar < DEVICE_COUNT_RESOURCE; bar++) { in pcim_iomap_regions()
801 if (!mask_contains_bar(mask, bar)) in pcim_iomap_regions()
804 mapping = pcim_iomap_region(pdev, bar, name); in pcim_iomap_regions()
809 ret = pcim_add_mapping_to_legacy_table(pdev, mapping, bar); in pcim_iomap_regions()
817 while (--bar >= 0) { in pcim_iomap_regions()
818 pcim_iounmap_region(pdev, bar); in pcim_iomap_regions()
819 pcim_remove_bar_from_legacy_table(pdev, bar); in pcim_iomap_regions()
826 static int _pcim_request_region(struct pci_dev *pdev, int bar, const char *name, in _pcim_request_region() argument
832 if (!pci_bar_index_is_valid(bar)) in _pcim_request_region()
839 res->bar = bar; in _pcim_request_region()
841 ret = __pcim_request_region(pdev, bar, name, request_flags); in _pcim_request_region()
852 * pcim_request_region - Request a PCI BAR
854 * @bar: Index of BAR to request
859 * Request region specified by @bar.
864 int pcim_request_region(struct pci_dev *pdev, int bar, const char *name) in pcim_request_region() argument
866 return _pcim_request_region(pdev, bar, name, 0); in pcim_request_region()
871 * pcim_request_region_exclusive - Request a PCI BAR exclusively
873 * @bar: Index of BAR to request
878 * Request region specified by @bar exclusively.
883 int pcim_request_region_exclusive(struct pci_dev *pdev, int bar, const char *name) in pcim_request_region_exclusive() argument
885 return _pcim_request_region(pdev, bar, name, IORESOURCE_EXCLUSIVE); in pcim_request_region_exclusive()
889 * pcim_release_region - Release a PCI BAR
891 * @bar: Index of BAR to release
896 void pcim_release_region(struct pci_dev *pdev, int bar) in pcim_release_region() argument
902 res_searched.bar = bar; in pcim_release_region()
921 int bar; in pcim_release_all_regions() local
923 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) in pcim_release_all_regions()
924 pcim_release_region(pdev, bar); in pcim_release_all_regions()
941 int bar; in pcim_request_all_regions() local
943 for (bar = 0; bar < PCI_STD_NUM_BARS; bar++) { in pcim_request_all_regions()
944 ret = pcim_request_region(pdev, bar, name); in pcim_request_all_regions()
983 * pcim_iomap_range - Create a ranged __iomap mapping within a PCI BAR
985 * @bar: Index of the BAR
986 * @offset: Offset from the begin of the BAR
991 * Creates a new IO-Mapping within the specified @bar, ranging from @offset to
997 void __iomem *pcim_iomap_range(struct pci_dev *pdev, int bar, in pcim_iomap_range() argument
1003 if (!pci_bar_index_is_valid(bar)) in pcim_iomap_range()
1010 mapping = pci_iomap_range(pdev, bar, offset, len); in pcim_iomap_range()