~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to sound/usb/usx2y/usb_stream.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2007, 2008 Karsten Wiese <fzu@wemgehoertderstaat.de>
 
3
 *
 
4
 * This program is free software; you can redistribute it and/or modify it
 
5
 * under the terms of the GNU General Public License as published by the
 
6
 * Free Software Foundation; either version 2 of the License, or (at your
 
7
 * option) any later version.
 
8
 *
 
9
 * This program is distributed in the hope that it will be useful, but
 
10
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 
11
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
12
 * for more details.
 
13
 *
 
14
 * You should have received a copy of the GNU General Public License
 
15
 * along with this program; if not, write to the Free Software Foundation,
 
16
 * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
17
 */
 
18
 
 
19
#define USB_STREAM_INTERFACE_VERSION 2
 
20
 
 
21
#define SNDRV_USB_STREAM_IOCTL_SET_PARAMS \
 
22
        _IOW('H', 0x90, struct usb_stream_config)
 
23
 
 
24
struct usb_stream_packet {
 
25
        unsigned offset;
 
26
        unsigned length;
 
27
};
 
28
 
 
29
 
 
30
struct usb_stream_config {
 
31
        unsigned version;
 
32
        unsigned sample_rate;
 
33
        unsigned period_frames;
 
34
        unsigned frame_size;
 
35
};
 
36
 
 
37
struct usb_stream {
 
38
        struct usb_stream_config cfg;
 
39
        unsigned read_size;
 
40
        unsigned write_size;
 
41
 
 
42
        int period_size;
 
43
 
 
44
        unsigned state;
 
45
 
 
46
        int idle_insize;
 
47
        int idle_outsize;
 
48
        int sync_packet;
 
49
        unsigned insize_done;
 
50
        unsigned periods_done;
 
51
        unsigned periods_polled;
 
52
 
 
53
        struct usb_stream_packet outpacket[2];
 
54
        unsigned                 inpackets;
 
55
        unsigned                 inpacket_head;
 
56
        unsigned                 inpacket_split;
 
57
        unsigned                 inpacket_split_at;
 
58
        unsigned                 next_inpacket_split;
 
59
        unsigned                 next_inpacket_split_at;
 
60
        struct usb_stream_packet inpacket[0];
 
61
};
 
62
 
 
63
enum usb_stream_state {
 
64
        usb_stream_invalid,
 
65
        usb_stream_stopped,
 
66
        usb_stream_sync0,
 
67
        usb_stream_sync1,
 
68
        usb_stream_ready,
 
69
        usb_stream_running,
 
70
        usb_stream_xrun,
 
71
};
 
72
 
 
73
#if __KERNEL__
 
74
 
 
75
#define USB_STREAM_NURBS 4
 
76
#define USB_STREAM_URBDEPTH 4
 
77
 
 
78
struct usb_stream_kernel {
 
79
        struct usb_stream *s;
 
80
 
 
81
        void *write_page;
 
82
 
 
83
        unsigned n_o_ps;
 
84
 
 
85
        struct urb *inurb[USB_STREAM_NURBS];
 
86
        struct urb *idle_inurb;
 
87
        struct urb *completed_inurb;
 
88
        struct urb *outurb[USB_STREAM_NURBS];
 
89
        struct urb *idle_outurb;
 
90
        struct urb *completed_outurb;
 
91
        struct urb *i_urb;
 
92
 
 
93
        int iso_frame_balance;
 
94
 
 
95
        wait_queue_head_t sleep;
 
96
 
 
97
        unsigned out_phase;
 
98
        unsigned out_phase_peeked;
 
99
        unsigned freqn;
 
100
};
 
101
 
 
102
struct usb_stream *usb_stream_new(struct usb_stream_kernel *sk,
 
103
                                  struct usb_device *dev,
 
104
                                  unsigned in_endpoint, unsigned out_endpoint,
 
105
                                  unsigned sample_rate, unsigned use_packsize,
 
106
                                  unsigned period_frames, unsigned frame_size);
 
107
void usb_stream_free(struct usb_stream_kernel *);
 
108
int usb_stream_start(struct usb_stream_kernel *);
 
109
void usb_stream_stop(struct usb_stream_kernel *);
 
110
 
 
111
 
 
112
#endif