xref: /linux/drivers/media/usb/pvrusb2/pvrusb2-io.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*2504ba9fSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2d855497eSMike Isely /*
3d855497eSMike Isely  *
4d855497eSMike Isely  *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
5d855497eSMike Isely  */
6d855497eSMike Isely #ifndef __PVRUSB2_IO_H
7d855497eSMike Isely #define __PVRUSB2_IO_H
8d855497eSMike Isely 
9d855497eSMike Isely #include <linux/usb.h>
10d855497eSMike Isely #include <linux/list.h>
11d855497eSMike Isely 
12d855497eSMike Isely typedef void (*pvr2_stream_callback)(void *);
13d855497eSMike Isely 
14d855497eSMike Isely enum pvr2_buffer_state {
15d855497eSMike Isely 	pvr2_buffer_state_none = 0,   // Not on any list
16d855497eSMike Isely 	pvr2_buffer_state_idle = 1,   // Buffer is ready to be used again
17d855497eSMike Isely 	pvr2_buffer_state_queued = 2, // Buffer has been queued for filling
18d855497eSMike Isely 	pvr2_buffer_state_ready = 3,  // Buffer has data available
19d855497eSMike Isely };
20d855497eSMike Isely 
21d855497eSMike Isely struct pvr2_stream;
22d855497eSMike Isely struct pvr2_buffer;
23d855497eSMike Isely 
24ad0992e9SMike Isely struct pvr2_stream_stats {
25ad0992e9SMike Isely 	unsigned int buffers_in_queue;
26ad0992e9SMike Isely 	unsigned int buffers_in_idle;
27ad0992e9SMike Isely 	unsigned int buffers_in_ready;
28ad0992e9SMike Isely 	unsigned int buffers_processed;
29ad0992e9SMike Isely 	unsigned int buffers_failed;
30ad0992e9SMike Isely 	unsigned int bytes_processed;
31ad0992e9SMike Isely };
32ad0992e9SMike Isely 
33d855497eSMike Isely /* Initialize / tear down stream structure */
34d855497eSMike Isely struct pvr2_stream *pvr2_stream_create(void);
35d855497eSMike Isely void pvr2_stream_destroy(struct pvr2_stream *);
36d855497eSMike Isely void pvr2_stream_setup(struct pvr2_stream *,
37d855497eSMike Isely 		       struct usb_device *dev,int endpoint,
38d855497eSMike Isely 		       unsigned int tolerance);
39d855497eSMike Isely void pvr2_stream_set_callback(struct pvr2_stream *,
40d855497eSMike Isely 			      pvr2_stream_callback func,
41d855497eSMike Isely 			      void *data);
42ad0992e9SMike Isely void pvr2_stream_get_stats(struct pvr2_stream *,
43ad0992e9SMike Isely 			   struct pvr2_stream_stats *,
44ad0992e9SMike Isely 			   int zero_counts);
45d855497eSMike Isely 
46d855497eSMike Isely /* Query / set the nominal buffer count */
47e61b6fc5SMike Isely int pvr2_stream_get_buffer_count(struct pvr2_stream *);
48d855497eSMike Isely int pvr2_stream_set_buffer_count(struct pvr2_stream *,unsigned int);
49d855497eSMike Isely 
50d855497eSMike Isely /* Get a pointer to a buffer that is either idle, ready, or is specified
51d855497eSMike Isely    named. */
52d855497eSMike Isely struct pvr2_buffer *pvr2_stream_get_idle_buffer(struct pvr2_stream *);
53d855497eSMike Isely struct pvr2_buffer *pvr2_stream_get_ready_buffer(struct pvr2_stream *);
54d855497eSMike Isely struct pvr2_buffer *pvr2_stream_get_buffer(struct pvr2_stream *sp,int id);
55d855497eSMike Isely 
56d855497eSMike Isely /* Find out how many buffers are idle or ready */
57d855497eSMike Isely int pvr2_stream_get_ready_count(struct pvr2_stream *);
58d855497eSMike Isely 
59e61b6fc5SMike Isely 
60d855497eSMike Isely /* Kill all pending buffers and throw away any ready buffers as well */
61d855497eSMike Isely void pvr2_stream_kill(struct pvr2_stream *);
62d855497eSMike Isely 
63d855497eSMike Isely /* Set up the actual storage for a buffer */
64d855497eSMike Isely int pvr2_buffer_set_buffer(struct pvr2_buffer *,void *ptr,unsigned int cnt);
65d855497eSMike Isely 
66d855497eSMike Isely /* Find out size of data in the given ready buffer */
67d855497eSMike Isely unsigned int pvr2_buffer_get_count(struct pvr2_buffer *);
68d855497eSMike Isely 
69d855497eSMike Isely /* Retrieve completion code for given ready buffer */
70d855497eSMike Isely int pvr2_buffer_get_status(struct pvr2_buffer *);
71d855497eSMike Isely 
72d855497eSMike Isely /* Retrieve ID of given buffer */
73d855497eSMike Isely int pvr2_buffer_get_id(struct pvr2_buffer *);
74d855497eSMike Isely 
75d855497eSMike Isely /* Start reading into given buffer (kill it if needed) */
76d855497eSMike Isely int pvr2_buffer_queue(struct pvr2_buffer *);
77d855497eSMike Isely 
78d855497eSMike Isely #endif /* __PVRUSB2_IO_H */
79