1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright IBM Corp. 2020 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Author(s): 6*4882a593Smuzhiyun * Pierre Morel <pmorel@linux.ibm.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun int zpci_bus_device_register(struct zpci_dev *zdev, struct pci_ops *ops); 11*4882a593Smuzhiyun void zpci_bus_device_unregister(struct zpci_dev *zdev); 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun void zpci_release_device(struct kref *kref); zpci_zdev_put(struct zpci_dev * zdev)14*4882a593Smuzhiyunstatic inline void zpci_zdev_put(struct zpci_dev *zdev) 15*4882a593Smuzhiyun { 16*4882a593Smuzhiyun if (zdev) 17*4882a593Smuzhiyun kref_put(&zdev->kref, zpci_release_device); 18*4882a593Smuzhiyun } 19*4882a593Smuzhiyun zpci_zdev_get(struct zpci_dev * zdev)20*4882a593Smuzhiyunstatic inline void zpci_zdev_get(struct zpci_dev *zdev) 21*4882a593Smuzhiyun { 22*4882a593Smuzhiyun kref_get(&zdev->kref); 23*4882a593Smuzhiyun } 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun int zpci_alloc_domain(int domain); 26*4882a593Smuzhiyun void zpci_free_domain(int domain); 27*4882a593Smuzhiyun int zpci_setup_bus_resources(struct zpci_dev *zdev, 28*4882a593Smuzhiyun struct list_head *resources); 29*4882a593Smuzhiyun get_zdev_by_bus(struct pci_bus * bus,unsigned int devfn)30*4882a593Smuzhiyunstatic inline struct zpci_dev *get_zdev_by_bus(struct pci_bus *bus, 31*4882a593Smuzhiyun unsigned int devfn) 32*4882a593Smuzhiyun { 33*4882a593Smuzhiyun struct zpci_bus *zbus = bus->sysdata; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun return (devfn >= ZPCI_FUNCTIONS_PER_BUS) ? NULL : zbus->function[devfn]; 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun 38