rapidio: move rio_pw_enable into core code
Make rio_pw_enable() routine available to other RapidIO drivers. Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> Cc: Matt Porter <mporter@kernel.crashing.org> Cc: Aurelien Jacquiot <a-jacquiot@ti.com> Cc: Andre van Herk <andre.van.herk@prodrive-technologies.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5024622f58
commit
b6cb95e8eb
@ -973,17 +973,6 @@ static void rio_init_em(struct rio_dev *rdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* rio_pw_enable - Enables/disables port-write handling by a master port
|
|
||||||
* @port: Master port associated with port-write handling
|
|
||||||
* @enable: 1=enable, 0=disable
|
|
||||||
*/
|
|
||||||
static void rio_pw_enable(struct rio_mport *port, int enable)
|
|
||||||
{
|
|
||||||
if (port->ops->pwenable)
|
|
||||||
port->ops->pwenable(port, enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rio_enum_mport- Start enumeration through a master port
|
* rio_enum_mport- Start enumeration through a master port
|
||||||
* @mport: Master port to send transactions
|
* @mport: Master port to send transactions
|
||||||
|
@ -559,6 +559,24 @@ int rio_release_inb_pwrite(struct rio_dev *rdev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rio_release_inb_pwrite);
|
EXPORT_SYMBOL_GPL(rio_release_inb_pwrite);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rio_pw_enable - Enables/disables port-write handling by a master port
|
||||||
|
* @mport: Master port associated with port-write handling
|
||||||
|
* @enable: 1=enable, 0=disable
|
||||||
|
*/
|
||||||
|
void rio_pw_enable(struct rio_mport *mport, int enable)
|
||||||
|
{
|
||||||
|
if (mport->ops->pwenable) {
|
||||||
|
mutex_lock(&mport->lock);
|
||||||
|
|
||||||
|
if ((enable && ++mport->pwe_refcnt == 1) ||
|
||||||
|
(!enable && mport->pwe_refcnt && --mport->pwe_refcnt == 0))
|
||||||
|
mport->ops->pwenable(mport, enable);
|
||||||
|
mutex_unlock(&mport->lock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(rio_pw_enable);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rio_map_inb_region -- Map inbound memory region.
|
* rio_map_inb_region -- Map inbound memory region.
|
||||||
* @mport: Master port.
|
* @mport: Master port.
|
||||||
@ -2041,6 +2059,7 @@ int rio_mport_initialize(struct rio_mport *mport)
|
|||||||
mport->host_deviceid = rio_get_hdid(mport->id);
|
mport->host_deviceid = rio_get_hdid(mport->id);
|
||||||
mport->nscan = NULL;
|
mport->nscan = NULL;
|
||||||
mutex_init(&mport->lock);
|
mutex_init(&mport->lock);
|
||||||
|
mport->pwe_refcnt = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -266,6 +266,7 @@ enum rio_phy_type {
|
|||||||
* @dma: DMA device associated with mport
|
* @dma: DMA device associated with mport
|
||||||
* @nscan: RapidIO network enumeration/discovery operations
|
* @nscan: RapidIO network enumeration/discovery operations
|
||||||
* @state: mport device state
|
* @state: mport device state
|
||||||
|
* @pwe_refcnt: port-write enable ref counter to track enable/disable requests
|
||||||
*/
|
*/
|
||||||
struct rio_mport {
|
struct rio_mport {
|
||||||
struct list_head dbells; /* list of doorbell events */
|
struct list_head dbells; /* list of doorbell events */
|
||||||
@ -296,6 +297,7 @@ struct rio_mport {
|
|||||||
#endif
|
#endif
|
||||||
struct rio_scan *nscan;
|
struct rio_scan *nscan;
|
||||||
atomic_t state;
|
atomic_t state;
|
||||||
|
unsigned int pwe_refcnt;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int rio_mport_is_running(struct rio_mport *mport)
|
static inline int rio_mport_is_running(struct rio_mport *mport)
|
||||||
|
@ -375,6 +375,7 @@ extern int rio_request_inb_pwrite(struct rio_dev *,
|
|||||||
int (*)(struct rio_dev *, union rio_pw_msg*, int));
|
int (*)(struct rio_dev *, union rio_pw_msg*, int));
|
||||||
extern int rio_release_inb_pwrite(struct rio_dev *);
|
extern int rio_release_inb_pwrite(struct rio_dev *);
|
||||||
extern int rio_inb_pwrite_handler(union rio_pw_msg *pw_msg);
|
extern int rio_inb_pwrite_handler(union rio_pw_msg *pw_msg);
|
||||||
|
extern void rio_pw_enable(struct rio_mport *mport, int enable);
|
||||||
|
|
||||||
/* LDM support */
|
/* LDM support */
|
||||||
int rio_register_driver(struct rio_driver *);
|
int rio_register_driver(struct rio_driver *);
|
||||||
|
Loading…
Reference in New Issue
Block a user