summaryrefslogtreecommitdiffstats
path: root/sound/firewire/amdtp-stream.c
diff options
context:
space:
mode:
authorTakashi Sakamoto2019-05-22 16:17:05 +0200
committerTakashi Iwai2019-05-23 12:19:40 +0200
commit8a400b999678996af6ca9434376b2260ec2ea9eb (patch)
tree30dbef54f153064593d5d42f51d7eec80c5c5252 /sound/firewire/amdtp-stream.c
parentALSA: firewire-lib: calculate the length of packet payload in packet handler (diff)
downloadkernel-qcow2-linux-8a400b999678996af6ca9434376b2260ec2ea9eb.tar.gz
kernel-qcow2-linux-8a400b999678996af6ca9434376b2260ec2ea9eb.tar.xz
kernel-qcow2-linux-8a400b999678996af6ca9434376b2260ec2ea9eb.zip
ALSA: firewire-lib: compute pointer to payload buffer in context handler
The value of pointer to payload buffer is computed in each packet handler, however the pointer can be decided before call of packet handler. This commit adds an argument for the pointer to the packet handler to reduce codes to compute for the pointer. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/amdtp-stream.c')
-rw-r--r--sound/firewire/amdtp-stream.c28
1 files changed, 13 insertions, 15 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);