summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2007-02-16 17:34:50 -0500
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-03-09 22:03:03 +0100
commit21efb3cfc6ed49991638000f58bb23b838c76e25 (patch)
tree30b1b0ed02082b09fa844abf5888b4d3fbdadbe7
parente364cf4e0aa245ba2ce5942289e8a43935505e53 (diff)
firewire: Configure channel and speed at context creation time.
We need the channel number as we queue up iso packets for transmission so we can fill out the header correctly. Signed-off-by: Kristian Høgsberg <krh@redhat.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
-rw-r--r--drivers/firewire/fw-device-cdev.c11
-rw-r--r--drivers/firewire/fw-device-cdev.h5
-rw-r--r--drivers/firewire/fw-iso.c11
-rw-r--r--drivers/firewire/fw-ohci.c4
-rw-r--r--drivers/firewire/fw-transaction.h6
5 files changed, 21 insertions, 16 deletions
diff --git a/drivers/firewire/fw-device-cdev.c b/drivers/firewire/fw-device-cdev.c
index 6545fb8214d8..5c876188677f 100644
--- a/drivers/firewire/fw-device-cdev.c
+++ b/drivers/firewire/fw-device-cdev.c
@@ -413,8 +413,16 @@ static int ioctl_create_iso_context(struct client *client, void __user *arg)
if (request.type > FW_ISO_CONTEXT_RECEIVE)
return -EINVAL;
+ if (request.channel > 63)
+ return -EINVAL;
+
+ if (request.speed > SCODE_3200)
+ return -EINVAL;
+
client->iso_context = fw_iso_context_create(client->device->card,
request.type,
+ request.channel,
+ request.speed,
request.header_size,
iso_callback, client);
if (IS_ERR(client->iso_context))
@@ -519,8 +527,7 @@ static int ioctl_start_iso(struct client *client, void __user *arg)
if (copy_from_user(&request, arg, sizeof request))
return -EFAULT;
- return fw_iso_context_start(client->iso_context, request.channel,
- request.speed, request.cycle);
+ return fw_iso_context_start(client->iso_context, request.cycle);
}
static int ioctl_stop_iso(struct client *client, void __user *arg)
diff --git a/drivers/firewire/fw-device-cdev.h b/drivers/firewire/fw-device-cdev.h
index e32b39dc7e74..99e6aa629f4a 100644
--- a/drivers/firewire/fw-device-cdev.h
+++ b/drivers/firewire/fw-device-cdev.h
@@ -134,7 +134,8 @@ struct fw_cdev_allocate {
struct fw_cdev_create_iso_context {
__u32 type;
__u32 header_size;
- __u32 handle;
+ __u32 channel;
+ __u32 speed;
};
struct fw_cdev_iso_packet {
@@ -154,8 +155,6 @@ struct fw_cdev_queue_iso {
};
struct fw_cdev_start_iso {
- __u32 channel;
- __u32 speed;
__s32 cycle;
};
diff --git a/drivers/firewire/fw-iso.c b/drivers/firewire/fw-iso.c
index deff6922a98f..dc5a7e3558ec 100644
--- a/drivers/firewire/fw-iso.c
+++ b/drivers/firewire/fw-iso.c
@@ -106,7 +106,8 @@ void fw_iso_buffer_destroy(struct fw_iso_buffer *buffer,
}
struct fw_iso_context *
-fw_iso_context_create(struct fw_card *card, int type, size_t header_size,
+fw_iso_context_create(struct fw_card *card, int type,
+ int channel, int speed, size_t header_size,
fw_iso_callback_t callback, void *callback_data)
{
struct fw_iso_context *ctx;
@@ -117,6 +118,8 @@ fw_iso_context_create(struct fw_card *card, int type, size_t header_size,
ctx->card = card;
ctx->type = type;
+ ctx->channel = channel;
+ ctx->speed = speed;
ctx->header_size = header_size;
ctx->callback = callback;
ctx->callback_data = callback_data;
@@ -134,12 +137,8 @@ void fw_iso_context_destroy(struct fw_iso_context *ctx)
EXPORT_SYMBOL(fw_iso_context_destroy);
int
-fw_iso_context_start(struct fw_iso_context *ctx,
- int channel, int speed, int cycle)
+fw_iso_context_start(struct fw_iso_context *ctx, int cycle)
{
- ctx->channel = channel;
- ctx->speed = speed;
-
return ctx->card->driver->start_iso(ctx, cycle);
}
EXPORT_SYMBOL(fw_iso_context_start);
diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c
index 12f109da4d8d..0088acd7718e 100644
--- a/drivers/firewire/fw-ohci.c
+++ b/drivers/firewire/fw-ohci.c
@@ -1413,7 +1413,7 @@ static int ohci_start_iso(struct fw_iso_context *base, s32 cycle)
if (cycle > 0)
cycle_match = IT_CONTEXT_CYCLE_MATCH_ENABLE |
(cycle & 0x7fff) << 16;
-
+
reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 1 << index);
reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1 << index);
context_run(&ctx->context, cycle_match);
@@ -1638,7 +1638,7 @@ ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base,
return 0;
}
-
+
static int
ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base,
struct fw_iso_packet *packet,
diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h
index 1bbcbb341f2f..22e45ccd7b1d 100644
--- a/drivers/firewire/fw-transaction.h
+++ b/drivers/firewire/fw-transaction.h
@@ -373,7 +373,8 @@ void
fw_iso_buffer_destroy(struct fw_iso_buffer *buffer, struct fw_card *card);
struct fw_iso_context *
-fw_iso_context_create(struct fw_card *card, int type, size_t header_size,
+fw_iso_context_create(struct fw_card *card, int type,
+ int channel, int speed, size_t header_size,
fw_iso_callback_t callback, void *callback_data);
void
@@ -386,8 +387,7 @@ fw_iso_context_queue(struct fw_iso_context *ctx,
unsigned long payload);
int
-fw_iso_context_start(struct fw_iso_context *ctx,
- int channel, int speed, int cycle);
+fw_iso_context_start(struct fw_iso_context *ctx, int cycle);
int
fw_iso_context_stop(struct fw_iso_context *ctx);