firewire: Fix dualbuffer iso receive mode and drop buffer fill mode.

The dualbuffer DMA setup did not account for the iso trailer word
and thus didn't  work correctly.  With this fixed we can drop the
dual buffer fallback mode.

Signed-off-by: Kristian Høgsberg <krh@redhat.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
diff --git a/drivers/firewire/fw-device-cdev.c b/drivers/firewire/fw-device-cdev.c
index 7b0efccf..be6bfcf 100644
--- a/drivers/firewire/fw-device-cdev.c
+++ b/drivers/firewire/fw-device-cdev.c
@@ -541,20 +541,32 @@
 	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.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.speed > SCODE_3200)
+		if (request.header_size < 4 || (request.header_size & 3))
+			return -EINVAL;
+
+		break;
+
+	case FW_ISO_CONTEXT_TRANSMIT:
+		if (request.speed > SCODE_3200)
+			return -EINVAL;
+
+		break;
+
+	default:
 		return -EINVAL;
+	}
+
 
 	client->iso_context = fw_iso_context_create(client->device->card,
 						    request.type,