ALSA: fireface: pick up time stamp for request subaction of asynchronous transaction
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 12 Jan 2023 12:09:50 +0000 (21:09 +0900)
committerTakashi Iwai <tiwai@suse.de>
Fri, 13 Jan 2023 08:56:35 +0000 (09:56 +0100)
The time stamp of isochronous cycle at which asynchronous transaction is
sent is perhaps useful somehow. A commit b2405aa948b9 ("firewire: add
kernel API to access packet structure in request structure for AR context")
adds kernel API to retrieve the time stamp in inner structure of request
subaction.

This commit changes local framework to handle message delivered by the
asynchronous transaction so that time stamp is picked up by the kernel API.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20230112120954.500692-3-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/fireface/ff-protocol-former.c
sound/firewire/fireface/ff-protocol-latter.c
sound/firewire/fireface/ff-transaction.c
sound/firewire/fireface/ff.h

index 16afcb334e3cbfd4d857336bac85fdecf84bd5cf..22d6aee52de3180fb347357b3c4f7214091d8828 100644 (file)
@@ -403,7 +403,7 @@ static void ff800_finish_session(struct snd_ff *ff)
 // A write transaction to clear registered higher 4 bytes of destination address
 // has an effect to suppress asynchronous transaction from device.
 static void ff800_handle_midi_msg(struct snd_ff *ff, unsigned int offset, const __le32 *buf,
-                                 size_t length)
+                                 size_t length, u32 tstamp)
 {
        int i;
 
@@ -554,7 +554,7 @@ static void ff400_finish_session(struct snd_ff *ff)
 // in its lower offset and expects userspace application to configure the
 // register for it.
 static void ff400_handle_msg(struct snd_ff *ff, unsigned int offset, const __le32 *buf,
-                            size_t length)
+                            size_t length, u32 tstamp)
 {
        int i;
 
index e7a066fb1eade9f5bab628f51c8aa7d99af1d09d..9947e0c2e0aa83d94040c8f53180e0fef4b82b3d 100644 (file)
@@ -394,7 +394,7 @@ static void latter_dump_status(struct snd_ff *ff, struct snd_info_buffer *buffer
 // (0x'....'....'0000'0000) and expects userspace application to configure the
 // register for it.
 static void latter_handle_midi_msg(struct snd_ff *ff, unsigned int offset, const __le32 *buf,
-                                  size_t length)
+                                  size_t length, u32 tstamp)
 {
        u32 data = le32_to_cpu(*buf);
        unsigned int index = (data & 0x000000f0) >> 4;
index 764c772a0b1ee0201676393f3722f1389818805b..79f733d8c98b6409df45696fe21e16e362f7aa3b 100644 (file)
@@ -131,11 +131,12 @@ static void handle_msg(struct fw_card *card, struct fw_request *request, int tco
 {
        struct snd_ff *ff = callback_data;
        __le32 *buf = data;
+       u32 tstamp = fw_request_get_timestamp(request);
 
        fw_send_response(card, request, RCODE_COMPLETE);
 
        offset -= ff->async_handler.offset;
-       ff->spec->protocol->handle_msg(ff, (unsigned int)offset, buf, length);
+       ff->spec->protocol->handle_msg(ff, (unsigned int)offset, buf, length, tstamp);
 }
 
 static int allocate_own_address(struct snd_ff *ff, int i)
index 0358b444bd01b294688829207ed449f32c8c850b..f430ebe157b32197a279781bc6bff10fa141c080 100644 (file)
@@ -111,7 +111,7 @@ enum snd_ff_clock_src {
 
 struct snd_ff_protocol {
        void (*handle_msg)(struct snd_ff *ff, unsigned int offset, const __le32 *buf,
-                          size_t length);
+                          size_t length, u32 tstamp);
        int (*fill_midi_msg)(struct snd_ff *ff,
                             struct snd_rawmidi_substream *substream,
                             unsigned int port);