Commit 03a58514 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge branch 'topic/midi20' into for-next

This is a (largish) patch set for adding the support of MIDI 2.0
functionality, mainly targeted for USB devices.  MIDI 2.0 is a
complete overhaul of the 40-years old MIDI 1.0.  Unlike MIDI 1.0 byte
stream, MIDI 2.0 uses packets in 32bit words for Universal MIDI Packet
(UMP) protocol.  It supports both MIDI 1.0 commands for compatibility
and the extended MIDI 2.0 commands for higher resolutions and more
functions.

For supporting the UMP, the patch set extends the existing ALSA
rawmidi and sequencer interfaces, and adds the USB MIDI 2.0 support to
the standard USB-audio driver.

The rawmidi for UMP has a different device name (/dev/snd/umpC*D*) and
it reads/writes UMP packet data in 32bit CPU-native endianness.  For
the old MIDI 1.0 applications, the legacy rawmidi interface is
provided, too.

As default, USB-audio driver will take the alternate setting for MIDI
2.0 interface, and the compatibility with MIDI 1.0 is provided via the
rawmidi common layer.  However, user may let the driver falling back
to the old MIDI 1.0 interface by a module option, too.

A UMP-capable rawmidi device can create the corresponding ALSA
sequencer client(s) to support the UMP Endpoint and UMP Group
connections.  As a nature of ALSA sequencer, arbitrary connections
between clients/ports are allowed, and the ALSA sequencer core
performs the automatic conversions for the connections between a new
UMP sequencer client and a legacy MIDI 1.0 sequencer client.  It
allows the existing application to use MIDI 2.0 devices without
changes.

The MIDI-CI, which is another major extension in MIDI 2.0, isn't
covered by this patch set.  It would be implemented rather in
user-space.

Roughly speaking, the first half of this patch set is for extending
the rawmidi and USB-audio, and the second half is for extending the
ALSA sequencer interface.

The patch set is based on 6.4-rc2 kernel, but all patches can be
cleanly applicable on 6.2 and 6.3 kernels, too (while 6.1 and older
kernels would need minor adjustment for uapi header changes).

The updates for alsa-lib and alsa-utils will follow shortly later.

The author thanks members of MIDI Association OS/API Working Group,
especially Andrew Mee, for great helps for the initial design and
debugging / testing the drivers.

Link: https://lore.kernel.org/r/20230523075358.9672-1-tiwai@suse.de


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parents 7195fb46 6b39e30d
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ Block
   kyber-iosched
   null_blk
   pr
   request
   stat
   switching-sched
   writeback_cache_control

Documentation/block/request.rst

deleted100644 → 0
+0 −99
Original line number Diff line number Diff line
============================
struct request documentation
============================

Jens Axboe <jens.axboe@oracle.com> 27/05/02


.. FIXME:
   No idea about what does mean - seems just some noise, so comment it

   1.0
   Index

   2.0 Struct request members classification

       2.1 struct request members explanation

   3.0


   2.0



Short explanation of request members
====================================

Classification flags:

	=	====================
	D	driver member
	B	block layer member
	I	I/O scheduler member
	=	====================

Unless an entry contains a D classification, a device driver must not access
this member. Some members may contain D classifications, but should only be
access through certain macros or functions (eg ->flags).

<linux/blkdev.h>

=============================== ======= =======================================
Member				Flag	Comment
=============================== ======= =======================================
struct list_head queuelist	BI	Organization on various internal
					queues

``void *elevator_private``	I	I/O scheduler private data

unsigned char cmd[16]		D	Driver can use this for setting up
					a cdb before execution, see
					blk_queue_prep_rq

unsigned long flags		DBI	Contains info about data direction,
					request type, etc.

int rq_status			D	Request status bits

kdev_t rq_dev			DBI	Target device

int errors			DB	Error counts

sector_t sector			DBI	Target location

unsigned long hard_nr_sectors	B	Used to keep sector sane

unsigned long nr_sectors	DBI	Total number of sectors in request

unsigned long hard_nr_sectors	B	Used to keep nr_sectors sane

unsigned short nr_phys_segments	DB	Number of physical scatter gather
					segments in a request

unsigned short nr_hw_segments	DB	Number of hardware scatter gather
					segments in a request

unsigned int current_nr_sectors	DB	Number of sectors in first segment
					of request

unsigned int hard_cur_sectors	B	Used to keep current_nr_sectors sane

int tag				DB	TCQ tag, if assigned

``void *special``		D	Free to be used by driver

``char *buffer``		D	Map of first segment, also see
					section on bouncing SECTION

``struct completion *waiting``	D	Can be used by driver to get signalled
					on request completion

``struct bio *bio``		DBI	First bio in request

``struct bio *biotail``		DBI	Last bio in request

``struct request_queue *q``	DB	Request queue this request belongs to

``struct request_list *rl``	B	Request list this request came from
=============================== ======= =======================================
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ properties:

        properties:
          data-lanes:
            minItems: 1
            maxItems: 2

        required:
+2 −11
Original line number Diff line number Diff line
@@ -17,20 +17,11 @@ description:
properties:
  clocks:
    minItems: 3
    items:
      - description: PCIe bridge clock.
      - description: PCIe bus clock.
      - description: PCIe PHY clock.
      - description: Additional required clock entry for imx6sx-pcie,
           imx6sx-pcie-ep, imx8mq-pcie, imx8mq-pcie-ep.
    maxItems: 4

  clock-names:
    minItems: 3
    items:
      - const: pcie
      - const: pcie_bus
      - enum: [ pcie_phy, pcie_aux ]
      - enum: [ pcie_inbound_axi, pcie_aux ]
    maxItems: 4

  num-lanes:
    const: 1
+38 −0
Original line number Diff line number Diff line
@@ -31,6 +31,19 @@ properties:
      - const: dbi
      - const: addr_space

  clocks:
    minItems: 3
    items:
      - description: PCIe bridge clock.
      - description: PCIe bus clock.
      - description: PCIe PHY clock.
      - description: Additional required clock entry for imx6sx-pcie,
           imx6sx-pcie-ep, imx8mq-pcie, imx8mq-pcie-ep.

  clock-names:
    minItems: 3
    maxItems: 4

  interrupts:
    items:
      - description: builtin eDMA interrupter.
@@ -49,6 +62,31 @@ required:
allOf:
  - $ref: /schemas/pci/snps,dw-pcie-ep.yaml#
  - $ref: /schemas/pci/fsl,imx6q-pcie-common.yaml#
  - if:
      properties:
        compatible:
          enum:
            - fsl,imx8mq-pcie-ep
    then:
      properties:
        clocks:
          minItems: 4
        clock-names:
          items:
            - const: pcie
            - const: pcie_bus
            - const: pcie_phy
            - const: pcie_aux
    else:
      properties:
        clocks:
          maxItems: 3
        clock-names:
          items:
            - const: pcie
            - const: pcie_bus
            - const: pcie_aux


unevaluatedProperties: false

Loading