portdrv.h 2.1 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11
/*
 * File:	portdrv.h
 * Purpose:	PCI Express Port Bus Driver's Internal Data Structures
 *
 * Copyright (C) 2004 Intel
 * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
 */

#ifndef _PORTDRV_H_
#define _PORTDRV_H_

12 13
#include <linux/compiler.h>

14
#define PCIE_PORT_DEVICE_MAXSERVICES   4
15
/*
16 17
 * According to the PCI Express Base Specification 2.0, the indices of
 * the MSI-X table entires used by port services must not exceed 31
18 19
 */
#define PCIE_PORT_MAX_MSIX_ENTRIES	32
L
Linus Torvalds 已提交
20 21 22 23

#define get_descriptor_id(type, service) (((type - 4) << 4) | service)

extern struct bus_type pcie_port_bus_type;
24
int pcie_port_device_register(struct pci_dev *dev);
L
Linus Torvalds 已提交
25
#ifdef CONFIG_PM
26 27
int pcie_port_device_suspend(struct device *dev);
int pcie_port_device_resume(struct device *dev);
L
Linus Torvalds 已提交
28
#endif
29 30 31
void pcie_port_device_remove(struct pci_dev *dev);
int __must_check pcie_port_bus_register(void);
void pcie_port_bus_unregister(void);
L
Linus Torvalds 已提交
32

33 34
struct pci_dev;

35
void pcie_clear_root_pme_status(struct pci_dev *dev);
36

37 38 39 40 41 42 43 44 45 46 47 48
#ifdef CONFIG_HOTPLUG_PCI_PCIE
extern bool pciehp_msi_disabled;

static inline bool pciehp_no_msi(void)
{
	return pciehp_msi_disabled;
}

#else  /* !CONFIG_HOTPLUG_PCI_PCIE */
static inline bool pciehp_no_msi(void) { return false; }
#endif /* !CONFIG_HOTPLUG_PCI_PCIE */

49 50 51 52 53 54 55 56 57 58 59 60
#ifdef CONFIG_PCIE_PME
extern bool pcie_pme_msi_disabled;

static inline void pcie_pme_disable_msi(void)
{
	pcie_pme_msi_disabled = true;
}

static inline bool pcie_pme_no_msi(void)
{
	return pcie_pme_msi_disabled;
}
61

62
void pcie_pme_interrupt_enable(struct pci_dev *dev, bool enable);
63 64 65
#else /* !CONFIG_PCIE_PME */
static inline void pcie_pme_disable_msi(void) {}
static inline bool pcie_pme_no_msi(void) { return false; }
66
static inline void pcie_pme_interrupt_enable(struct pci_dev *dev, bool en) {}
67 68
#endif /* !CONFIG_PCIE_PME */

69
#ifdef CONFIG_ACPI
70
int pcie_port_acpi_setup(struct pci_dev *port, int *mask);
71 72 73 74 75 76 77 78 79 80 81 82

static inline int pcie_port_platform_notify(struct pci_dev *port, int *mask)
{
	return pcie_port_acpi_setup(port, mask);
}
#else /* !CONFIG_ACPI */
static inline int pcie_port_platform_notify(struct pci_dev *port, int *mask)
{
	return 0;
}
#endif /* !CONFIG_ACPI */

L
Linus Torvalds 已提交
83
#endif /* _PORTDRV_H_ */