xref: /openbmc/linux/drivers/media/usb/pvrusb2/pvrusb2-context.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1  /* SPDX-License-Identifier: GPL-2.0-only */
2  /*
3   *
4   *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
5   */
6  #ifndef __PVRUSB2_CONTEXT_H
7  #define __PVRUSB2_CONTEXT_H
8  
9  #include <linux/mutex.h>
10  #include <linux/usb.h>
11  #include <linux/workqueue.h>
12  
13  struct pvr2_hdw;     /* hardware interface - defined elsewhere */
14  struct pvr2_stream;  /* stream interface - defined elsewhere */
15  
16  struct pvr2_context;        /* All central state */
17  struct pvr2_channel;        /* One I/O pathway to a user */
18  struct pvr2_context_stream; /* Wrapper for a stream */
19  struct pvr2_ioread;         /* Low level stream structure */
20  
21  struct pvr2_context_stream {
22  	struct pvr2_channel *user;
23  	struct pvr2_stream *stream;
24  };
25  
26  struct pvr2_context {
27  	struct pvr2_channel *mc_first;
28  	struct pvr2_channel *mc_last;
29  	struct pvr2_context *exist_next;
30  	struct pvr2_context *exist_prev;
31  	struct pvr2_context *notify_next;
32  	struct pvr2_context *notify_prev;
33  	struct pvr2_hdw *hdw;
34  	struct pvr2_context_stream video_stream;
35  	struct mutex mutex;
36  	int notify_flag;
37  	int initialized_flag;
38  	int disconnect_flag;
39  
40  	/* Called after pvr2_context initialization is complete */
41  	void (*setup_func)(struct pvr2_context *);
42  
43  };
44  
45  struct pvr2_channel {
46  	struct pvr2_context *mc_head;
47  	struct pvr2_channel *mc_next;
48  	struct pvr2_channel *mc_prev;
49  	struct pvr2_context_stream *stream;
50  	struct pvr2_hdw *hdw;
51  	unsigned int input_mask;
52  	void (*check_func)(struct pvr2_channel *);
53  };
54  
55  struct pvr2_context *pvr2_context_create(struct usb_interface *intf,
56  					 const struct usb_device_id *devid,
57  					 void (*setup_func)(struct pvr2_context *));
58  void pvr2_context_disconnect(struct pvr2_context *);
59  
60  void pvr2_channel_init(struct pvr2_channel *,struct pvr2_context *);
61  void pvr2_channel_done(struct pvr2_channel *);
62  int pvr2_channel_limit_inputs(struct pvr2_channel *,unsigned int);
63  unsigned int pvr2_channel_get_limited_inputs(struct pvr2_channel *);
64  int pvr2_channel_claim_stream(struct pvr2_channel *,
65  			      struct pvr2_context_stream *);
66  struct pvr2_ioread *pvr2_channel_create_mpeg_stream(
67  	struct pvr2_context_stream *);
68  
69  int pvr2_context_global_init(void);
70  void pvr2_context_global_done(void);
71  
72  #endif /* __PVRUSB2_CONTEXT_H */
73