linux/drivers/pci/pcie/portdrv.h

/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Purpose:	PCI Express Port Bus Driver's Internal Data Structures
 *
 * Copyright (C) 2004 Intel
 * Copyright (C) Tom Long Nguyen ([email protected])
 */

#ifndef _PORTDRV_H_
#define _PORTDRV_H_

#include <linux/compiler.h>

/* Service Type */
#define PCIE_PORT_SERVICE_PME_SHIFT
#define PCIE_PORT_SERVICE_PME
#define PCIE_PORT_SERVICE_AER_SHIFT
#define PCIE_PORT_SERVICE_AER
#define PCIE_PORT_SERVICE_HP_SHIFT
#define PCIE_PORT_SERVICE_HP
#define PCIE_PORT_SERVICE_DPC_SHIFT
#define PCIE_PORT_SERVICE_DPC
#define PCIE_PORT_SERVICE_BWNOTIF_SHIFT
#define PCIE_PORT_SERVICE_BWNOTIF

#define PCIE_PORT_DEVICE_MAXSERVICES

extern bool pcie_ports_dpc_native;

#ifdef CONFIG_PCIEAER
int pcie_aer_init(void);
#else
static inline int pcie_aer_init(void) { return 0; }
#endif

#ifdef CONFIG_HOTPLUG_PCI_PCIE
int pcie_hp_init(void);
#else
static inline int pcie_hp_init(void) { return 0; }
#endif

#ifdef CONFIG_PCIE_PME
int pcie_pme_init(void);
#else
static inline int pcie_pme_init(void) { return 0; }
#endif

#ifdef CONFIG_PCIE_DPC
int pcie_dpc_init(void);
#else
static inline int pcie_dpc_init(void) { return 0; }
#endif

/* Port Type */
#define PCIE_ANY_PORT

struct pcie_device {};
#define to_pcie_device(d)

static inline void set_service_data(struct pcie_device *dev, void *data)
{}

static inline void *get_service_data(struct pcie_device *dev)
{}

struct pcie_port_service_driver {};
#define to_service_driver(d)

int pcie_port_service_register(struct pcie_port_service_driver *new);
void pcie_port_service_unregister(struct pcie_port_service_driver *new);

extern const struct bus_type pcie_port_bus_type;

struct pci_dev;

#ifdef CONFIG_PCIE_PME
extern bool pcie_pme_msi_disabled;

static inline void pcie_pme_disable_msi(void)
{}

static inline bool pcie_pme_no_msi(void)
{}

void pcie_pme_interrupt_enable(struct pci_dev *dev, bool enable);
#else /* !CONFIG_PCIE_PME */
static inline void pcie_pme_disable_msi(void) {}
static inline bool pcie_pme_no_msi(void) { return false; }
static inline void pcie_pme_interrupt_enable(struct pci_dev *dev, bool en) {}
#endif /* !CONFIG_PCIE_PME */

struct device *pcie_port_find_device(struct pci_dev *dev, u32 service);
#endif /* _PORTDRV_H_ */