summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/firewire/amdtp-stream.c28
-rw-r--r--sound/firewire/amdtp-stream.h3
2 files changed, 15 insertions, 16 deletions
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
index 4584525a7f30..ab9dc7e9ffa4 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
@@ -475,16 +475,15 @@ static inline int queue_in_packet(struct amdtp_stream *s)
}
static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle,
- const __be32 *ctx_header, unsigned int index)
+ const __be32 *ctx_header, __be32 *buffer,
+ unsigned int index)
{
- __be32 *buffer;
unsigned int syt;
unsigned int data_blocks;
unsigned int pcm_frames;
unsigned int payload_length;
struct snd_pcm_substream *pcm;
- buffer = s->buffer.packets[s->packet_index].buffer;
syt = calculate_syt(s, cycle);
data_blocks = calculate_data_blocks(s, syt);
pcm_frames = s->process_data_blocks(s, buffer + 2, data_blocks, &syt);
@@ -522,16 +521,14 @@ static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle,
static int handle_out_packet_without_header(struct amdtp_stream *s,
unsigned int cycle, const __be32 *ctx_header,
- unsigned int index)
+ __be32 *buffer, unsigned int index)
{
- __be32 *buffer;
unsigned int syt;
unsigned int data_blocks;
unsigned int pcm_frames;
unsigned int payload_length;
struct snd_pcm_substream *pcm;
- buffer = s->buffer.packets[s->packet_index].buffer;
syt = calculate_syt(s, cycle);
data_blocks = calculate_data_blocks(s, syt);
pcm_frames = s->process_data_blocks(s, buffer, data_blocks, &syt);
@@ -553,9 +550,9 @@ static int handle_out_packet_without_header(struct amdtp_stream *s,
}
static int handle_in_packet(struct amdtp_stream *s, unsigned int cycle,
- const __be32 *ctx_header, unsigned int index)
+ const __be32 *ctx_header, __be32 *buffer,
+ unsigned int index)
{
- __be32 *buffer;
unsigned int payload_length;
u32 cip_header[2];
unsigned int sph, fmt, fdf, syt;
@@ -573,7 +570,6 @@ static int handle_in_packet(struct amdtp_stream *s, unsigned int cycle,
return -EIO;
}
- buffer = s->buffer.packets[s->packet_index].buffer;
cip_header[0] = be32_to_cpu(buffer[0]);
cip_header[1] = be32_to_cpu(buffer[1]);
@@ -678,17 +674,15 @@ end:
static int handle_in_packet_without_header(struct amdtp_stream *s,
unsigned int cycle, const __be32 *ctx_header,
- unsigned int index)
+ __be32 *buffer, unsigned int index)
{
- __be32 *buffer;
unsigned int payload_length;
unsigned int data_blocks;
struct snd_pcm_substream *pcm;
unsigned int pcm_frames;
payload_length = be32_to_cpu(ctx_header[0]) >> ISO_DATA_LENGTH_SHIFT;
- buffer = s->buffer.packets[s->packet_index].buffer;
- data_blocks = payload_length / sizeof(__be32) / s->data_block_quadlets;
+ data_blocks = payload_length / 4 / s->data_block_quadlets;
trace_amdtp_packet(s, cycle, NULL, payload_length, data_blocks, index);
@@ -753,10 +747,12 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
for (i = 0; i < packets; ++i) {
u32 cycle;
+ __be32 *buffer;
cycle = compute_it_cycle(*ctx_header);
+ buffer = s->buffer.packets[s->packet_index].buffer;
- if (s->handle_packet(s, cycle, ctx_header, i) < 0) {
+ if (s->handle_packet(s, cycle, ctx_header, buffer, i) < 0) {
cancel_stream(s);
return;
}
@@ -783,10 +779,12 @@ static void in_stream_callback(struct fw_iso_context *context, u32 tstamp,
for (i = 0; i < packets; i++) {
u32 cycle;
+ __be32 *buffer;
cycle = compute_cycle_count(ctx_header[1]);
+ buffer = s->buffer.packets[s->packet_index].buffer;
- if (s->handle_packet(s, cycle, ctx_header, i) < 0)
+ if (s->handle_packet(s, cycle, ctx_header, buffer, i) < 0)
break;
ctx_header += s->ctx_data.tx.ctx_header_size / sizeof(*ctx_header);
diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
index d317fdc6ab5f..5aa9683593d2 100644
--- a/sound/firewire/amdtp-stream.h
+++ b/sound/firewire/amdtp-stream.h
@@ -109,7 +109,8 @@ struct amdtp_stream {
int packet_index;
int tag;
int (*handle_packet)(struct amdtp_stream *s, unsigned int cycle,
- const __be32 *ctx_header, unsigned int index);
+ const __be32 *ctx_header, __be32 *buffer,
+ unsigned int index);
union {
struct {
unsigned int ctx_header_size;