162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2005 Mike Isely <isely@pobox.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#ifndef __PVRUSB2_CONTEXT_H 762306a36Sopenharmony_ci#define __PVRUSB2_CONTEXT_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/mutex.h> 1062306a36Sopenharmony_ci#include <linux/usb.h> 1162306a36Sopenharmony_ci#include <linux/workqueue.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cistruct pvr2_hdw; /* hardware interface - defined elsewhere */ 1462306a36Sopenharmony_cistruct pvr2_stream; /* stream interface - defined elsewhere */ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistruct pvr2_context; /* All central state */ 1762306a36Sopenharmony_cistruct pvr2_channel; /* One I/O pathway to a user */ 1862306a36Sopenharmony_cistruct pvr2_context_stream; /* Wrapper for a stream */ 1962306a36Sopenharmony_cistruct pvr2_ioread; /* Low level stream structure */ 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistruct pvr2_context_stream { 2262306a36Sopenharmony_ci struct pvr2_channel *user; 2362306a36Sopenharmony_ci struct pvr2_stream *stream; 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct pvr2_context { 2762306a36Sopenharmony_ci struct pvr2_channel *mc_first; 2862306a36Sopenharmony_ci struct pvr2_channel *mc_last; 2962306a36Sopenharmony_ci struct pvr2_context *exist_next; 3062306a36Sopenharmony_ci struct pvr2_context *exist_prev; 3162306a36Sopenharmony_ci struct pvr2_context *notify_next; 3262306a36Sopenharmony_ci struct pvr2_context *notify_prev; 3362306a36Sopenharmony_ci struct pvr2_hdw *hdw; 3462306a36Sopenharmony_ci struct pvr2_context_stream video_stream; 3562306a36Sopenharmony_ci struct mutex mutex; 3662306a36Sopenharmony_ci int notify_flag; 3762306a36Sopenharmony_ci int initialized_flag; 3862306a36Sopenharmony_ci int disconnect_flag; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci /* Called after pvr2_context initialization is complete */ 4162306a36Sopenharmony_ci void (*setup_func)(struct pvr2_context *); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct pvr2_channel { 4662306a36Sopenharmony_ci struct pvr2_context *mc_head; 4762306a36Sopenharmony_ci struct pvr2_channel *mc_next; 4862306a36Sopenharmony_ci struct pvr2_channel *mc_prev; 4962306a36Sopenharmony_ci struct pvr2_context_stream *stream; 5062306a36Sopenharmony_ci struct pvr2_hdw *hdw; 5162306a36Sopenharmony_ci unsigned int input_mask; 5262306a36Sopenharmony_ci void (*check_func)(struct pvr2_channel *); 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct pvr2_context *pvr2_context_create(struct usb_interface *intf, 5662306a36Sopenharmony_ci const struct usb_device_id *devid, 5762306a36Sopenharmony_ci void (*setup_func)(struct pvr2_context *)); 5862306a36Sopenharmony_civoid pvr2_context_disconnect(struct pvr2_context *); 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_civoid pvr2_channel_init(struct pvr2_channel *,struct pvr2_context *); 6162306a36Sopenharmony_civoid pvr2_channel_done(struct pvr2_channel *); 6262306a36Sopenharmony_ciint pvr2_channel_limit_inputs(struct pvr2_channel *,unsigned int); 6362306a36Sopenharmony_ciunsigned int pvr2_channel_get_limited_inputs(struct pvr2_channel *); 6462306a36Sopenharmony_ciint pvr2_channel_claim_stream(struct pvr2_channel *, 6562306a36Sopenharmony_ci struct pvr2_context_stream *); 6662306a36Sopenharmony_cistruct pvr2_ioread *pvr2_channel_create_mpeg_stream( 6762306a36Sopenharmony_ci struct pvr2_context_stream *); 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ciint pvr2_context_global_init(void); 7062306a36Sopenharmony_civoid pvr2_context_global_done(void); 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci#endif /* __PVRUSB2_CONTEXT_H */ 73