git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
firewire: Fix dualbuffer iso receive mode and drop buffer fill mode.
[pandora-kernel.git]
/
drivers
/
firewire
/
fw-device-cdev.c
diff --git
a/drivers/firewire/fw-device-cdev.c
b/drivers/firewire/fw-device-cdev.c
index
7b0efcc
..
be6bfcf
100644
(file)
--- a/
drivers/firewire/fw-device-cdev.c
+++ b/
drivers/firewire/fw-device-cdev.c
@@
-541,20
+541,32
@@
static int ioctl_create_iso_context(struct client *client, void __user *arg)
if (copy_from_user(&request, arg, sizeof request))
return -EFAULT;
if (copy_from_user(&request, arg, sizeof request))
return -EFAULT;
- if (request.type > FW_ISO_CONTEXT_RECEIVE)
- return -EINVAL;
-
if (request.channel > 63)
return -EINVAL;
if (request.channel > 63)
return -EINVAL;
- if (request.sync > 15)
- return -EINVAL;
+ switch (request.type) {
+ case FW_ISO_CONTEXT_RECEIVE:
+ if (request.sync > 15)
+ return -EINVAL;
- if (request.tags == 0 || request.tags > 15)
- return -EINVAL;
+ if (request.tags == 0 || request.tags > 15)
+ return -EINVAL;
+
+ if (request.header_size < 4 || (request.header_size & 3))
+ return -EINVAL;
- if (request.speed > SCODE_3200)
+ break;
+
+ case FW_ISO_CONTEXT_TRANSMIT:
+ if (request.speed > SCODE_3200)
+ return -EINVAL;
+
+ break;
+
+ default:
return -EINVAL;
return -EINVAL;
+ }
+
client->iso_context = fw_iso_context_create(client->device->card,
request.type,
client->iso_context = fw_iso_context_create(client->device->card,
request.type,