Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
card.h
Go to the documentation of this file.
1 #ifndef __USBAUDIO_CARD_H
2 #define __USBAUDIO_CARD_H
3 
4 #define MAX_NR_RATES 1024
5 #define MAX_PACKS 20
6 #define MAX_PACKS_HS (MAX_PACKS * 8) /* in high speed mode */
7 #define MAX_URBS 8
8 #define SYNC_URBS 4 /* always four urbs for sync */
9 #define MAX_QUEUE 24 /* try not to exceed this queue length, in ms */
10 
11 struct audioformat {
12  struct list_head list;
13  u64 formats; /* ALSA format bits */
14  unsigned int channels; /* # channels */
15  unsigned int fmt_type; /* USB audio format type (1-3) */
16  unsigned int frame_size; /* samples per frame for non-audio */
17  int iface; /* interface number */
18  unsigned char altsetting; /* corresponding alternate setting */
19  unsigned char altset_idx; /* array index of altenate setting */
20  unsigned char attributes; /* corresponding attributes of cs endpoint */
21  unsigned char endpoint; /* endpoint */
22  unsigned char ep_attr; /* endpoint attributes */
23  unsigned char datainterval; /* log_2 of data packet interval */
24  unsigned int maxpacksize; /* max. packet size */
25  unsigned int rates; /* rate bitmasks */
26  unsigned int rate_min, rate_max; /* min/max rates */
27  unsigned int nr_rates; /* number of rate table entries */
28  unsigned int *rate_table; /* rate table */
29  unsigned char clock; /* associated clock */
30 };
31 
32 struct snd_usb_substream;
33 struct snd_usb_endpoint;
34 
35 struct snd_urb_ctx {
36  struct urb *urb;
37  unsigned int buffer_size; /* size of data buffer, if data URB */
40  int index; /* index for urb array */
41  int packets; /* number of packets per urb */
42  int packet_size[MAX_PACKS_HS]; /* size of packets for next submission */
44 };
45 
48 
49  int use_count;
50  int ep_num; /* the referenced endpoint number */
51  int type; /* SND_USB_ENDPOINT_TYPE_* */
52  unsigned long flags;
53 
55  struct urb *urb);
57  struct urb *urb);
58 
62 
64 
67  int packets;
71 
72  unsigned int nurbs; /* # urbs */
73  unsigned long active_mask; /* bitmask of active urbs */
74  unsigned long unlink_mask; /* bitmask of unlinked urbs */
75  char *syncbuf; /* sync buffer for all sync URBs */
76  dma_addr_t sync_dma; /* DMA address of syncbuf */
77 
78  unsigned int pipe; /* the data i/o pipe */
79  unsigned int freqn; /* nominal sampling rate in fs/fps in Q16.16 format */
80  unsigned int freqm; /* momentary sampling rate in fs/fps in Q16.16 format */
81  int freqshift; /* how much to shift the feedback value to get Q16.16 */
82  unsigned int freqmax; /* maximum sampling rate, used for buffer management */
83  unsigned int phase; /* phase accumulator */
84  unsigned int maxpacksize; /* max packet size in bytes */
85  unsigned int maxframesize; /* max packet size in frames */
86  unsigned int curpacksize; /* current packet size in bytes (for capture) */
87  unsigned int curframesize; /* current packet size in frames (for capture) */
88  unsigned int syncmaxsize; /* sync endpoint packet size */
89  unsigned int fill_max:1; /* fill max packet size always */
90  unsigned int datainterval; /* log_2 of data packet interval */
91  unsigned int syncinterval; /* P for adaptive mode, 0 otherwise */
92  unsigned char silence_value;
93  unsigned int stride;
94  int iface, alt_idx;
95  int skip_packets; /* quirks for devices to ignore the first n packets
96  in a stream */
97 
99  struct list_head list;
100 };
101 
104  struct usb_device *dev;
106  int direction; /* playback or capture */
107  int interface; /* current interface */
108  int endpoint; /* assigned endpoint */
109  struct audioformat *cur_audiofmt; /* current audioformat pointer (for hw_params callback) */
110  snd_pcm_format_t pcm_format; /* current audio format (for hw_params callback) */
111  unsigned int channels; /* current number of channels (for hw_params callback) */
112  unsigned int cur_rate; /* current rate (for hw_params callback) */
113  unsigned int period_bytes; /* current period bytes (for hw_params callback) */
114  unsigned int altset_idx; /* USB data format: index of alternate setting */
115  unsigned int txfr_quirk:1; /* allow sub-frame alignment */
116  unsigned int fmt_type; /* USB audio format type (1-3) */
117 
118  unsigned int running: 1; /* running status */
119 
120  unsigned int hwptr_done; /* processed byte position in the buffer */
121  unsigned int transfer_done; /* processed frames since last period update */
122 
123  /* data and sync endpoints for this stream */
124  unsigned int ep_num; /* the endpoint number */
127  unsigned long flags;
128  bool need_setup_ep; /* (re)configure EP at prepare? */
129  unsigned int speed; /* USB_SPEED_XXX */
130 
131  u64 formats; /* format bitmasks (all or'ed) */
132  unsigned int num_formats; /* number of supported audio formats (list) */
133  struct list_head fmt_list; /* format list */
134  struct snd_pcm_hw_constraint_list rate_list; /* limited rates */
136 
137  int last_frame_number; /* stored frame number */
138  int last_delay; /* stored delay */
139 };
140 
143  struct snd_pcm *pcm;
145  unsigned int fmt_type; /* USB audio format type (1-3) */
147  struct list_head list;
148 };
149 
150 #endif /* __USBAUDIO_CARD_H */