xref: /openbmc/u-boot/drivers/pci/pci_internal.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
25e23b8b4SSimon Glass /*
35e23b8b4SSimon Glass  * Internal PCI functions, not exported outside drivers/pci
45e23b8b4SSimon Glass  *
55e23b8b4SSimon Glass  * Copyright (c) 2015 Google, Inc
65e23b8b4SSimon Glass  * Written by Simon Glass <sjg@chromium.org>
75e23b8b4SSimon Glass  */
85e23b8b4SSimon Glass 
95e23b8b4SSimon Glass #ifndef __pci_internal_h
105e23b8b4SSimon Glass #define __pci_internal_h
115e23b8b4SSimon Glass 
125e23b8b4SSimon Glass /**
135e23b8b4SSimon Glass  * dm_pciauto_prescan_setup_bridge() - Set up a bridge for scanning
145e23b8b4SSimon Glass  *
155e23b8b4SSimon Glass  * This gets a bridge ready so that its downstream devices can be scanned.
165e23b8b4SSimon Glass  * It sets up the bus number and memory range registers. Once the scan is
175e23b8b4SSimon Glass  * completed, dm_pciauto_postscan_setup_bridge() should be called.
185e23b8b4SSimon Glass  *
195e23b8b4SSimon Glass  * @dev:	Bridge device to be scanned
205e23b8b4SSimon Glass  * @sub_bus:	Bus number of the 'other side' of the bridge
215e23b8b4SSimon Glass  */
225e23b8b4SSimon Glass void dm_pciauto_prescan_setup_bridge(struct udevice *dev, int sub_bus);
235e23b8b4SSimon Glass 
245e23b8b4SSimon Glass /**
255e23b8b4SSimon Glass  * dm_pciauto_postscan_setup_bridge() - Finish set up of a bridge after scanning
265e23b8b4SSimon Glass  *
275e23b8b4SSimon Glass  * This should be called after a bus scan is complete. It adjusts the memory
285e23b8b4SSimon Glass  * ranges to fit with the devices actually found on the other side (downstream)
295e23b8b4SSimon Glass  * of the bridge.
305e23b8b4SSimon Glass  *
315e23b8b4SSimon Glass  * @dev:	Bridge device that was scanned
325e23b8b4SSimon Glass  * @sub_bus:	Bus number of the 'other side' of the bridge
335e23b8b4SSimon Glass  */
345e23b8b4SSimon Glass void dm_pciauto_postscan_setup_bridge(struct udevice *dev, int sub_bus);
355e23b8b4SSimon Glass 
365e23b8b4SSimon Glass /**
375e23b8b4SSimon Glass  * dm_pciauto_config_device() - Configure a PCI device ready for use
385e23b8b4SSimon Glass  *
395e23b8b4SSimon Glass  * If the device is a bridge, downstream devices will be probed.
405e23b8b4SSimon Glass  *
415e23b8b4SSimon Glass  * @dev:	Device to configure
425e23b8b4SSimon Glass  * @return the maximum PCI bus number found by this device. If there are no
435e23b8b4SSimon Glass  * bridges, this just returns the device's bus number. If the device is a
445e23b8b4SSimon Glass  * bridge then it will return a larger number, depending on the devices on
455e23b8b4SSimon Glass  * that bridge. On error, returns a -ve error number.
465e23b8b4SSimon Glass  */
475e23b8b4SSimon Glass int dm_pciauto_config_device(struct udevice *dev);
485e23b8b4SSimon Glass 
49a6eb93b3SSimon Glass /**
50a6eb93b3SSimon Glass  * pci_get_bus() - Get a pointer to a bus, given its number
51a6eb93b3SSimon Glass  *
52a6eb93b3SSimon Glass  * This looks up a PCI bus based on its bus number. The bus is probed if
53a6eb93b3SSimon Glass  * necessary.
54a6eb93b3SSimon Glass  *
55a6eb93b3SSimon Glass  * @busnum:	PCI bus number to look up
56a6eb93b3SSimon Glass  * @busp:	Returns PCI bus on success
57a6eb93b3SSimon Glass  * @return 0 on success, or -ve error
58a6eb93b3SSimon Glass  */
59a6eb93b3SSimon Glass int pci_get_bus(int busnum, struct udevice **busp);
60a6eb93b3SSimon Glass 
615e23b8b4SSimon Glass #endif
62