• Takashi Iwai's avatar
    ALSA: rawmidi: UMP support · e3a8a5b7
    Takashi Iwai authored
    This patch adds the support helpers for UMP (Universal MIDI Packet) in
    ALSA core.
    
    The basic design is that a rawmidi instance is assigned to each UMP
    Endpoint.  A UMP Endpoint provides a UMP stream, typically
    bidirectional (but can be also uni-directional, too), which may hold
    up to 16 UMP Groups, where each UMP (input/output) Group corresponds
    to the traditional MIDI I/O Endpoint.
    
    Additionally, the ALSA UMP abstraction provides the multiple UMP
    Blocks that can be assigned to each UMP Endpoint.  A UMP Block is a
    metadata to hold the UMP Group clusters, and can represent the
    functions assigned to each UMP Group.  A typical implementation of UMP
    Block is the Group Terminal Blocks of USB MIDI 2.0 specification.
    
    For distinguishing from the legacy byte-stream MIDI device, a new
    device "umpC*D*" will be created, instead of the standard (MIDI 1.0)
    devices "midiC*D*".  The UMP instance can be identified by the new
    rawmidi info bit SNDRV_RAWMIDI_INFO_UMP, too.
    
    A UMP rawmidi device reads/writes only in 4-bytes words alignment,
    stored in CPU native endianness.
    
    The transmit and receive functions take care of the input/out data
    alignment, and may return zero or aligned size, and the params ioctl
    may return -EINVAL when the given input/output buffer size isn't
    aligned.
    
    A few new UMP-specific ioctls are added for obtaining the new UMP
    endpoint and block information.
    
    As of this commit, no ALSA sequencer instance is attached to UMP
    devices yet.  They will be supported by later patches.
    
    Along with those changes, the protocol version for rawmidi is bumped
    to 2.0.3.
    Reviewed-by: default avatarJaroslav Kysela <perex@perex.cz>
    Link: https://lore.kernel.org/r/20230523075358.9672-4-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    e3a8a5b7
Kconfig 6.51 KB