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