mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 13:11:31 +00:00
dm: pci: Add a function to find the regions for a PCI bus
This function looks up the controller and returns a pointer to each region type. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Stephen Warren <swarren@nvidia.com> Tested-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
parent
9f60fb0db4
commit
f9260336d0
2 changed files with 42 additions and 0 deletions
|
@ -974,6 +974,36 @@ ulong pci_conv_size_to_32(ulong old, ulong value, uint offset,
|
|||
return value;
|
||||
}
|
||||
|
||||
int pci_get_regions(struct udevice *dev, struct pci_region **iop,
|
||||
struct pci_region **memp, struct pci_region **prefp)
|
||||
{
|
||||
struct udevice *bus = pci_get_controller(dev);
|
||||
struct pci_controller *hose = dev_get_uclass_priv(bus);
|
||||
int i;
|
||||
|
||||
*iop = NULL;
|
||||
*memp = NULL;
|
||||
*prefp = NULL;
|
||||
for (i = 0; i < hose->region_count; i++) {
|
||||
switch (hose->regions[i].flags) {
|
||||
case PCI_REGION_IO:
|
||||
if (!*iop || (*iop)->size < hose->regions[i].size)
|
||||
*iop = hose->regions + i;
|
||||
break;
|
||||
case PCI_REGION_MEM:
|
||||
if (!*memp || (*memp)->size < hose->regions[i].size)
|
||||
*memp = hose->regions + i;
|
||||
break;
|
||||
case (PCI_REGION_MEM | PCI_REGION_PREFETCH):
|
||||
if (!*prefp || (*prefp)->size < hose->regions[i].size)
|
||||
*prefp = hose->regions + i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return (*iop != NULL) + (*memp != NULL) + (*prefp != NULL);
|
||||
}
|
||||
|
||||
UCLASS_DRIVER(pci) = {
|
||||
.id = UCLASS_PCI,
|
||||
.name = "pci",
|
||||
|
|
|
@ -1130,6 +1130,18 @@ ulong pci_conv_size_to_32(ulong old, ulong value, uint offset,
|
|||
*/
|
||||
struct udevice *pci_get_controller(struct udevice *dev);
|
||||
|
||||
/**
|
||||
* pci_get_regions() - obtain pointers to all the region types
|
||||
*
|
||||
* @dev: Device to check
|
||||
* @iop: Returns a pointer to the I/O region, or NULL if none
|
||||
* @memp: Returns a pointer to the memory region, or NULL if none
|
||||
* @prefp: Returns a pointer to the pre-fetch region, or NULL if none
|
||||
* @return the number of non-NULL regions returned, normally 3
|
||||
*/
|
||||
int pci_get_regions(struct udevice *dev, struct pci_region **iop,
|
||||
struct pci_region **memp, struct pci_region **prefp);
|
||||
|
||||
/**
|
||||
* struct dm_pci_emul_ops - PCI device emulator operations
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue