^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _UAPI_SOUND_FIREWIRE_H_INCLUDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _UAPI_SOUND_FIREWIRE_H_INCLUDED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/ioctl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) /* events can be read() from the hwdep device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define SNDRV_FIREWIRE_EVENT_LOCK_STATUS 0x000010cc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define SNDRV_FIREWIRE_EVENT_DICE_NOTIFICATION 0xd1ce004e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define SNDRV_FIREWIRE_EVENT_EFW_RESPONSE 0x4e617475
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define SNDRV_FIREWIRE_EVENT_DIGI00X_MESSAGE 0x746e736c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define SNDRV_FIREWIRE_EVENT_MOTU_NOTIFICATION 0x64776479
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define SNDRV_FIREWIRE_EVENT_TASCAM_CONTROL 0x7473636d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) struct snd_firewire_event_common {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) unsigned int type; /* SNDRV_FIREWIRE_EVENT_xxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) struct snd_firewire_event_lock_status {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) unsigned int status; /* 0/1 = unlocked/locked */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct snd_firewire_event_dice_notification {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) unsigned int notification; /* DICE-specific bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define SND_EFW_TRANSACTION_USER_SEQNUM_MAX ((__u32)((__u16)~0) - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) /* each field should be in big endian */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct snd_efw_transaction {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) __be32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) __be32 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) __be32 seqnum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) __be32 category;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __be32 command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) __be32 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) __be32 params[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct snd_firewire_event_efw_response {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) __be32 response[0]; /* some responses */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) struct snd_firewire_event_digi00x_message {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) __u32 message; /* Digi00x-specific message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) struct snd_firewire_event_motu_notification {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) __u32 message; /* MOTU-specific bits. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) struct snd_firewire_tascam_change {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) unsigned int index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) __be32 before;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) __be32 after;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) struct snd_firewire_event_tascam_control {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) unsigned int type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct snd_firewire_tascam_change changes[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) union snd_firewire_event {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) struct snd_firewire_event_common common;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) struct snd_firewire_event_lock_status lock_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) struct snd_firewire_event_dice_notification dice_notification;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) struct snd_firewire_event_efw_response efw_response;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) struct snd_firewire_event_digi00x_message digi00x_message;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) struct snd_firewire_event_tascam_control tascam_control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) struct snd_firewire_event_motu_notification motu_notification;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define SNDRV_FIREWIRE_IOCTL_GET_INFO _IOR('H', 0xf8, struct snd_firewire_get_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define SNDRV_FIREWIRE_IOCTL_LOCK _IO('H', 0xf9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define SNDRV_FIREWIRE_IOCTL_UNLOCK _IO('H', 0xfa)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define SNDRV_FIREWIRE_IOCTL_TASCAM_STATE _IOR('H', 0xfb, struct snd_firewire_tascam_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define SNDRV_FIREWIRE_TYPE_DICE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define SNDRV_FIREWIRE_TYPE_FIREWORKS 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define SNDRV_FIREWIRE_TYPE_BEBOB 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define SNDRV_FIREWIRE_TYPE_OXFW 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define SNDRV_FIREWIRE_TYPE_DIGI00X 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define SNDRV_FIREWIRE_TYPE_TASCAM 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define SNDRV_FIREWIRE_TYPE_MOTU 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define SNDRV_FIREWIRE_TYPE_FIREFACE 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) struct snd_firewire_get_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) unsigned int type; /* SNDRV_FIREWIRE_TYPE_xxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) unsigned int card; /* same as fw_cdev_get_info.card */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) unsigned char guid[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) char device_name[16]; /* device node in /dev */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) * SNDRV_FIREWIRE_IOCTL_LOCK prevents the driver from streaming.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) * Returns -EBUSY if the driver is already streaming.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define SNDRV_FIREWIRE_TASCAM_STATE_COUNT 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) struct snd_firewire_tascam_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) __be32 data[SNDRV_FIREWIRE_TASCAM_STATE_COUNT];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #endif /* _UAPI_SOUND_FIREWIRE_H_INCLUDED */