Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/s390/pci/pci_bus.h
52879 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
3
* Copyright IBM Corp. 2020
4
*
5
* Author(s):
6
* Pierre Morel <[email protected]>
7
*
8
*/
9
#ifndef __S390_PCI_BUS_H
10
#define __S390_PCI_BUS_H
11
12
#include <linux/pci.h>
13
14
int zpci_bus_device_register(struct zpci_dev *zdev, struct pci_ops *ops);
15
void zpci_bus_device_unregister(struct zpci_dev *zdev);
16
17
int zpci_bus_scan_bus(struct zpci_bus *zbus);
18
void zpci_bus_get_next(struct zpci_bus **pos);
19
20
/**
21
* zpci_bus_for_each - iterate over all the registered zbus objects
22
* @pos: a struct zpci_bus * as cursor
23
*
24
* Acquires and releases references as the cursor iterates over the registered
25
* objects. Is tolerant against concurrent removals of objects.
26
*
27
* Context: Process context. May sleep.
28
*/
29
#define zpci_bus_for_each(pos) \
30
for ((pos) = NULL, zpci_bus_get_next(&(pos)); (pos) != NULL; \
31
zpci_bus_get_next(&(pos)))
32
33
int zpci_bus_scan_device(struct zpci_dev *zdev);
34
void zpci_bus_remove_device(struct zpci_dev *zdev, bool set_error);
35
36
void zpci_release_device(struct kref *kref);
37
38
void zpci_zdev_put(struct zpci_dev *zdev);
39
40
static inline void zpci_zdev_get(struct zpci_dev *zdev)
41
{
42
kref_get(&zdev->kref);
43
}
44
45
int zpci_alloc_domain(int domain);
46
void zpci_free_domain(int domain);
47
int zpci_setup_bus_resources(struct zpci_dev *zdev);
48
49
static inline struct zpci_dev *zdev_from_bus(struct pci_bus *bus,
50
unsigned int devfn)
51
{
52
struct zpci_bus *zbus = bus->sysdata;
53
54
return (devfn >= ZPCI_FUNCTIONS_PER_BUS) ? NULL : zbus->function[devfn];
55
}
56
57
#endif /* __S390_PCI_BUS_H */
58
59