powerpc+of: Add of node/property notification chain for adds and removes
This patch moves the notification chain for updates to the device tree from the powerpc/pseries code to the base OF code. This makes this functionality available to all architectures. Additionally the notification chain is updated to allow notifications for property add/remove/update. To make this work a pointer to a new struct (of_prop_reconfig) is passed to the routines in the notification chain. The of_prop_reconfig property contains a pointer to the node containing the property and a pointer to the property itself. In the case of property updates, the property pointer refers to the new property. Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com> Acked-by: Rob Herring <rob.herring@calxeda.com> Acked-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

parent
f594972083
commit
1cf3d8b3d2
@@ -2,43 +2,11 @@
|
||||
#define _PPC64_PSERIES_RECONFIG_H
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/notifier.h>
|
||||
|
||||
/*
|
||||
* Use this API if your code needs to know about OF device nodes being
|
||||
* added or removed on pSeries systems.
|
||||
*/
|
||||
|
||||
#define PSERIES_RECONFIG_ADD 0x0001
|
||||
#define PSERIES_RECONFIG_REMOVE 0x0002
|
||||
#define PSERIES_DRCONF_MEM_ADD 0x0003
|
||||
#define PSERIES_DRCONF_MEM_REMOVE 0x0004
|
||||
#define PSERIES_UPDATE_PROPERTY 0x0005
|
||||
|
||||
/**
|
||||
* pSeries_reconfig_notify - Notifier value structure for OFDT property updates
|
||||
*
|
||||
* @node: Device tree node which owns the property being updated
|
||||
* @property: Updated property
|
||||
*/
|
||||
struct pSeries_reconfig_prop_update {
|
||||
struct device_node *node;
|
||||
struct property *property;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
extern int pSeries_reconfig_notifier_register(struct notifier_block *);
|
||||
extern void pSeries_reconfig_notifier_unregister(struct notifier_block *);
|
||||
extern int pSeries_reconfig_notify(unsigned long action, void *p);
|
||||
/* Not the best place to put this, will be fixed when we move some
|
||||
* of the rtas suspend-me stuff to pseries */
|
||||
extern void pSeries_coalesce_init(void);
|
||||
#else /* !CONFIG_PPC_PSERIES */
|
||||
static inline int pSeries_reconfig_notifier_register(struct notifier_block *nb)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void pSeries_reconfig_notifier_unregister(struct notifier_block *nb) { }
|
||||
static inline void pSeries_coalesce_init(void) { }
|
||||
#endif /* CONFIG_PPC_PSERIES */
|
||||
|
||||
|
Reference in New Issue
Block a user