Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
usb_stream.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2007, 2008 Karsten Wiese <[email protected]>
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 
25  unsigned offset;
26  unsigned length;
27 };
28 
29 
31  unsigned version;
32  unsigned sample_rate;
33  unsigned period_frames;
34  unsigned frame_size;
35 };
36 
37 struct usb_stream {
39  unsigned read_size;
40  unsigned write_size;
41 
43 
44  unsigned state;
45 
49  unsigned insize_done;
50  unsigned periods_done;
51  unsigned periods_polled;
52 
54  unsigned inpackets;
55  unsigned inpacket_head;
56  unsigned inpacket_split;
61 };
62 
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