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 |