From: Takashi Iwai <tiwai@suse.de>
To: alsa-devel@alsa-project.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 32/36] ALSA: seq: ump: Create UMP Endpoint port for broadcast
Date: Fri, 19 May 2023 11:31:10 +0200 [thread overview]
Message-ID: <20230519093114.28813-33-tiwai@suse.de> (raw)
In-Reply-To: <20230519093114.28813-1-tiwai@suse.de>
Create a sequencer port for broadcasting the all group inputs at the
port number 0. This corresponds to a UMP Endpoint connection;
application can read all UMP events from this port no matter which
group the UMP packet belongs to.
Unlike seq ports for other UMP groups, a UMP Endpoint port has no
SND_SEQ_PORT_TYPE_MIDI_GENERIC bit, so that it won't be treated as a
normal MIDI 1.0 device from legacy applications.
The port is named as "MIDI 2.0" to align with representations on other
operation systems.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/core/seq/seq_ump_client.c | 60 +++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/sound/core/seq/seq_ump_client.c b/sound/core/seq/seq_ump_client.c
index 8d360655ff5d..600b061ac8c3 100644
--- a/sound/core/seq/seq_ump_client.c
+++ b/sound/core/seq/seq_ump_client.c
@@ -290,6 +290,62 @@ static void update_group_attrs(struct seq_ump_client *client)
}
}
+/* create a UMP Endpoint port */
+static int create_ump_endpoint_port(struct seq_ump_client *client)
+{
+ struct snd_seq_port_info *port;
+ struct snd_seq_port_callback pcallbacks;
+ unsigned int rawmidi_info = client->ump->core.info_flags;
+ int err;
+
+ port = kzalloc(sizeof(*port), GFP_KERNEL);
+ if (!port)
+ return -ENOMEM;
+
+ port->addr.client = client->seq_client;
+ port->addr.port = 0; /* fixed */
+ port->flags = SNDRV_SEQ_PORT_FLG_GIVEN_PORT;
+ port->capability = SNDRV_SEQ_PORT_CAP_UMP_ENDPOINT;
+ if (rawmidi_info & SNDRV_RAWMIDI_INFO_INPUT) {
+ port->capability |= SNDRV_SEQ_PORT_CAP_READ |
+ SNDRV_SEQ_PORT_CAP_SYNC_READ |
+ SNDRV_SEQ_PORT_CAP_SUBS_READ;
+ port->direction |= SNDRV_SEQ_PORT_DIR_INPUT;
+ }
+ if (rawmidi_info & SNDRV_RAWMIDI_INFO_OUTPUT) {
+ port->capability |= SNDRV_SEQ_PORT_CAP_WRITE |
+ SNDRV_SEQ_PORT_CAP_SYNC_WRITE |
+ SNDRV_SEQ_PORT_CAP_SUBS_WRITE;
+ port->direction |= SNDRV_SEQ_PORT_DIR_OUTPUT;
+ }
+ if (rawmidi_info & SNDRV_RAWMIDI_INFO_DUPLEX)
+ port->capability |= SNDRV_SEQ_PORT_CAP_DUPLEX;
+ port->ump_group = 0; /* no associated group, no conversion */
+ port->type = SNDRV_SEQ_PORT_TYPE_MIDI_UMP |
+ SNDRV_SEQ_PORT_TYPE_HARDWARE |
+ SNDRV_SEQ_PORT_TYPE_PORT;
+ port->midi_channels = 16;
+ strcpy(port->name, "MIDI 2.0");
+ memset(&pcallbacks, 0, sizeof(pcallbacks));
+ pcallbacks.owner = THIS_MODULE;
+ pcallbacks.private_data = client;
+ if (rawmidi_info & SNDRV_RAWMIDI_INFO_INPUT) {
+ pcallbacks.subscribe = seq_ump_subscribe;
+ pcallbacks.unsubscribe = seq_ump_unsubscribe;
+ }
+ if (rawmidi_info & SNDRV_RAWMIDI_INFO_OUTPUT) {
+ pcallbacks.use = seq_ump_use;
+ pcallbacks.unuse = seq_ump_unuse;
+ pcallbacks.event_input = seq_ump_process_event;
+ }
+ port->kernel = &pcallbacks;
+ err = snd_seq_kernel_client_ctl(client->seq_client,
+ SNDRV_SEQ_IOCTL_CREATE_PORT,
+ port);
+ kfree(port);
+ return err;
+}
+
/* release the client resources */
static void seq_ump_client_free(struct seq_ump_client *client)
{
@@ -353,6 +409,10 @@ static int snd_seq_ump_probe(struct device *_dev)
goto error;
}
+ err = create_ump_endpoint_port(client);
+ if (err < 0)
+ goto error;
+
ump->seq_client = client;
ump->seq_ops = &seq_ump_ops;
return 0;
--
2.35.3
next prev parent reply other threads:[~2023-05-19 9:40 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-19 9:30 [PATCH 00/36] ALSA: Add MIDI 2.0 support Takashi Iwai
2023-05-19 9:30 ` [PATCH 01/36] ALSA: rawmidi: Pass rawmidi directly to snd_rawmidi_kernel_open() Takashi Iwai
2023-05-22 5:40 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 02/36] ALSA: rawmidi: Add ioctl callback to snd_rawmidi_global_ops Takashi Iwai
2023-05-22 5:41 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 03/36] ALSA: rawmidi: UMP support Takashi Iwai
2023-05-22 6:34 ` Jaroslav Kysela
2023-05-22 7:21 ` Takashi Iwai
2023-05-22 8:08 ` Jaroslav Kysela
2023-05-22 10:27 ` Takashi Iwai
2023-05-22 12:27 ` Takashi Iwai
2023-05-22 16:22 ` Takashi Iwai
2023-05-22 19:01 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 04/36] ALSA: rawmidi: Skip UMP devices at SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE Takashi Iwai
2023-05-22 6:36 ` Jaroslav Kysela
2023-05-22 7:04 ` Takashi Iwai
2023-05-19 9:30 ` [PATCH 05/36] ALSA: ump: Additional proc output Takashi Iwai
2023-05-22 6:37 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 06/36] ALSA: usb-audio: Manage number of rawmidis globally Takashi Iwai
2023-05-22 6:39 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 07/36] ALSA: usb-audio: Define USB MIDI 2.0 specs Takashi Iwai
2023-05-19 9:46 ` Greg Kroah-Hartman
2023-05-22 6:41 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 08/36] ALSA: usb-audio: USB MIDI 2.0 UMP support Takashi Iwai
2023-05-22 6:47 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 09/36] ALSA: usb-audio: Get UMP EP name string from USB interface Takashi Iwai
2023-05-22 6:48 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 10/36] ALSA: usb-audio: Trim superfluous "MIDI" suffix from UMP EP name Takashi Iwai
2023-05-22 6:49 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 11/36] ALSA: usb-audio: Create UMP blocks from USB MIDI GTBs Takashi Iwai
2023-05-22 6:50 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 12/36] ALSA: ump: Redirect rawmidi substream access via own helpers Takashi Iwai
2023-05-22 6:54 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 13/36] ALSA: ump: Add legacy raw MIDI support Takashi Iwai
2023-05-22 7:00 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 14/36] ALSA: usb-audio: Enable the " Takashi Iwai
2023-05-22 7:02 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 15/36] ALSA: usb-audio: Inform inconsistent protocols in GTBs Takashi Iwai
2023-05-22 7:03 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 16/36] ALSA: seq: Clear padded bytes at expanding events Takashi Iwai
2023-05-22 7:04 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 17/36] ALSA: seq: Add snd_seq_expand_var_event_at() helper Takashi Iwai
2023-05-22 7:06 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 18/36] ALSA: seq: Treat snd_seq_client object directly in client drivers Takashi Iwai
2023-05-22 7:09 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 19/36] ALSA: seq: Drop dead code for the old broadcast support Takashi Iwai
2023-05-22 7:11 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 20/36] ALSA: seq: Check the conflicting port at port creation Takashi Iwai
2023-05-22 7:13 ` Jaroslav Kysela
2023-05-19 9:30 ` [PATCH 21/36] ALSA: seq: Check validity before creating a port object Takashi Iwai
2023-05-22 7:14 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 22/36] ALSA: seq: Prohibit creating ports with special numbers Takashi Iwai
2023-05-22 7:15 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 23/36] ALSA: seq: Introduce SNDRV_SEQ_IOCTL_USER_PVERSION ioctl Takashi Iwai
2023-05-22 7:32 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 24/36] ALSA: seq: Add UMP support Takashi Iwai
2023-05-22 7:34 ` Jaroslav Kysela
2023-05-22 8:00 ` Takashi Iwai
2023-05-22 10:31 ` Takashi Iwai
2023-05-22 11:59 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 25/36] ALSA: seq: Add port inactive flag Takashi Iwai
2023-05-22 7:35 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 26/36] ALSA: seq: Support MIDI 2.0 UMP Endpoint port Takashi Iwai
2023-05-22 7:37 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 27/36] ALSA: seq: Add port direction to snd_seq_port_info Takashi Iwai
2023-05-22 7:43 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 28/36] ALSA: seq: Add UMP group number " Takashi Iwai
2023-05-22 7:44 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 29/36] ALSA: seq: Automatic conversion of UMP events Takashi Iwai
2023-05-22 7:48 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 30/36] ALSA: seq: Allow suppressing UMP conversions Takashi Iwai
2023-05-22 7:49 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 31/36] ALSA: seq: Bind UMP device Takashi Iwai
2023-05-22 7:52 ` Jaroslav Kysela
2023-05-19 9:31 ` Takashi Iwai [this message]
2023-05-22 7:52 ` [PATCH 32/36] ALSA: seq: ump: Create UMP Endpoint port for broadcast Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 33/36] ALSA: seq: Add ioctls for client UMP info query and setup Takashi Iwai
2023-05-22 7:54 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 34/36] ALSA: seq: Print UMP Endpoint and Block information in proc outputs Takashi Iwai
2023-05-22 7:55 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 35/36] ALSA: seq: Add UMP group filter Takashi Iwai
2023-05-22 7:56 ` Jaroslav Kysela
2023-05-19 9:31 ` [PATCH 36/36] ALSA: docs: Add MIDI 2.0 documentation Takashi Iwai
2023-05-22 7:58 ` Jaroslav Kysela
2023-06-13 3:22 ` happy.debugging
2023-06-13 6:01 ` 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=20230519093114.28813-33-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