diff options
author | Kristian Høgsberg <krh@redhat.com> | 2007-02-16 17:34:50 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-03-09 16:03:03 -0500 |
commit | 21efb3cfc6ed49991638000f58bb23b838c76e25 (patch) | |
tree | 30b1b0ed02082b09fa844abf5888b4d3fbdadbe7 | |
parent | e364cf4e0aa245ba2ce5942289e8a43935505e53 (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.c | 11 | ||||
-rw-r--r-- | drivers/firewire/fw-device-cdev.h | 5 | ||||
-rw-r--r-- | drivers/firewire/fw-iso.c | 11 | ||||
-rw-r--r-- | drivers/firewire/fw-ohci.c | 4 | ||||
-rw-r--r-- | drivers/firewire/fw-transaction.h | 6 |
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) | |||
413 | if (request.type > FW_ISO_CONTEXT_RECEIVE) | 413 | if (request.type > FW_ISO_CONTEXT_RECEIVE) |
414 | return -EINVAL; | 414 | return -EINVAL; |
415 | 415 | ||
416 | if (request.channel > 63) | ||
417 | return -EINVAL; | ||
418 | |||
419 | if (request.speed > SCODE_3200) | ||
420 | return -EINVAL; | ||
421 | |||
416 | client->iso_context = fw_iso_context_create(client->device->card, | 422 | client->iso_context = fw_iso_context_create(client->device->card, |
417 | request.type, | 423 | request.type, |
424 | request.channel, | ||
425 | request.speed, | ||
418 | request.header_size, | 426 | request.header_size, |
419 | iso_callback, client); | 427 | iso_callback, client); |
420 | if (IS_ERR(client->iso_context)) | 428 | if (IS_ERR(client->iso_context)) |
@@ -519,8 +527,7 @@ static int ioctl_start_iso(struct client *client, void __user *arg) | |||
519 | if (copy_from_user(&request, arg, sizeof request)) | 527 | if (copy_from_user(&request, arg, sizeof request)) |
520 | return -EFAULT; | 528 | return -EFAULT; |
521 | 529 | ||
522 | return fw_iso_context_start(client->iso_context, request.channel, | 530 | return fw_iso_context_start(client->iso_context, request.cycle); |
523 | request.speed, request.cycle); | ||
524 | } | 531 | } |
525 | 532 | ||
526 | static int ioctl_stop_iso(struct client *client, void __user *arg) | 533 | 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 { | |||
134 | struct fw_cdev_create_iso_context { | 134 | struct fw_cdev_create_iso_context { |
135 | __u32 type; | 135 | __u32 type; |
136 | __u32 header_size; | 136 | __u32 header_size; |
137 | __u32 handle; | 137 | __u32 channel; |
138 | __u32 speed; | ||
138 | }; | 139 | }; |
139 | 140 | ||
140 | struct fw_cdev_iso_packet { | 141 | struct fw_cdev_iso_packet { |
@@ -154,8 +155,6 @@ struct fw_cdev_queue_iso { | |||
154 | }; | 155 | }; |
155 | 156 | ||
156 | struct fw_cdev_start_iso { | 157 | struct fw_cdev_start_iso { |
157 | __u32 channel; | ||
158 | __u32 speed; | ||
159 | __s32 cycle; | 158 | __s32 cycle; |
160 | }; | 159 | }; |
161 | 160 | ||
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, | |||
106 | } | 106 | } |
107 | 107 | ||
108 | struct fw_iso_context * | 108 | struct fw_iso_context * |
109 | fw_iso_context_create(struct fw_card *card, int type, size_t header_size, | 109 | fw_iso_context_create(struct fw_card *card, int type, |
110 | int channel, int speed, size_t header_size, | ||
110 | fw_iso_callback_t callback, void *callback_data) | 111 | fw_iso_callback_t callback, void *callback_data) |
111 | { | 112 | { |
112 | struct fw_iso_context *ctx; | 113 | struct fw_iso_context *ctx; |
@@ -117,6 +118,8 @@ fw_iso_context_create(struct fw_card *card, int type, size_t header_size, | |||
117 | 118 | ||
118 | ctx->card = card; | 119 | ctx->card = card; |
119 | ctx->type = type; | 120 | ctx->type = type; |
121 | ctx->channel = channel; | ||
122 | ctx->speed = speed; | ||
120 | ctx->header_size = header_size; | 123 | ctx->header_size = header_size; |
121 | ctx->callback = callback; | 124 | ctx->callback = callback; |
122 | ctx->callback_data = callback_data; | 125 | ctx->callback_data = callback_data; |
@@ -134,12 +137,8 @@ void fw_iso_context_destroy(struct fw_iso_context *ctx) | |||
134 | EXPORT_SYMBOL(fw_iso_context_destroy); | 137 | EXPORT_SYMBOL(fw_iso_context_destroy); |
135 | 138 | ||
136 | int | 139 | int |
137 | fw_iso_context_start(struct fw_iso_context *ctx, | 140 | fw_iso_context_start(struct fw_iso_context *ctx, int cycle) |
138 | int channel, int speed, int cycle) | ||
139 | { | 141 | { |
140 | ctx->channel = channel; | ||
141 | ctx->speed = speed; | ||
142 | |||
143 | return ctx->card->driver->start_iso(ctx, cycle); | 142 | return ctx->card->driver->start_iso(ctx, cycle); |
144 | } | 143 | } |
145 | EXPORT_SYMBOL(fw_iso_context_start); | 144 | 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) | |||
1413 | if (cycle > 0) | 1413 | if (cycle > 0) |
1414 | cycle_match = IT_CONTEXT_CYCLE_MATCH_ENABLE | | 1414 | cycle_match = IT_CONTEXT_CYCLE_MATCH_ENABLE | |
1415 | (cycle & 0x7fff) << 16; | 1415 | (cycle & 0x7fff) << 16; |
1416 | 1416 | ||
1417 | reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 1 << index); | 1417 | reg_write(ohci, OHCI1394_IsoXmitIntEventClear, 1 << index); |
1418 | reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1 << index); | 1418 | reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1 << index); |
1419 | context_run(&ctx->context, cycle_match); | 1419 | context_run(&ctx->context, cycle_match); |
@@ -1638,7 +1638,7 @@ ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base, | |||
1638 | 1638 | ||
1639 | return 0; | 1639 | return 0; |
1640 | } | 1640 | } |
1641 | 1641 | ||
1642 | static int | 1642 | static int |
1643 | ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base, | 1643 | ohci_queue_iso_receive_bufferfill(struct fw_iso_context *base, |
1644 | struct fw_iso_packet *packet, | 1644 | 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 | |||
373 | fw_iso_buffer_destroy(struct fw_iso_buffer *buffer, struct fw_card *card); | 373 | fw_iso_buffer_destroy(struct fw_iso_buffer *buffer, struct fw_card *card); |
374 | 374 | ||
375 | struct fw_iso_context * | 375 | struct fw_iso_context * |
376 | fw_iso_context_create(struct fw_card *card, int type, size_t header_size, | 376 | fw_iso_context_create(struct fw_card *card, int type, |
377 | int channel, int speed, size_t header_size, | ||
377 | fw_iso_callback_t callback, void *callback_data); | 378 | fw_iso_callback_t callback, void *callback_data); |
378 | 379 | ||
379 | void | 380 | void |
@@ -386,8 +387,7 @@ fw_iso_context_queue(struct fw_iso_context *ctx, | |||
386 | unsigned long payload); | 387 | unsigned long payload); |
387 | 388 | ||
388 | int | 389 | int |
389 | fw_iso_context_start(struct fw_iso_context *ctx, | 390 | fw_iso_context_start(struct fw_iso_context *ctx, int cycle); |
390 | int channel, int speed, int cycle); | ||
391 | 391 | ||
392 | int | 392 | int |
393 | fw_iso_context_stop(struct fw_iso_context *ctx); | 393 | fw_iso_context_stop(struct fw_iso_context *ctx); |