95fc2eaf11dc0f91bcb235a2929b300c39448052
[cascardo/linux.git] / sound / firewire / amdtp.c
1 /*
2  * Audio and Music Data Transmission Protocol (IEC 61883-6) streams
3  * with Common Isochronous Packet (IEC 61883-1) headers
4  *
5  * Copyright (c) Clemens Ladisch <clemens@ladisch.de>
6  * Licensed under the terms of the GNU General Public License, version 2.
7  */
8
9 #include <linux/device.h>
10 #include <linux/err.h>
11 #include <linux/firewire.h>
12 #include <linux/module.h>
13 #include <linux/slab.h>
14 #include <linux/sched.h>
15 #include <sound/pcm.h>
16 #include <sound/pcm_params.h>
17 #include <sound/rawmidi.h>
18 #include "amdtp.h"
19
20 #define TICKS_PER_CYCLE         3072
21 #define CYCLES_PER_SECOND       8000
22 #define TICKS_PER_SECOND        (TICKS_PER_CYCLE * CYCLES_PER_SECOND)
23
24 #define TRANSFER_DELAY_TICKS    0x2e00 /* 479.17 µs */
25
26 /* isochronous header parameters */
27 #define ISO_DATA_LENGTH_SHIFT   16
28 #define TAG_CIP                 1
29
30 /* common isochronous packet header parameters */
31 #define CIP_EOH                 (1u << 31)
32 #define CIP_EOH_MASK            0x80000000
33 #define CIP_FMT_AM              (0x10 << 24)
34 #define CIP_FMT_MASK            0x3f000000
35 #define CIP_SYT_MASK            0x0000ffff
36 #define CIP_SYT_NO_INFO         0xffff
37 #define CIP_FDF_MASK            0x00ff0000
38 #define CIP_FDF_SFC_SHIFT       16
39
40 /*
41  * Audio and Music transfer protocol specific parameters
42  * only "Clock-based rate control mode" is supported
43  */
44 #define AMDTP_FDF_AM824         (0 << (CIP_FDF_SFC_SHIFT + 3))
45 #define AMDTP_FDF_NO_DATA       0xff
46 #define AMDTP_DBS_MASK          0x00ff0000
47 #define AMDTP_DBS_SHIFT         16
48 #define AMDTP_DBC_MASK          0x000000ff
49
50 /* TODO: make these configurable */
51 #define INTERRUPT_INTERVAL      16
52 #define QUEUE_LENGTH            48
53
54 #define IN_PACKET_HEADER_SIZE   4
55 #define OUT_PACKET_HEADER_SIZE  0
56
57 static void pcm_period_tasklet(unsigned long data);
58
59 /**
60  * amdtp_stream_init - initialize an AMDTP stream structure
61  * @s: the AMDTP stream to initialize
62  * @unit: the target of the stream
63  * @dir: the direction of stream
64  * @flags: the packet transmission method to use
65  */
66 int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
67                       enum amdtp_stream_direction dir, enum cip_flags flags)
68 {
69         s->unit = fw_unit_get(unit);
70         s->direction = dir;
71         s->flags = flags;
72         s->context = ERR_PTR(-1);
73         mutex_init(&s->mutex);
74         tasklet_init(&s->period_tasklet, pcm_period_tasklet, (unsigned long)s);
75         s->packet_index = 0;
76
77         init_waitqueue_head(&s->callback_wait);
78         s->callbacked = false;
79         s->sync_slave = NULL;
80
81         s->rx_blocks_for_midi = UINT_MAX;
82
83         return 0;
84 }
85 EXPORT_SYMBOL(amdtp_stream_init);
86
87 /**
88  * amdtp_stream_destroy - free stream resources
89  * @s: the AMDTP stream to destroy
90  */
91 void amdtp_stream_destroy(struct amdtp_stream *s)
92 {
93         WARN_ON(amdtp_stream_running(s));
94         mutex_destroy(&s->mutex);
95         fw_unit_put(s->unit);
96 }
97 EXPORT_SYMBOL(amdtp_stream_destroy);
98
99 const unsigned int amdtp_syt_intervals[CIP_SFC_COUNT] = {
100         [CIP_SFC_32000]  =  8,
101         [CIP_SFC_44100]  =  8,
102         [CIP_SFC_48000]  =  8,
103         [CIP_SFC_88200]  = 16,
104         [CIP_SFC_96000]  = 16,
105         [CIP_SFC_176400] = 32,
106         [CIP_SFC_192000] = 32,
107 };
108 EXPORT_SYMBOL(amdtp_syt_intervals);
109
110 const unsigned int amdtp_rate_table[CIP_SFC_COUNT] = {
111         [CIP_SFC_32000]  =  32000,
112         [CIP_SFC_44100]  =  44100,
113         [CIP_SFC_48000]  =  48000,
114         [CIP_SFC_88200]  =  88200,
115         [CIP_SFC_96000]  =  96000,
116         [CIP_SFC_176400] = 176400,
117         [CIP_SFC_192000] = 192000,
118 };
119 EXPORT_SYMBOL(amdtp_rate_table);
120
121 /**
122  * amdtp_stream_add_pcm_hw_constraints - add hw constraints for PCM substream
123  * @s:          the AMDTP stream, which must be initialized.
124  * @runtime:    the PCM substream runtime
125  */
126 int amdtp_stream_add_pcm_hw_constraints(struct amdtp_stream *s,
127                                         struct snd_pcm_runtime *runtime)
128 {
129         int err;
130
131         /* AM824 in IEC 61883-6 can deliver 24bit data */
132         err = snd_pcm_hw_constraint_msbits(runtime, 0, 32, 24);
133         if (err < 0)
134                 goto end;
135
136         /*
137          * Currently firewire-lib processes 16 packets in one software
138          * interrupt callback. This equals to 2msec but actually the
139          * interval of the interrupts has a jitter.
140          * Additionally, even if adding a constraint to fit period size to
141          * 2msec, actual calculated frames per period doesn't equal to 2msec,
142          * depending on sampling rate.
143          * Anyway, the interval to call snd_pcm_period_elapsed() cannot 2msec.
144          * Here let us use 5msec for safe period interrupt.
145          */
146         err = snd_pcm_hw_constraint_minmax(runtime,
147                                            SNDRV_PCM_HW_PARAM_PERIOD_TIME,
148                                            5000, UINT_MAX);
149         if (err < 0)
150                 goto end;
151
152         /* Non-Blocking stream has no more constraints */
153         if (!(s->flags & CIP_BLOCKING))
154                 goto end;
155
156         /*
157          * One AMDTP packet can include some frames. In blocking mode, the
158          * number equals to SYT_INTERVAL. So the number is 8, 16 or 32,
159          * depending on its sampling rate. For accurate period interrupt, it's
160          * preferrable to aligh period/buffer sizes to current SYT_INTERVAL.
161          *
162          * TODO: These constraints can be improved with propper rules.
163          * Currently apply LCM of SYT_INTEVALs.
164          */
165         err = snd_pcm_hw_constraint_step(runtime, 0,
166                                          SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 32);
167         if (err < 0)
168                 goto end;
169         err = snd_pcm_hw_constraint_step(runtime, 0,
170                                          SNDRV_PCM_HW_PARAM_BUFFER_SIZE, 32);
171 end:
172         return err;
173 }
174 EXPORT_SYMBOL(amdtp_stream_add_pcm_hw_constraints);
175
176 /**
177  * amdtp_stream_set_parameters - set stream parameters
178  * @s: the AMDTP stream to configure
179  * @rate: the sample rate
180  * @pcm_channels: the number of PCM samples in each data block, to be encoded
181  *                as AM824 multi-bit linear audio
182  * @midi_ports: the number of MIDI ports (i.e., MPX-MIDI Data Channels)
183  *
184  * The parameters must be set before the stream is started, and must not be
185  * changed while the stream is running.
186  */
187 void amdtp_stream_set_parameters(struct amdtp_stream *s,
188                                  unsigned int rate,
189                                  unsigned int pcm_channels,
190                                  unsigned int midi_ports)
191 {
192         unsigned int i, sfc, midi_channels;
193
194         midi_channels = DIV_ROUND_UP(midi_ports, 8);
195
196         if (WARN_ON(amdtp_stream_running(s)) |
197             WARN_ON(pcm_channels > AMDTP_MAX_CHANNELS_FOR_PCM) |
198             WARN_ON(midi_channels > AMDTP_MAX_CHANNELS_FOR_MIDI))
199                 return;
200
201         for (sfc = 0; sfc < ARRAY_SIZE(amdtp_rate_table); ++sfc)
202                 if (amdtp_rate_table[sfc] == rate)
203                         goto sfc_found;
204         WARN_ON(1);
205         return;
206
207 sfc_found:
208         s->pcm_channels = pcm_channels;
209         s->sfc = sfc;
210         s->data_block_quadlets = s->pcm_channels + midi_channels;
211         s->midi_ports = midi_ports;
212
213         s->syt_interval = amdtp_syt_intervals[sfc];
214
215         /* default buffering in the device */
216         s->transfer_delay = TRANSFER_DELAY_TICKS - TICKS_PER_CYCLE;
217         if (s->flags & CIP_BLOCKING)
218                 /* additional buffering needed to adjust for no-data packets */
219                 s->transfer_delay += TICKS_PER_SECOND * s->syt_interval / rate;
220
221         /* init the position map for PCM and MIDI channels */
222         for (i = 0; i < pcm_channels; i++)
223                 s->pcm_positions[i] = i;
224         s->midi_position = s->pcm_channels;
225 }
226 EXPORT_SYMBOL(amdtp_stream_set_parameters);
227
228 /**
229  * amdtp_stream_get_max_payload - get the stream's packet size
230  * @s: the AMDTP stream
231  *
232  * This function must not be called before the stream has been configured
233  * with amdtp_stream_set_parameters().
234  */
235 unsigned int amdtp_stream_get_max_payload(struct amdtp_stream *s)
236 {
237         return 8 + s->syt_interval * s->data_block_quadlets * 4;
238 }
239 EXPORT_SYMBOL(amdtp_stream_get_max_payload);
240
241 static void amdtp_write_s16(struct amdtp_stream *s,
242                             struct snd_pcm_substream *pcm,
243                             __be32 *buffer, unsigned int frames);
244 static void amdtp_write_s32(struct amdtp_stream *s,
245                             struct snd_pcm_substream *pcm,
246                             __be32 *buffer, unsigned int frames);
247 static void amdtp_read_s32(struct amdtp_stream *s,
248                            struct snd_pcm_substream *pcm,
249                            __be32 *buffer, unsigned int frames);
250
251 /**
252  * amdtp_stream_set_pcm_format - set the PCM format
253  * @s: the AMDTP stream to configure
254  * @format: the format of the ALSA PCM device
255  *
256  * The sample format must be set after the other paramters (rate/PCM channels/
257  * MIDI) and before the stream is started, and must not be changed while the
258  * stream is running.
259  */
260 void amdtp_stream_set_pcm_format(struct amdtp_stream *s,
261                                  snd_pcm_format_t format)
262 {
263         if (WARN_ON(amdtp_stream_pcm_running(s)))
264                 return;
265
266         switch (format) {
267         default:
268                 WARN_ON(1);
269                 /* fall through */
270         case SNDRV_PCM_FORMAT_S16:
271                 if (s->direction == AMDTP_OUT_STREAM) {
272                         s->transfer_samples = amdtp_write_s16;
273                         break;
274                 }
275                 WARN_ON(1);
276                 /* fall through */
277         case SNDRV_PCM_FORMAT_S32:
278                 if (s->direction == AMDTP_OUT_STREAM)
279                         s->transfer_samples = amdtp_write_s32;
280                 else
281                         s->transfer_samples = amdtp_read_s32;
282                 break;
283         }
284 }
285 EXPORT_SYMBOL(amdtp_stream_set_pcm_format);
286
287 /**
288  * amdtp_stream_pcm_prepare - prepare PCM device for running
289  * @s: the AMDTP stream
290  *
291  * This function should be called from the PCM device's .prepare callback.
292  */
293 void amdtp_stream_pcm_prepare(struct amdtp_stream *s)
294 {
295         tasklet_kill(&s->period_tasklet);
296         s->pcm_buffer_pointer = 0;
297         s->pcm_period_pointer = 0;
298         s->pointer_flush = true;
299 }
300 EXPORT_SYMBOL(amdtp_stream_pcm_prepare);
301
302 static unsigned int calculate_data_blocks(struct amdtp_stream *s)
303 {
304         unsigned int phase, data_blocks;
305
306         if (s->flags & CIP_BLOCKING)
307                 data_blocks = s->syt_interval;
308         else if (!cip_sfc_is_base_44100(s->sfc)) {
309                 /* Sample_rate / 8000 is an integer, and precomputed. */
310                 data_blocks = s->data_block_state;
311         } else {
312                 phase = s->data_block_state;
313
314                 /*
315                  * This calculates the number of data blocks per packet so that
316                  * 1) the overall rate is correct and exactly synchronized to
317                  *    the bus clock, and
318                  * 2) packets with a rounded-up number of blocks occur as early
319                  *    as possible in the sequence (to prevent underruns of the
320                  *    device's buffer).
321                  */
322                 if (s->sfc == CIP_SFC_44100)
323                         /* 6 6 5 6 5 6 5 ... */
324                         data_blocks = 5 + ((phase & 1) ^
325                                            (phase == 0 || phase >= 40));
326                 else
327                         /* 12 11 11 11 11 ... or 23 22 22 22 22 ... */
328                         data_blocks = 11 * (s->sfc >> 1) + (phase == 0);
329                 if (++phase >= (80 >> (s->sfc >> 1)))
330                         phase = 0;
331                 s->data_block_state = phase;
332         }
333
334         return data_blocks;
335 }
336
337 static unsigned int calculate_syt(struct amdtp_stream *s,
338                                   unsigned int cycle)
339 {
340         unsigned int syt_offset, phase, index, syt;
341
342         if (s->last_syt_offset < TICKS_PER_CYCLE) {
343                 if (!cip_sfc_is_base_44100(s->sfc))
344                         syt_offset = s->last_syt_offset + s->syt_offset_state;
345                 else {
346                 /*
347                  * The time, in ticks, of the n'th SYT_INTERVAL sample is:
348                  *   n * SYT_INTERVAL * 24576000 / sample_rate
349                  * Modulo TICKS_PER_CYCLE, the difference between successive
350                  * elements is about 1386.23.  Rounding the results of this
351                  * formula to the SYT precision results in a sequence of
352                  * differences that begins with:
353                  *   1386 1386 1387 1386 1386 1386 1387 1386 1386 1386 1387 ...
354                  * This code generates _exactly_ the same sequence.
355                  */
356                         phase = s->syt_offset_state;
357                         index = phase % 13;
358                         syt_offset = s->last_syt_offset;
359                         syt_offset += 1386 + ((index && !(index & 3)) ||
360                                               phase == 146);
361                         if (++phase >= 147)
362                                 phase = 0;
363                         s->syt_offset_state = phase;
364                 }
365         } else
366                 syt_offset = s->last_syt_offset - TICKS_PER_CYCLE;
367         s->last_syt_offset = syt_offset;
368
369         if (syt_offset < TICKS_PER_CYCLE) {
370                 syt_offset += s->transfer_delay;
371                 syt = (cycle + syt_offset / TICKS_PER_CYCLE) << 12;
372                 syt += syt_offset % TICKS_PER_CYCLE;
373
374                 return syt & CIP_SYT_MASK;
375         } else {
376                 return CIP_SYT_NO_INFO;
377         }
378 }
379
380 static void amdtp_write_s32(struct amdtp_stream *s,
381                             struct snd_pcm_substream *pcm,
382                             __be32 *buffer, unsigned int frames)
383 {
384         struct snd_pcm_runtime *runtime = pcm->runtime;
385         unsigned int channels, remaining_frames, i, c;
386         const u32 *src;
387
388         channels = s->pcm_channels;
389         src = (void *)runtime->dma_area +
390                         frames_to_bytes(runtime, s->pcm_buffer_pointer);
391         remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer;
392
393         for (i = 0; i < frames; ++i) {
394                 for (c = 0; c < channels; ++c) {
395                         buffer[s->pcm_positions[c]] =
396                                         cpu_to_be32((*src >> 8) | 0x40000000);
397                         src++;
398                 }
399                 buffer += s->data_block_quadlets;
400                 if (--remaining_frames == 0)
401                         src = (void *)runtime->dma_area;
402         }
403 }
404
405 static void amdtp_write_s16(struct amdtp_stream *s,
406                             struct snd_pcm_substream *pcm,
407                             __be32 *buffer, unsigned int frames)
408 {
409         struct snd_pcm_runtime *runtime = pcm->runtime;
410         unsigned int channels, remaining_frames, i, c;
411         const u16 *src;
412
413         channels = s->pcm_channels;
414         src = (void *)runtime->dma_area +
415                         frames_to_bytes(runtime, s->pcm_buffer_pointer);
416         remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer;
417
418         for (i = 0; i < frames; ++i) {
419                 for (c = 0; c < channels; ++c) {
420                         buffer[s->pcm_positions[c]] =
421                                         cpu_to_be32((*src << 8) | 0x42000000);
422                         src++;
423                 }
424                 buffer += s->data_block_quadlets;
425                 if (--remaining_frames == 0)
426                         src = (void *)runtime->dma_area;
427         }
428 }
429
430 static void amdtp_read_s32(struct amdtp_stream *s,
431                            struct snd_pcm_substream *pcm,
432                            __be32 *buffer, unsigned int frames)
433 {
434         struct snd_pcm_runtime *runtime = pcm->runtime;
435         unsigned int channels, remaining_frames, i, c;
436         u32 *dst;
437
438         channels = s->pcm_channels;
439         dst  = (void *)runtime->dma_area +
440                         frames_to_bytes(runtime, s->pcm_buffer_pointer);
441         remaining_frames = runtime->buffer_size - s->pcm_buffer_pointer;
442
443         for (i = 0; i < frames; ++i) {
444                 for (c = 0; c < channels; ++c) {
445                         *dst = be32_to_cpu(buffer[s->pcm_positions[c]]) << 8;
446                         dst++;
447                 }
448                 buffer += s->data_block_quadlets;
449                 if (--remaining_frames == 0)
450                         dst = (void *)runtime->dma_area;
451         }
452 }
453
454 static void amdtp_fill_pcm_silence(struct amdtp_stream *s,
455                                    __be32 *buffer, unsigned int frames)
456 {
457         unsigned int i, c;
458
459         for (i = 0; i < frames; ++i) {
460                 for (c = 0; c < s->pcm_channels; ++c)
461                         buffer[s->pcm_positions[c]] = cpu_to_be32(0x40000000);
462                 buffer += s->data_block_quadlets;
463         }
464 }
465
466 static void amdtp_fill_midi(struct amdtp_stream *s,
467                             __be32 *buffer, unsigned int frames)
468 {
469         unsigned int f, port;
470         u8 *b;
471
472         for (f = 0; f < frames; f++) {
473                 buffer[s->midi_position] = 0;
474                 b = (u8 *)&buffer[s->midi_position];
475
476                 port = (s->data_block_counter + f) % 8;
477                 if ((f >= s->rx_blocks_for_midi) ||
478                     (s->midi[port] == NULL) ||
479                     (snd_rawmidi_transmit(s->midi[port], b + 1, 1) <= 0))
480                         b[0] = 0x80;
481                 else
482                         b[0] = 0x81;
483
484                 buffer += s->data_block_quadlets;
485         }
486 }
487
488 static void amdtp_pull_midi(struct amdtp_stream *s,
489                             __be32 *buffer, unsigned int frames)
490 {
491         unsigned int f, port;
492         int len;
493         u8 *b;
494
495         for (f = 0; f < frames; f++) {
496                 port = (s->data_block_counter + f) % 8;
497                 b = (u8 *)&buffer[s->midi_position];
498
499                 len = b[0] - 0x80;
500                 if ((1 <= len) &&  (len <= 3) && (s->midi[port]))
501                         snd_rawmidi_receive(s->midi[port], b + 1, len);
502
503                 buffer += s->data_block_quadlets;
504         }
505 }
506
507 static void update_pcm_pointers(struct amdtp_stream *s,
508                                 struct snd_pcm_substream *pcm,
509                                 unsigned int frames)
510 {
511         unsigned int ptr;
512
513         /*
514          * In IEC 61883-6, one data block represents one event. In ALSA, one
515          * event equals to one PCM frame. But Dice has a quirk to transfer
516          * two PCM frames in one data block.
517          */
518         if (s->double_pcm_frames)
519                 frames *= 2;
520
521         ptr = s->pcm_buffer_pointer + frames;
522         if (ptr >= pcm->runtime->buffer_size)
523                 ptr -= pcm->runtime->buffer_size;
524         ACCESS_ONCE(s->pcm_buffer_pointer) = ptr;
525
526         s->pcm_period_pointer += frames;
527         if (s->pcm_period_pointer >= pcm->runtime->period_size) {
528                 s->pcm_period_pointer -= pcm->runtime->period_size;
529                 s->pointer_flush = false;
530                 tasklet_hi_schedule(&s->period_tasklet);
531         }
532 }
533
534 static void pcm_period_tasklet(unsigned long data)
535 {
536         struct amdtp_stream *s = (void *)data;
537         struct snd_pcm_substream *pcm = ACCESS_ONCE(s->pcm);
538
539         if (pcm)
540                 snd_pcm_period_elapsed(pcm);
541 }
542
543 static int queue_packet(struct amdtp_stream *s,
544                         unsigned int header_length,
545                         unsigned int payload_length, bool skip)
546 {
547         struct fw_iso_packet p = {0};
548         int err = 0;
549
550         if (IS_ERR(s->context))
551                 goto end;
552
553         p.interrupt = IS_ALIGNED(s->packet_index + 1, INTERRUPT_INTERVAL);
554         p.tag = TAG_CIP;
555         p.header_length = header_length;
556         p.payload_length = (!skip) ? payload_length : 0;
557         p.skip = skip;
558         err = fw_iso_context_queue(s->context, &p, &s->buffer.iso_buffer,
559                                    s->buffer.packets[s->packet_index].offset);
560         if (err < 0) {
561                 dev_err(&s->unit->device, "queueing error: %d\n", err);
562                 goto end;
563         }
564
565         if (++s->packet_index >= QUEUE_LENGTH)
566                 s->packet_index = 0;
567 end:
568         return err;
569 }
570
571 static inline int queue_out_packet(struct amdtp_stream *s,
572                                    unsigned int payload_length, bool skip)
573 {
574         return queue_packet(s, OUT_PACKET_HEADER_SIZE,
575                             payload_length, skip);
576 }
577
578 static inline int queue_in_packet(struct amdtp_stream *s)
579 {
580         return queue_packet(s, IN_PACKET_HEADER_SIZE,
581                             amdtp_stream_get_max_payload(s), false);
582 }
583
584 static void handle_out_packet(struct amdtp_stream *s, unsigned int syt)
585 {
586         __be32 *buffer;
587         unsigned int data_blocks, payload_length;
588         struct snd_pcm_substream *pcm;
589
590         if (s->packet_index < 0)
591                 return;
592
593         /* this module generate empty packet for 'no data' */
594         if (!(s->flags & CIP_BLOCKING) || (syt != CIP_SYT_NO_INFO))
595                 data_blocks = calculate_data_blocks(s);
596         else
597                 data_blocks = 0;
598
599         buffer = s->buffer.packets[s->packet_index].buffer;
600         buffer[0] = cpu_to_be32(ACCESS_ONCE(s->source_node_id_field) |
601                                 (s->data_block_quadlets << AMDTP_DBS_SHIFT) |
602                                 s->data_block_counter);
603         buffer[1] = cpu_to_be32(CIP_EOH | CIP_FMT_AM | AMDTP_FDF_AM824 |
604                                 (s->sfc << CIP_FDF_SFC_SHIFT) | syt);
605         buffer += 2;
606
607         pcm = ACCESS_ONCE(s->pcm);
608         if (pcm)
609                 s->transfer_samples(s, pcm, buffer, data_blocks);
610         else
611                 amdtp_fill_pcm_silence(s, buffer, data_blocks);
612         if (s->midi_ports)
613                 amdtp_fill_midi(s, buffer, data_blocks);
614
615         s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
616
617         payload_length = 8 + data_blocks * 4 * s->data_block_quadlets;
618         if (queue_out_packet(s, payload_length, false) < 0) {
619                 s->packet_index = -1;
620                 amdtp_stream_pcm_abort(s);
621                 return;
622         }
623
624         if (pcm)
625                 update_pcm_pointers(s, pcm, data_blocks);
626 }
627
628 static void handle_in_packet(struct amdtp_stream *s,
629                              unsigned int payload_quadlets,
630                              __be32 *buffer)
631 {
632         u32 cip_header[2];
633         unsigned int data_blocks, data_block_quadlets, data_block_counter,
634                      dbc_interval;
635         struct snd_pcm_substream *pcm = NULL;
636         bool lost;
637
638         cip_header[0] = be32_to_cpu(buffer[0]);
639         cip_header[1] = be32_to_cpu(buffer[1]);
640
641         /*
642          * This module supports 'Two-quadlet CIP header with SYT field'.
643          * For convenience, also check FMT field is AM824 or not.
644          */
645         if (((cip_header[0] & CIP_EOH_MASK) == CIP_EOH) ||
646             ((cip_header[1] & CIP_EOH_MASK) != CIP_EOH) ||
647             ((cip_header[1] & CIP_FMT_MASK) != CIP_FMT_AM)) {
648                 dev_info_ratelimited(&s->unit->device,
649                                 "Invalid CIP header for AMDTP: %08X:%08X\n",
650                                 cip_header[0], cip_header[1]);
651                 goto end;
652         }
653
654         /* Calculate data blocks */
655         if (payload_quadlets < 3 ||
656             ((cip_header[1] & CIP_FDF_MASK) ==
657                                 (AMDTP_FDF_NO_DATA << CIP_FDF_SFC_SHIFT))) {
658                 data_blocks = 0;
659         } else {
660                 data_block_quadlets =
661                         (cip_header[0] & AMDTP_DBS_MASK) >> AMDTP_DBS_SHIFT;
662                 /* avoid division by zero */
663                 if (data_block_quadlets == 0) {
664                         dev_info_ratelimited(&s->unit->device,
665                                 "Detect invalid value in dbs field: %08X\n",
666                                 cip_header[0]);
667                         goto err;
668                 }
669                 if (s->flags & CIP_WRONG_DBS)
670                         data_block_quadlets = s->data_block_quadlets;
671
672                 data_blocks = (payload_quadlets - 2) / data_block_quadlets;
673         }
674
675         /* Check data block counter continuity */
676         data_block_counter = cip_header[0] & AMDTP_DBC_MASK;
677         if (data_blocks == 0 && (s->flags & CIP_EMPTY_HAS_WRONG_DBC) &&
678             s->data_block_counter != UINT_MAX)
679                 data_block_counter = s->data_block_counter;
680
681         if (((s->flags & CIP_SKIP_DBC_ZERO_CHECK) && data_block_counter == 0) ||
682             (s->data_block_counter == UINT_MAX)) {
683                 lost = false;
684         } else if (!(s->flags & CIP_DBC_IS_END_EVENT)) {
685                 lost = data_block_counter != s->data_block_counter;
686         } else {
687                 if ((data_blocks > 0) && (s->tx_dbc_interval > 0))
688                         dbc_interval = s->tx_dbc_interval;
689                 else
690                         dbc_interval = data_blocks;
691
692                 lost = data_block_counter !=
693                        ((s->data_block_counter + dbc_interval) & 0xff);
694         }
695
696         if (lost) {
697                 dev_info(&s->unit->device,
698                          "Detect discontinuity of CIP: %02X %02X\n",
699                          s->data_block_counter, data_block_counter);
700                 goto err;
701         }
702
703         if (data_blocks > 0) {
704                 buffer += 2;
705
706                 pcm = ACCESS_ONCE(s->pcm);
707                 if (pcm)
708                         s->transfer_samples(s, pcm, buffer, data_blocks);
709
710                 if (s->midi_ports)
711                         amdtp_pull_midi(s, buffer, data_blocks);
712         }
713
714         if (s->flags & CIP_DBC_IS_END_EVENT)
715                 s->data_block_counter = data_block_counter;
716         else
717                 s->data_block_counter =
718                                 (data_block_counter + data_blocks) & 0xff;
719 end:
720         if (queue_in_packet(s) < 0)
721                 goto err;
722
723         if (pcm)
724                 update_pcm_pointers(s, pcm, data_blocks);
725
726         return;
727 err:
728         s->packet_index = -1;
729         amdtp_stream_pcm_abort(s);
730 }
731
732 static void out_stream_callback(struct fw_iso_context *context, u32 cycle,
733                                 size_t header_length, void *header,
734                                 void *private_data)
735 {
736         struct amdtp_stream *s = private_data;
737         unsigned int i, syt, packets = header_length / 4;
738
739         /*
740          * Compute the cycle of the last queued packet.
741          * (We need only the four lowest bits for the SYT, so we can ignore
742          * that bits 0-11 must wrap around at 3072.)
743          */
744         cycle += QUEUE_LENGTH - packets;
745
746         for (i = 0; i < packets; ++i) {
747                 syt = calculate_syt(s, ++cycle);
748                 handle_out_packet(s, syt);
749         }
750         fw_iso_context_queue_flush(s->context);
751 }
752
753 static void in_stream_callback(struct fw_iso_context *context, u32 cycle,
754                                size_t header_length, void *header,
755                                void *private_data)
756 {
757         struct amdtp_stream *s = private_data;
758         unsigned int p, syt, packets, payload_quadlets;
759         __be32 *buffer, *headers = header;
760
761         /* The number of packets in buffer */
762         packets = header_length / IN_PACKET_HEADER_SIZE;
763
764         for (p = 0; p < packets; p++) {
765                 if (s->packet_index < 0)
766                         break;
767
768                 buffer = s->buffer.packets[s->packet_index].buffer;
769
770                 /* Process sync slave stream */
771                 if (s->sync_slave && s->sync_slave->callbacked) {
772                         syt = be32_to_cpu(buffer[1]) & CIP_SYT_MASK;
773                         handle_out_packet(s->sync_slave, syt);
774                 }
775
776                 /* The number of quadlets in this packet */
777                 payload_quadlets =
778                         (be32_to_cpu(headers[p]) >> ISO_DATA_LENGTH_SHIFT) / 4;
779                 handle_in_packet(s, payload_quadlets, buffer);
780         }
781
782         /* Queueing error or detecting discontinuity */
783         if (s->packet_index < 0) {
784                 /* Abort sync slave. */
785                 if (s->sync_slave) {
786                         s->sync_slave->packet_index = -1;
787                         amdtp_stream_pcm_abort(s->sync_slave);
788                 }
789                 return;
790         }
791
792         /* when sync to device, flush the packets for slave stream */
793         if (s->sync_slave && s->sync_slave->callbacked)
794                 fw_iso_context_queue_flush(s->sync_slave->context);
795
796         fw_iso_context_queue_flush(s->context);
797 }
798
799 /* processing is done by master callback */
800 static void slave_stream_callback(struct fw_iso_context *context, u32 cycle,
801                                   size_t header_length, void *header,
802                                   void *private_data)
803 {
804         return;
805 }
806
807 /* this is executed one time */
808 static void amdtp_stream_first_callback(struct fw_iso_context *context,
809                                         u32 cycle, size_t header_length,
810                                         void *header, void *private_data)
811 {
812         struct amdtp_stream *s = private_data;
813
814         /*
815          * For in-stream, first packet has come.
816          * For out-stream, prepared to transmit first packet
817          */
818         s->callbacked = true;
819         wake_up(&s->callback_wait);
820
821         if (s->direction == AMDTP_IN_STREAM)
822                 context->callback.sc = in_stream_callback;
823         else if ((s->flags & CIP_BLOCKING) && (s->flags & CIP_SYNC_TO_DEVICE))
824                 context->callback.sc = slave_stream_callback;
825         else
826                 context->callback.sc = out_stream_callback;
827
828         context->callback.sc(context, cycle, header_length, header, s);
829 }
830
831 /**
832  * amdtp_stream_start - start transferring packets
833  * @s: the AMDTP stream to start
834  * @channel: the isochronous channel on the bus
835  * @speed: firewire speed code
836  *
837  * The stream cannot be started until it has been configured with
838  * amdtp_stream_set_parameters() and it must be started before any PCM or MIDI
839  * device can be started.
840  */
841 int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed)
842 {
843         static const struct {
844                 unsigned int data_block;
845                 unsigned int syt_offset;
846         } initial_state[] = {
847                 [CIP_SFC_32000]  = {  4, 3072 },
848                 [CIP_SFC_48000]  = {  6, 1024 },
849                 [CIP_SFC_96000]  = { 12, 1024 },
850                 [CIP_SFC_192000] = { 24, 1024 },
851                 [CIP_SFC_44100]  = {  0,   67 },
852                 [CIP_SFC_88200]  = {  0,   67 },
853                 [CIP_SFC_176400] = {  0,   67 },
854         };
855         unsigned int header_size;
856         enum dma_data_direction dir;
857         int type, tag, err;
858
859         mutex_lock(&s->mutex);
860
861         if (WARN_ON(amdtp_stream_running(s) ||
862                     (s->data_block_quadlets < 1))) {
863                 err = -EBADFD;
864                 goto err_unlock;
865         }
866
867         if (s->direction == AMDTP_IN_STREAM &&
868             s->flags & CIP_SKIP_INIT_DBC_CHECK)
869                 s->data_block_counter = UINT_MAX;
870         else
871                 s->data_block_counter = 0;
872         s->data_block_state = initial_state[s->sfc].data_block;
873         s->syt_offset_state = initial_state[s->sfc].syt_offset;
874         s->last_syt_offset = TICKS_PER_CYCLE;
875
876         /* initialize packet buffer */
877         if (s->direction == AMDTP_IN_STREAM) {
878                 dir = DMA_FROM_DEVICE;
879                 type = FW_ISO_CONTEXT_RECEIVE;
880                 header_size = IN_PACKET_HEADER_SIZE;
881         } else {
882                 dir = DMA_TO_DEVICE;
883                 type = FW_ISO_CONTEXT_TRANSMIT;
884                 header_size = OUT_PACKET_HEADER_SIZE;
885         }
886         err = iso_packets_buffer_init(&s->buffer, s->unit, QUEUE_LENGTH,
887                                       amdtp_stream_get_max_payload(s), dir);
888         if (err < 0)
889                 goto err_unlock;
890
891         s->context = fw_iso_context_create(fw_parent_device(s->unit)->card,
892                                            type, channel, speed, header_size,
893                                            amdtp_stream_first_callback, s);
894         if (IS_ERR(s->context)) {
895                 err = PTR_ERR(s->context);
896                 if (err == -EBUSY)
897                         dev_err(&s->unit->device,
898                                 "no free stream on this controller\n");
899                 goto err_buffer;
900         }
901
902         amdtp_stream_update(s);
903
904         s->packet_index = 0;
905         do {
906                 if (s->direction == AMDTP_IN_STREAM)
907                         err = queue_in_packet(s);
908                 else
909                         err = queue_out_packet(s, 0, true);
910                 if (err < 0)
911                         goto err_context;
912         } while (s->packet_index > 0);
913
914         /* NOTE: TAG1 matches CIP. This just affects in stream. */
915         tag = FW_ISO_CONTEXT_MATCH_TAG1;
916         if (s->flags & CIP_EMPTY_WITH_TAG0)
917                 tag |= FW_ISO_CONTEXT_MATCH_TAG0;
918
919         s->callbacked = false;
920         err = fw_iso_context_start(s->context, -1, 0, tag);
921         if (err < 0)
922                 goto err_context;
923
924         mutex_unlock(&s->mutex);
925
926         return 0;
927
928 err_context:
929         fw_iso_context_destroy(s->context);
930         s->context = ERR_PTR(-1);
931 err_buffer:
932         iso_packets_buffer_destroy(&s->buffer, s->unit);
933 err_unlock:
934         mutex_unlock(&s->mutex);
935
936         return err;
937 }
938 EXPORT_SYMBOL(amdtp_stream_start);
939
940 /**
941  * amdtp_stream_pcm_pointer - get the PCM buffer position
942  * @s: the AMDTP stream that transports the PCM data
943  *
944  * Returns the current buffer position, in frames.
945  */
946 unsigned long amdtp_stream_pcm_pointer(struct amdtp_stream *s)
947 {
948         /* this optimization is allowed to be racy */
949         if (s->pointer_flush && amdtp_stream_running(s))
950                 fw_iso_context_flush_completions(s->context);
951         else
952                 s->pointer_flush = true;
953
954         return ACCESS_ONCE(s->pcm_buffer_pointer);
955 }
956 EXPORT_SYMBOL(amdtp_stream_pcm_pointer);
957
958 /**
959  * amdtp_stream_update - update the stream after a bus reset
960  * @s: the AMDTP stream
961  */
962 void amdtp_stream_update(struct amdtp_stream *s)
963 {
964         ACCESS_ONCE(s->source_node_id_field) =
965                 (fw_parent_device(s->unit)->card->node_id & 0x3f) << 24;
966 }
967 EXPORT_SYMBOL(amdtp_stream_update);
968
969 /**
970  * amdtp_stream_stop - stop sending packets
971  * @s: the AMDTP stream to stop
972  *
973  * All PCM and MIDI devices of the stream must be stopped before the stream
974  * itself can be stopped.
975  */
976 void amdtp_stream_stop(struct amdtp_stream *s)
977 {
978         mutex_lock(&s->mutex);
979
980         if (!amdtp_stream_running(s)) {
981                 mutex_unlock(&s->mutex);
982                 return;
983         }
984
985         tasklet_kill(&s->period_tasklet);
986         fw_iso_context_stop(s->context);
987         fw_iso_context_destroy(s->context);
988         s->context = ERR_PTR(-1);
989         iso_packets_buffer_destroy(&s->buffer, s->unit);
990
991         s->callbacked = false;
992
993         mutex_unlock(&s->mutex);
994 }
995 EXPORT_SYMBOL(amdtp_stream_stop);
996
997 /**
998  * amdtp_stream_pcm_abort - abort the running PCM device
999  * @s: the AMDTP stream about to be stopped
1000  *
1001  * If the isochronous stream needs to be stopped asynchronously, call this
1002  * function first to stop the PCM device.
1003  */
1004 void amdtp_stream_pcm_abort(struct amdtp_stream *s)
1005 {
1006         struct snd_pcm_substream *pcm;
1007
1008         pcm = ACCESS_ONCE(s->pcm);
1009         if (pcm) {
1010                 snd_pcm_stream_lock_irq(pcm);
1011                 if (snd_pcm_running(pcm))
1012                         snd_pcm_stop(pcm, SNDRV_PCM_STATE_XRUN);
1013                 snd_pcm_stream_unlock_irq(pcm);
1014         }
1015 }
1016 EXPORT_SYMBOL(amdtp_stream_pcm_abort);