linux/sound/firewire/cmp.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef SOUND_FIREWIRE_CMP_H_INCLUDED
   3#define SOUND_FIREWIRE_CMP_H_INCLUDED
   4
   5#include <linux/mutex.h>
   6#include <linux/types.h>
   7#include "iso-resources.h"
   8
   9struct fw_unit;
  10
  11enum cmp_direction {
  12        CMP_INPUT = 0,
  13        CMP_OUTPUT,
  14};
  15
  16/**
  17 * struct cmp_connection - manages an isochronous connection to a device
  18 * @speed: the connection's actual speed
  19 *
  20 * This structure manages (using CMP) an isochronous stream between the local
  21 * computer and a device's input plug (iPCR) and output plug (oPCR).
  22 *
  23 * There is no corresponding oPCR created on the local computer, so it is not
  24 * possible to overlay connections on top of this one.
  25 */
  26struct cmp_connection {
  27        int speed;
  28        /* private: */
  29        bool connected;
  30        struct mutex mutex;
  31        struct fw_iso_resources resources;
  32        __be32 last_pcr_value;
  33        unsigned int pcr_index;
  34        unsigned int max_speed;
  35        enum cmp_direction direction;
  36};
  37
  38int cmp_connection_init(struct cmp_connection *connection,
  39                        struct fw_unit *unit,
  40                        enum cmp_direction direction,
  41                        unsigned int pcr_index);
  42int cmp_connection_check_used(struct cmp_connection *connection, bool *used);
  43void cmp_connection_destroy(struct cmp_connection *connection);
  44
  45int cmp_connection_reserve(struct cmp_connection *connection,
  46                           unsigned int max_payload);
  47void cmp_connection_release(struct cmp_connection *connection);
  48
  49int cmp_connection_establish(struct cmp_connection *connection);
  50int cmp_connection_update(struct cmp_connection *connection);
  51void cmp_connection_break(struct cmp_connection *connection);
  52
  53#endif
  54