pci-acpi.h 2.3 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10
/*
 * File		pci-acpi.h
 *
 * Copyright (C) 2004 Intel
 * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
 */

#ifndef _PCI_ACPI_H_
#define _PCI_ACPI_H_

11 12
#include <linux/acpi.h>

L
Linus Torvalds 已提交
13
#ifdef CONFIG_ACPI
14 15 16 17 18 19
extern acpi_status pci_acpi_add_bus_pm_notifier(struct acpi_device *dev,
						 struct pci_bus *pci_bus);
extern acpi_status pci_acpi_remove_bus_pm_notifier(struct acpi_device *dev);
extern acpi_status pci_acpi_add_pm_notifier(struct acpi_device *dev,
					     struct pci_dev *pci_dev);
extern acpi_status pci_acpi_remove_pm_notifier(struct acpi_device *dev);
20
extern phys_addr_t acpi_pci_root_get_mcfg_addr(acpi_handle handle);
21

22 23
static inline acpi_handle acpi_find_root_bridge_handle(struct pci_dev *pdev)
{
24
	struct pci_bus *pbus = pdev->bus;
25

26
	/* Find a PCI root bus */
27
	while (!pci_is_root_bus(pbus))
28
		pbus = pbus->parent;
29

30
	return ACPI_HANDLE(pbus->bridge);
31
}
32 33 34

static inline acpi_handle acpi_pci_get_bridge_handle(struct pci_bus *pbus)
{
35 36 37 38 39 40 41
	struct device *dev;

	if (pci_is_root_bus(pbus))
		dev = pbus->bridge;
	else
		dev = &pbus->self->dev;

42
	return ACPI_HANDLE(dev);
43
}
44 45 46

void acpi_pci_add_bus(struct pci_bus *bus);
void acpi_pci_remove_bus(struct pci_bus *bus);
47 48 49

#ifdef	CONFIG_ACPI_PCI_SLOT
void acpi_pci_slot_init(void);
50
void acpi_pci_slot_enumerate(struct pci_bus *bus);
51 52 53
void acpi_pci_slot_remove(struct pci_bus *bus);
#else
static inline void acpi_pci_slot_init(void) { }
54
static inline void acpi_pci_slot_enumerate(struct pci_bus *bus) { }
55 56 57
static inline void acpi_pci_slot_remove(struct pci_bus *bus) { }
#endif

58 59
#ifdef	CONFIG_HOTPLUG_PCI_ACPI
void acpiphp_init(void);
60
void acpiphp_enumerate_slots(struct pci_bus *bus);
61
void acpiphp_remove_slots(struct pci_bus *bus);
62
void acpiphp_check_host_bridge(acpi_handle handle);
63 64
#else
static inline void acpiphp_init(void) { }
65
static inline void acpiphp_enumerate_slots(struct pci_bus *bus) { }
66
static inline void acpiphp_remove_slots(struct pci_bus *bus) { }
67
static inline void acpiphp_check_host_bridge(acpi_handle handle) { }
68 69
#endif

70 71 72 73
#else	/* CONFIG_ACPI */
static inline void acpi_pci_add_bus(struct pci_bus *bus) { }
static inline void acpi_pci_remove_bus(struct pci_bus *bus) { }
#endif	/* CONFIG_ACPI */
L
Linus Torvalds 已提交
74

75 76 77 78 79 80
#ifdef CONFIG_ACPI_APEI
extern bool aer_acpi_firmware_first(void);
#else
static inline bool aer_acpi_firmware_first(void) { return false; }
#endif

L
Linus Torvalds 已提交
81
#endif	/* _PCI_ACPI_H_ */