aboutsummaryrefslogtreecommitdiff
path: root/drivers/rapidio/rio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rapidio/rio.c')
-rw-r--r--drivers/rapidio/rio.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index adc299e2b07..3ca1011ceaa 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -48,6 +48,7 @@ u16 rio_local_get_device_id(struct rio_mport *port)
/**
* rio_request_inb_mbox - request inbound mailbox service
* @mport: RIO master port from which to allocate the mailbox resource
+ * @dev_id: Device specific pointer to pass on event
* @mbox: Mailbox number to claim
* @entries: Number of entries in inbound mailbox queue
* @minb: Callback to execute when inbound message is received
@@ -56,9 +57,10 @@ u16 rio_local_get_device_id(struct rio_mport *port)
* a callback function to the resource. Returns %0 on success.
*/
int rio_request_inb_mbox(struct rio_mport *mport,
+ void *dev_id,
int mbox,
int entries,
- void (*minb) (struct rio_mport * mport, int mbox,
+ void (*minb) (struct rio_mport * mport, void *dev_id, int mbox,
int slot))
{
int rc = 0;
@@ -81,7 +83,7 @@ int rio_request_inb_mbox(struct rio_mport *mport,
/* Hook the inbound message callback */
mport->inb_msg[mbox].mcback = minb;
- rc = rio_open_inb_mbox(mport, mbox, entries);
+ rc = rio_open_inb_mbox(mport, dev_id, mbox, entries);
} else
rc = -ENOMEM;
@@ -108,6 +110,7 @@ int rio_release_inb_mbox(struct rio_mport *mport, int mbox)
/**
* rio_request_outb_mbox - request outbound mailbox service
* @mport: RIO master port from which to allocate the mailbox resource
+ * @dev_id: Device specific pointer to pass on event
* @mbox: Mailbox number to claim
* @entries: Number of entries in outbound mailbox queue
* @moutb: Callback to execute when outbound message is sent
@@ -116,10 +119,10 @@ int rio_release_inb_mbox(struct rio_mport *mport, int mbox)
* a callback function to the resource. Returns 0 on success.
*/
int rio_request_outb_mbox(struct rio_mport *mport,
+ void *dev_id,
int mbox,
int entries,
- void (*moutb) (struct rio_mport * mport, int mbox,
- int slot))
+ void (*moutb) (struct rio_mport * mport, void *dev_id, int mbox, int slot))
{
int rc = 0;
@@ -141,7 +144,7 @@ int rio_request_outb_mbox(struct rio_mport *mport,
/* Hook the inbound message callback */
mport->outb_msg[mbox].mcback = moutb;
- rc = rio_open_outb_mbox(mport, mbox, entries);
+ rc = rio_open_outb_mbox(mport, dev_id, mbox, entries);
} else
rc = -ENOMEM;
@@ -168,6 +171,7 @@ int rio_release_outb_mbox(struct rio_mport *mport, int mbox)
/**
* rio_setup_inb_dbell - bind inbound doorbell callback
* @mport: RIO master port to bind the doorbell callback
+ * @dev_id: Device specific pointer to pass on event
* @res: Doorbell message resource
* @dinb: Callback to execute when doorbell is received
*
@@ -176,8 +180,8 @@ int rio_release_outb_mbox(struct rio_mport *mport, int mbox)
* satisfied.
*/
static int
-rio_setup_inb_dbell(struct rio_mport *mport, struct resource *res,
- void (*dinb) (struct rio_mport * mport, u16 src, u16 dst,
+rio_setup_inb_dbell(struct rio_mport *mport, void *dev_id, struct resource *res,
+ void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src, u16 dst,
u16 info))
{
int rc = 0;
@@ -190,6 +194,7 @@ rio_setup_inb_dbell(struct rio_mport *mport, struct resource *res,
dbell->res = res;
dbell->dinb = dinb;
+ dbell->dev_id = dev_id;
list_add_tail(&dbell->node, &mport->dbells);
@@ -200,6 +205,7 @@ rio_setup_inb_dbell(struct rio_mport *mport, struct resource *res,
/**
* rio_request_inb_dbell - request inbound doorbell message service
* @mport: RIO master port from which to allocate the doorbell resource
+ * @dev_id: Device specific pointer to pass on event
* @start: Doorbell info range start
* @end: Doorbell info range end
* @dinb: Callback to execute when doorbell is received
@@ -209,9 +215,10 @@ rio_setup_inb_dbell(struct rio_mport *mport, struct resource *res,
* has been satisfied.
*/
int rio_request_inb_dbell(struct rio_mport *mport,
+ void *dev_id,
u16 start,
u16 end,
- void (*dinb) (struct rio_mport * mport, u16 src,
+ void (*dinb) (struct rio_mport * mport, void *dev_id, u16 src,
u16 dst, u16 info))
{
int rc = 0;
@@ -230,7 +237,7 @@ int rio_request_inb_dbell(struct rio_mport *mport,
}
/* Hook the doorbell callback */
- rc = rio_setup_inb_dbell(mport, res, dinb);
+ rc = rio_setup_inb_dbell(mport, dev_id, res, dinb);
} else
rc = -ENOMEM;