Commit 89379f16 authored by Andrew Donnellan's avatar Andrew Donnellan Committed by Michael Ellerman

PCI/hotplug: pnv_php: export symbols and move struct types needed by cxl

The cxl driver will use infrastructure from pnv_php to handle device tree
updates when switching bi-modal CAPI cards into CAPI mode.

To enable this, export pnv_php_find_slot() and
pnv_php_set_slot_power_state(), and add corresponding declarations, as well
as the definition of struct pnv_php_slot, to asm/pnv-pci.h.

Cc: Gavin Shan <gwshan@linux.vnet.ibm.com>
Cc: linux-pci@vger.kernel.org
Cc: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: default avatarAndrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: default avatarIan Munsie <imunsie@au1.ibm.com>
Acked-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent f67a6722
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#define _ASM_PNV_PCI_H #define _ASM_PNV_PCI_H
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pci_hotplug.h>
#include <misc/cxl-base.h> #include <misc/cxl-base.h>
#include <asm/opal-api.h> #include <asm/opal-api.h>
...@@ -47,4 +48,31 @@ void pnv_cxl_phb_set_peer_afu(struct pci_dev *dev, struct cxl_afu *afu); ...@@ -47,4 +48,31 @@ void pnv_cxl_phb_set_peer_afu(struct pci_dev *dev, struct cxl_afu *afu);
#endif #endif
struct pnv_php_slot {
struct hotplug_slot slot;
struct hotplug_slot_info slot_info;
uint64_t id;
char *name;
int slot_no;
struct kref kref;
#define PNV_PHP_STATE_INITIALIZED 0
#define PNV_PHP_STATE_REGISTERED 1
#define PNV_PHP_STATE_POPULATED 2
#define PNV_PHP_STATE_OFFLINE 3
int state;
struct device_node *dn;
struct pci_dev *pdev;
struct pci_bus *bus;
bool power_state_check;
void *fdt;
void *dt;
struct of_changeset ocs;
struct pnv_php_slot *parent;
struct list_head children;
struct list_head link;
};
extern struct pnv_php_slot *pnv_php_find_slot(struct device_node *dn);
extern int pnv_php_set_slot_power_state(struct hotplug_slot *slot,
uint8_t state);
#endif #endif
...@@ -22,30 +22,6 @@ ...@@ -22,30 +22,6 @@
#define DRIVER_AUTHOR "Gavin Shan, IBM Corporation" #define DRIVER_AUTHOR "Gavin Shan, IBM Corporation"
#define DRIVER_DESC "PowerPC PowerNV PCI Hotplug Driver" #define DRIVER_DESC "PowerPC PowerNV PCI Hotplug Driver"
struct pnv_php_slot {
struct hotplug_slot slot;
struct hotplug_slot_info slot_info;
uint64_t id;
char *name;
int slot_no;
struct kref kref;
#define PNV_PHP_STATE_INITIALIZED 0
#define PNV_PHP_STATE_REGISTERED 1
#define PNV_PHP_STATE_POPULATED 2
#define PNV_PHP_STATE_OFFLINE 3
int state;
struct device_node *dn;
struct pci_dev *pdev;
struct pci_bus *bus;
bool power_state_check;
void *fdt;
void *dt;
struct of_changeset ocs;
struct pnv_php_slot *parent;
struct list_head children;
struct list_head link;
};
static LIST_HEAD(pnv_php_slot_list); static LIST_HEAD(pnv_php_slot_list);
static DEFINE_SPINLOCK(pnv_php_lock); static DEFINE_SPINLOCK(pnv_php_lock);
...@@ -91,7 +67,7 @@ static struct pnv_php_slot *pnv_php_match(struct device_node *dn, ...@@ -91,7 +67,7 @@ static struct pnv_php_slot *pnv_php_match(struct device_node *dn,
return NULL; return NULL;
} }
static struct pnv_php_slot *pnv_php_find_slot(struct device_node *dn) struct pnv_php_slot *pnv_php_find_slot(struct device_node *dn)
{ {
struct pnv_php_slot *php_slot, *tmp; struct pnv_php_slot *php_slot, *tmp;
unsigned long flags; unsigned long flags;
...@@ -108,6 +84,7 @@ static struct pnv_php_slot *pnv_php_find_slot(struct device_node *dn) ...@@ -108,6 +84,7 @@ static struct pnv_php_slot *pnv_php_find_slot(struct device_node *dn)
return NULL; return NULL;
} }
EXPORT_SYMBOL_GPL(pnv_php_find_slot);
/* /*
* Remove pdn for all children of the indicated device node. * Remove pdn for all children of the indicated device node.
...@@ -316,8 +293,8 @@ static int pnv_php_add_devtree(struct pnv_php_slot *php_slot) ...@@ -316,8 +293,8 @@ static int pnv_php_add_devtree(struct pnv_php_slot *php_slot)
return ret; return ret;
} }
static int pnv_php_set_slot_power_state(struct hotplug_slot *slot, int pnv_php_set_slot_power_state(struct hotplug_slot *slot,
uint8_t state) uint8_t state)
{ {
struct pnv_php_slot *php_slot = slot->private; struct pnv_php_slot *php_slot = slot->private;
struct opal_msg msg; struct opal_msg msg;
...@@ -347,6 +324,7 @@ static int pnv_php_set_slot_power_state(struct hotplug_slot *slot, ...@@ -347,6 +324,7 @@ static int pnv_php_set_slot_power_state(struct hotplug_slot *slot,
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(pnv_php_set_slot_power_state);
static int pnv_php_get_power_state(struct hotplug_slot *slot, u8 *state) static int pnv_php_get_power_state(struct hotplug_slot *slot, u8 *state)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment