summaryrefslogtreecommitdiffstats
path: root/drivers/firewire/fw-device-cdev.c
diff options
context:
space:
mode:
authorKristian Høgsberg2007-04-30 21:03:14 +0200
committerStefan Richter2007-04-30 23:08:13 +0200
commitabaa5743e340c23922d92c9a5a6753ea3ae71e58 (patch)
treec90f0b63edbf99ea6f7bc63d6a15e2c8afe6ae9f /drivers/firewire/fw-device-cdev.c
parentfirewire: Add read/write and size annotations to IOC numbers. (diff)
downloadkernel-qcow2-linux-abaa5743e340c23922d92c9a5a6753ea3ae71e58.tar.gz
kernel-qcow2-linux-abaa5743e340c23922d92c9a5a6753ea3ae71e58.tar.xz
kernel-qcow2-linux-abaa5743e340c23922d92c9a5a6753ea3ae71e58.zip
firewire: Future proof the iso ioctls by adding a handle for the iso context.
Currently create context always returns 0 and the other iso ioctls will expect user space to pass that in for subsequent ioctls. Signed-off-by: Kristian Høgsberg <krh@redhat.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire/fw-device-cdev.c')
-rw-r--r--drivers/firewire/fw-device-cdev.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/firewire/fw-device-cdev.c b/drivers/firewire/fw-device-cdev.c
index d2b867f44348..2910db69ec2c 100644
--- a/drivers/firewire/fw-device-cdev.c
+++ b/drivers/firewire/fw-device-cdev.c
@@ -80,6 +80,7 @@ struct client {
u64 bus_reset_closure;
struct fw_iso_context *iso_context;
+ u64 iso_closure;
struct fw_iso_buffer buffer;
unsigned long vm_start;
@@ -626,7 +627,7 @@ iso_callback(struct fw_iso_context *context, u32 cycle,
return;
interrupt->interrupt.type = FW_CDEV_EVENT_ISO_INTERRUPT;
- interrupt->interrupt.closure = 0;
+ interrupt->interrupt.closure = client->iso_closure;
interrupt->interrupt.cycle = cycle;
interrupt->interrupt.header_length = header_length;
memcpy(interrupt->interrupt.header, header, header_length);
@@ -659,6 +660,7 @@ static int ioctl_create_iso_context(struct client *client, void *buffer)
return -EINVAL;
}
+ client->iso_closure = request->closure;
client->iso_context = fw_iso_context_create(client->device->card,
request->type,
request->channel,
@@ -668,6 +670,9 @@ static int ioctl_create_iso_context(struct client *client, void *buffer)
if (IS_ERR(client->iso_context))
return PTR_ERR(client->iso_context);
+ /* We only support one context at this time. */
+ request->handle = 0;
+
return 0;
}
@@ -683,7 +688,7 @@ static int ioctl_queue_iso(struct client *client, void *buffer)
u8 header[256];
} u;
- if (ctx == NULL)
+ if (ctx == NULL || request->handle != 0)
return -EINVAL;
/* If the user passes a non-NULL data pointer, has mmap()'ed
@@ -759,6 +764,8 @@ static int ioctl_start_iso(struct client *client, void *buffer)
{
struct fw_cdev_start_iso *request = buffer;
+ if (request->handle != 0)
+ return -EINVAL;
if (client->iso_context->type == FW_ISO_CONTEXT_RECEIVE) {
if (request->tags == 0 || request->tags > 15)
return -EINVAL;
@@ -773,6 +780,11 @@ static int ioctl_start_iso(struct client *client, void *buffer)
static int ioctl_stop_iso(struct client *client, void *buffer)
{
+ struct fw_cdev_stop_iso *request = buffer;
+
+ if (request->handle != 0)
+ return -EINVAL;
+
return fw_iso_context_stop(client->iso_context);
}