Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH v2 06/37] ALSA: ump: Additional proc output
Date: Tue, 23 May 2023 09:53:27 +0200	[thread overview]
Message-ID: <20230523075358.9672-7-tiwai@suse.de> (raw)
In-Reply-To: <20230523075358.9672-1-tiwai@suse.de>

UMP devices may have more interesting information than the traditional
rawmidi.  Extend the rawmidi_global_ops to allow the optional proc
info output and show some more bits in the proc file for UMP.

Note that the "Groups" field shows the first and the last UMP Groups,
and both numbers are 1-based (i.e. the first group is 1).

Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 include/sound/rawmidi.h |  3 +++
 sound/core/rawmidi.c    |  2 ++
 sound/core/ump.c        | 49 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 54 insertions(+)

diff --git a/include/sound/rawmidi.h b/include/sound/rawmidi.h
index b8a230a7583b..b0197b1d1fe4 100644
--- a/include/sound/rawmidi.h
+++ b/include/sound/rawmidi.h
@@ -18,6 +18,7 @@
 #if IS_ENABLED(CONFIG_SND_SEQUENCER)
 #include <sound/seq_device.h>
 #endif
+#include <sound/info.h>
 
 /*
  *  Raw MIDI interface
@@ -49,6 +50,8 @@ struct snd_rawmidi_global_ops {
 			      struct snd_seq_port_info *info);
 	long (*ioctl)(struct snd_rawmidi *rmidi, unsigned int cmd,
 		      void __user *argp);
+	void (*proc_read)(struct snd_info_entry *entry,
+			  struct snd_info_buffer *buf);
 };
 
 struct snd_rawmidi_runtime {
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index ffb5b58105f4..2d3cec908154 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -1770,6 +1770,8 @@ static void snd_rawmidi_proc_info_read(struct snd_info_entry *entry,
 	if (IS_ENABLED(CONFIG_SND_UMP))
 		snd_iprintf(buffer, "Type: %s\n",
 			    rawmidi_is_ump(rmidi) ? "UMP" : "Legacy");
+	if (rmidi->ops->proc_read)
+		rmidi->ops->proc_read(entry, buffer);
 	mutex_lock(&rmidi->open_mutex);
 	if (rmidi->info_flags & SNDRV_RAWMIDI_INFO_OUTPUT) {
 		list_for_each_entry(substream,
diff --git a/sound/core/ump.c b/sound/core/ump.c
index ee57ba1ee989..651cd3752719 100644
--- a/sound/core/ump.c
+++ b/sound/core/ump.c
@@ -21,11 +21,14 @@ static int snd_ump_dev_register(struct snd_rawmidi *rmidi);
 static int snd_ump_dev_unregister(struct snd_rawmidi *rmidi);
 static long snd_ump_ioctl(struct snd_rawmidi *rmidi, unsigned int cmd,
 			  void __user *argp);
+static void snd_ump_proc_read(struct snd_info_entry *entry,
+			      struct snd_info_buffer *buffer);
 
 static const struct snd_rawmidi_global_ops snd_ump_rawmidi_ops = {
 	.dev_register = snd_ump_dev_register,
 	.dev_unregister = snd_ump_dev_unregister,
 	.ioctl = snd_ump_ioctl,
+	.proc_read = snd_ump_proc_read,
 };
 
 static void snd_ump_endpoint_free(struct snd_rawmidi *rmidi)
@@ -226,5 +229,51 @@ static long snd_ump_ioctl(struct snd_rawmidi *rmidi, unsigned int cmd,
 	}
 }
 
+static const char *ump_direction_string(int dir)
+{
+	switch (dir) {
+	case SNDRV_UMP_DIR_INPUT:
+		return "input";
+	case SNDRV_UMP_DIR_OUTPUT:
+		return "output";
+	case SNDRV_UMP_DIR_BIDIRECTION:
+		return "bidirection";
+	default:
+		return "unknown";
+	}
+}
+
+/* Additional proc file output */
+static void snd_ump_proc_read(struct snd_info_entry *entry,
+			      struct snd_info_buffer *buffer)
+{
+	struct snd_rawmidi *rmidi = entry->private_data;
+	struct snd_ump_endpoint *ump = rawmidi_to_ump(rmidi);
+	struct snd_ump_block *fb;
+
+	snd_iprintf(buffer, "EP Name: %s\n", ump->info.name);
+	snd_iprintf(buffer, "EP Product ID: %s\n", ump->info.product_id);
+	snd_iprintf(buffer, "UMP Version: 0x%04x\n", ump->info.version);
+	snd_iprintf(buffer, "Protocol Caps: 0x%08x\n", ump->info.protocol_caps);
+	snd_iprintf(buffer, "Protocol: 0x%08x\n", ump->info.protocol);
+	snd_iprintf(buffer, "Num Blocks: %d\n\n", ump->info.num_blocks);
+
+	list_for_each_entry(fb, &ump->block_list, list) {
+		snd_iprintf(buffer, "Block %d (%s)\n", fb->info.block_id,
+			    fb->info.name);
+		snd_iprintf(buffer, "  Direction: %s\n",
+			    ump_direction_string(fb->info.direction));
+		snd_iprintf(buffer, "  Active: %s\n",
+			    fb->info.active ? "Yes" : "No");
+		snd_iprintf(buffer, "  Groups: %d-%d\n",
+			    fb->info.first_group + 1,
+			    fb->info.first_group + fb->info.num_groups);
+		snd_iprintf(buffer, "  Is MIDI1: %s%s\n",
+			    (fb->info.flags & SNDRV_UMP_BLOCK_IS_MIDI1) ? "Yes" : "No",
+			    (fb->info.flags & SNDRV_UMP_BLOCK_IS_LOWSPEED) ? " (Low Speed)" : "");
+		snd_iprintf(buffer, "\n");
+	}
+}
+
 MODULE_DESCRIPTION("Universal MIDI Packet (UMP) Core Driver");
 MODULE_LICENSE("GPL");
-- 
2.35.3


  parent reply	other threads:[~2023-05-23  8:05 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-23  7:53 [PATCH v2 00/37] ALSA: Add MIDI 2.0 support Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 01/37] ALSA: rawmidi: Pass rawmidi directly to snd_rawmidi_kernel_open() Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 02/37] ALSA: rawmidi: Add ioctl callback to snd_rawmidi_global_ops Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 03/37] ALSA: rawmidi: UMP support Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 04/37] ALSA: rawmidi: Skip UMP devices at SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 05/37] ALSA: ump: Add ioctls to inquiry UMP EP and Block info via control API Takashi Iwai
2023-05-23  7:53 ` Takashi Iwai [this message]
2023-05-23  7:53 ` [PATCH v2 07/37] ALSA: usb-audio: Manage number of rawmidis globally Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 08/37] ALSA: usb-audio: Define USB MIDI 2.0 specs Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 09/37] ALSA: usb-audio: USB MIDI 2.0 UMP support Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 10/37] ALSA: usb-audio: Get UMP EP name string from USB interface Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 11/37] ALSA: usb-audio: Trim superfluous "MIDI" suffix from UMP EP name Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 12/37] ALSA: usb-audio: Create UMP blocks from USB MIDI GTBs Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 13/37] ALSA: ump: Redirect rawmidi substream access via own helpers Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 14/37] ALSA: ump: Add legacy raw MIDI support Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 15/37] ALSA: usb-audio: Enable the " Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 16/37] ALSA: usb-audio: Inform inconsistent protocols in GTBs Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 17/37] ALSA: seq: Clear padded bytes at expanding events Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 18/37] ALSA: seq: Add snd_seq_expand_var_event_at() helper Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 19/37] ALSA: seq: Treat snd_seq_client object directly in client drivers Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 20/37] ALSA: seq: Drop dead code for the old broadcast support Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 21/37] ALSA: seq: Check the conflicting port at port creation Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 22/37] ALSA: seq: Check validity before creating a port object Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 23/37] ALSA: seq: Prohibit creating ports with special numbers Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 24/37] ALSA: seq: Introduce SNDRV_SEQ_IOCTL_USER_PVERSION ioctl Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 25/37] ALSA: seq: Add UMP support Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 26/37] ALSA: seq: Add port inactive flag Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 27/37] ALSA: seq: Support MIDI 2.0 UMP Endpoint port Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 28/37] ALSA: seq: Add port direction to snd_seq_port_info Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 29/37] ALSA: seq: Add UMP group number " Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 30/37] ALSA: seq: Automatic conversion of UMP events Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 31/37] ALSA: seq: Allow suppressing UMP conversions Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 32/37] ALSA: seq: Bind UMP device Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 33/37] ALSA: seq: ump: Create UMP Endpoint port for broadcast Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 34/37] ALSA: seq: Add ioctls for client UMP info query and setup Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 35/37] ALSA: seq: Print UMP Endpoint and Block information in proc outputs Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 36/37] ALSA: seq: Add UMP group filter Takashi Iwai
2023-05-23  7:53 ` [PATCH v2 37/37] ALSA: docs: Add MIDI 2.0 documentation Takashi Iwai
2023-06-13 12:41 ` [PATCH v2 00/37] ALSA: Add MIDI 2.0 support happy.debugging
2023-06-13 12:53   ` Takashi Iwai
2023-06-13 13:24     ` Happy Debugging
2023-06-13 13:31       ` Takashi Iwai
2023-06-13 15:23         ` Symbolic Debugger
2023-06-14  6:01           ` Symbolic Debugger
2023-06-14  6:09             ` Takashi Iwai
2023-06-14  6:53               ` Takashi Iwai
2023-06-15 11:39                 ` Symbolic Debugger
2023-06-16 12:23                   ` Symbolic Debugger
2023-06-16 12:27                     ` Takashi Iwai
2023-06-16 14:17                       ` Symbolic Debugger
2023-06-17 15:07                         ` Symbolic Debugger
2023-06-18  8:54                           ` Takashi Iwai
2023-06-20 13:29                             ` Symbolic Debugger
2023-06-28  6:52                               ` Symbolic Debugger
2023-06-28 11:12                                 ` Takashi Iwai
2023-06-28 11:32                                   ` Symbolic Debugger
2023-06-28 14:20                                     ` Takashi Iwai
2023-06-29  2:03                                       ` Symbolic Debugger
2023-06-29  6:40                                         ` Takashi Iwai
2023-06-29  8:38                                           ` Symbolic Debugger
2023-07-03 10:15                                             ` Symbolic Debugger
2023-07-03 10:19                                               ` Takashi Iwai
2023-07-03 11:25                                                 ` Symbolic Debugger
2023-07-03 12:09                                                   ` Takashi Iwai
2023-07-03 12:54                                                     ` Symbolic Debugger
2023-07-03 13:01                                                       ` Takashi Iwai
2023-07-03 13:53                                                         ` Symbolic Debugger
2023-07-12 13:26                                                           ` Symbolic Debugger
2023-07-12 13:58                                                             ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230523075358.9672-7-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=alsa-devel@alsa-project.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox