1 /* -*- c-basic-offset: 8 -*- */ 2 3 #ifndef __AMDTP_H 4 #define __AMDTP_H 5 6 #include <asm/types.h> 7 #include "ieee1394-ioctl.h" 8 9 /* The userspace interface for the Audio & Music Data Transmission 10 * Protocol driver is really simple. First, open /dev/amdtp, use the 11 * ioctl to configure format, rate, dimension and either plug or 12 * channel, then start writing samples. 13 * 14 * The formats supported by the driver are listed below. 15 * AMDTP_FORMAT_RAW corresponds to the AM824 raw format, which can 16 * carry any number of channels, so use this if you're streaming 17 * multichannel audio. The AMDTP_FORMAT_IEC958_PCM corresponds to the 18 * AM824 IEC958 encapsulation without the IEC958 data bit set, using 19 * AMDTP_FORMAT_IEC958_AC3 will transmit the samples with the data bit 20 * set, suitable for transmitting compressed AC-3 audio. 21 * 22 * The rate field specifies the transmission rate; supported values 23 * are 32000, 44100, 48000, 88200, 96000, 176400 and 192000. 24 * 25 * The dimension field specifies the dimension of the signal, that is, 26 * the number of audio channels. Only AMDTP_FORMAT_RAW supports 27 * settings greater than 2. 28 * 29 * The mode field specifies which transmission mode to use. The AMDTP 30 * specifies two different transmission modes: blocking and 31 * non-blocking. The blocking transmission mode always send a fixed 32 * number of samples, typically 8, 16 or 32. To exactly match the 33 * transmission rate, the driver alternates between sending empty and 34 * non-empty packets. In non-blocking mode, the driver transmits as 35 * small packets as possible. For example, for a transmission rate of 36 * 44100Hz, the driver should send 5 41/80 samples in every cycle, but 37 * this is not possible so instead the driver alternates between 38 * sending 5 and 6 samples. 39 * 40 * The last thing to specify is either the isochronous channel to use 41 * or the output plug to connect to. If you know what channel the 42 * destination device will listen on, you can specify the channel 43 * directly and use the AMDTP_IOC_CHANNEL ioctl. However, if the 44 * destination device chooses the channel and uses the IEC61883-1 plug 45 * mechanism, you can specify an output plug to connect to. The 46 * driver will pick up the channel number from the plug once the 47 * destination device locks the output plug control register. In this 48 * case set the plug field and use the AMDTP_IOC_PLUG ioctl. 49 * 50 * Having configured the interface, the driver now accepts writes of 51 * regular 16 bit signed little endian samples, with the channels 52 * interleaved. For example, 4 channels would look like: 53 * 54 * | sample 0 | sample 1 ... 55 * | ch. 0 | ch. 1 | ch. 2 | ch. 3 | ch. 0 | ... 56 * | lsb | msb | lsb | msb | lsb | msb | lsb | msb | lsb | msb | ... 57 * 58 */ 59 60 enum { 61 AMDTP_FORMAT_RAW, 62 AMDTP_FORMAT_IEC958_PCM, 63 AMDTP_FORMAT_IEC958_AC3 64 }; 65 66 enum { 67 AMDTP_MODE_BLOCKING, 68 AMDTP_MODE_NON_BLOCKING, 69 }; 70 71 enum { 72 AMDTP_INPUT_LE16, 73 AMDTP_INPUT_BE16, 74 }; 75 76 struct amdtp_ioctl { 77 __u32 format; 78 __u32 rate; 79 __u32 dimension; 80 __u32 mode; 81 union { __u32 channel; __u32 plug; } u; 82 }; 83 84 #endif /* __AMDTP_H */ 85