mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
staging: vc04_services: Add vchi_queue_user_message function
The vchi_msg_queue function which is used by other drivers to queue a message is difficult to understand and overly generic. Add a new function which is a wrapper on top of vchi_msg_queue that is specifically for queuing a message located in user address space. int vchi_queue_user_message(VCHI_SERVICE_HANDLE_T handle, void __user *data, unsigned int size) Signed-off-by: Michael Zoran <mzoran@crowfest.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fbcaed9e32
commit
619969770f
@ -233,6 +233,12 @@ vchi_queue_kernel_message(VCHI_SERVICE_HANDLE_T handle,
|
||||
void *data,
|
||||
unsigned int size);
|
||||
|
||||
/* Routine to send a message from user memory across a service */
|
||||
extern int
|
||||
vchi_queue_user_message(VCHI_SERVICE_HANDLE_T handle,
|
||||
void __user *data,
|
||||
unsigned int size);
|
||||
|
||||
// Routine to receive a msg from a service
|
||||
// Dequeue is equivalent to hold, copy into client buffer, release
|
||||
extern int32_t vchi_msg_dequeue( VCHI_SERVICE_HANDLE_T handle,
|
||||
|
@ -210,6 +210,40 @@ vchi_queue_kernel_message(VCHI_SERVICE_HANDLE_T handle,
|
||||
}
|
||||
EXPORT_SYMBOL(vchi_queue_kernel_message);
|
||||
|
||||
struct vchi_queue_user_message_context {
|
||||
void __user *data;
|
||||
};
|
||||
|
||||
static ssize_t
|
||||
vchi_queue_user_message_callback(void *context,
|
||||
void *dest,
|
||||
size_t offset,
|
||||
size_t maxsize)
|
||||
{
|
||||
struct vchi_queue_user_message_context *copycontext = context;
|
||||
|
||||
if (copy_from_user(dest, copycontext->data + offset, maxsize))
|
||||
return -EFAULT;
|
||||
|
||||
return maxsize;
|
||||
}
|
||||
|
||||
int
|
||||
vchi_queue_user_message(VCHI_SERVICE_HANDLE_T handle,
|
||||
void __user *data,
|
||||
unsigned int size)
|
||||
{
|
||||
struct vchi_queue_user_message_context copycontext = {
|
||||
.data = data
|
||||
};
|
||||
|
||||
return vchi_msg_queue(handle,
|
||||
vchi_queue_user_message_callback,
|
||||
©context,
|
||||
size);
|
||||
}
|
||||
EXPORT_SYMBOL(vchi_queue_user_message);
|
||||
|
||||
/***********************************************************
|
||||
* Name: vchi_bulk_queue_receive
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user