Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/media/video/davinci/vpif_capture.h
17681 views
1
/*
2
* Copyright (C) 2009 Texas Instruments Inc
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*/
18
19
#ifndef VPIF_CAPTURE_H
20
#define VPIF_CAPTURE_H
21
22
#ifdef __KERNEL__
23
24
/* Header files */
25
#include <linux/videodev2.h>
26
#include <linux/version.h>
27
#include <media/v4l2-common.h>
28
#include <media/v4l2-device.h>
29
#include <media/videobuf-core.h>
30
#include <media/videobuf-dma-contig.h>
31
#include <mach/dm646x.h>
32
33
#include "vpif.h"
34
35
/* Macros */
36
#define VPIF_MAJOR_RELEASE 0
37
#define VPIF_MINOR_RELEASE 0
38
#define VPIF_BUILD 1
39
#define VPIF_CAPTURE_VERSION_CODE ((VPIF_MAJOR_RELEASE << 16) | \
40
(VPIF_MINOR_RELEASE << 8) | VPIF_BUILD)
41
42
#define VPIF_VALID_FIELD(field) (((V4L2_FIELD_ANY == field) || \
43
(V4L2_FIELD_NONE == field)) || \
44
(((V4L2_FIELD_INTERLACED == field) || \
45
(V4L2_FIELD_SEQ_TB == field)) || \
46
(V4L2_FIELD_SEQ_BT == field)))
47
48
#define VPIF_CAPTURE_MAX_DEVICES 2
49
#define VPIF_VIDEO_INDEX 0
50
#define VPIF_NUMBER_OF_OBJECTS 1
51
52
/* Enumerated data type to give id to each device per channel */
53
enum vpif_channel_id {
54
VPIF_CHANNEL0_VIDEO = 0,
55
VPIF_CHANNEL1_VIDEO,
56
};
57
58
struct video_obj {
59
enum v4l2_field buf_field;
60
/* Currently selected or default standard */
61
v4l2_std_id stdid;
62
u32 dv_preset;
63
struct v4l2_bt_timings bt_timings;
64
/* This is to track the last input that is passed to application */
65
u32 input_idx;
66
};
67
68
struct common_obj {
69
/* Pointer pointing to current v4l2_buffer */
70
struct videobuf_buffer *cur_frm;
71
/* Pointer pointing to current v4l2_buffer */
72
struct videobuf_buffer *next_frm;
73
/*
74
* This field keeps track of type of buffer exchange mechanism
75
* user has selected
76
*/
77
enum v4l2_memory memory;
78
/* Used to store pixel format */
79
struct v4l2_format fmt;
80
/* Buffer queue used in video-buf */
81
struct videobuf_queue buffer_queue;
82
/* Queue of filled frames */
83
struct list_head dma_queue;
84
/* Used in video-buf */
85
spinlock_t irqlock;
86
/* lock used to access this structure */
87
struct mutex lock;
88
/* number of users performing IO */
89
u32 io_usrs;
90
/* Indicates whether streaming started */
91
u8 started;
92
/* Function pointer to set the addresses */
93
void (*set_addr) (unsigned long, unsigned long, unsigned long,
94
unsigned long);
95
/* offset where Y top starts from the starting of the buffer */
96
u32 ytop_off;
97
/* offset where Y bottom starts from the starting of the buffer */
98
u32 ybtm_off;
99
/* offset where C top starts from the starting of the buffer */
100
u32 ctop_off;
101
/* offset where C bottom starts from the starting of the buffer */
102
u32 cbtm_off;
103
/* Indicates width of the image data */
104
u32 width;
105
/* Indicates height of the image data */
106
u32 height;
107
};
108
109
struct channel_obj {
110
/* Identifies video device for this channel */
111
struct video_device *video_dev;
112
/* Used to keep track of state of the priority */
113
struct v4l2_prio_state prio;
114
/* number of open instances of the channel */
115
int usrs;
116
/* Indicates id of the field which is being displayed */
117
u32 field_id;
118
/* flag to indicate whether decoder is initialized */
119
u8 initialized;
120
/* Identifies channel */
121
enum vpif_channel_id channel_id;
122
/* index into sd table */
123
int curr_sd_index;
124
/* ptr to current sub device information */
125
struct vpif_subdev_info *curr_subdev_info;
126
/* vpif configuration params */
127
struct vpif_params vpifparams;
128
/* common object array */
129
struct common_obj common[VPIF_NUMBER_OF_OBJECTS];
130
/* video object */
131
struct video_obj video;
132
};
133
134
/* File handle structure */
135
struct vpif_fh {
136
/* pointer to channel object for opened device */
137
struct channel_obj *channel;
138
/* Indicates whether this file handle is doing IO */
139
u8 io_allowed[VPIF_NUMBER_OF_OBJECTS];
140
/* Used to keep track priority of this instance */
141
enum v4l2_priority prio;
142
/* Used to indicate channel is initialize or not */
143
u8 initialized;
144
};
145
146
struct vpif_device {
147
struct v4l2_device v4l2_dev;
148
struct channel_obj *dev[VPIF_CAPTURE_NUM_CHANNELS];
149
struct v4l2_subdev **sd;
150
};
151
152
struct vpif_config_params {
153
u8 min_numbuffers;
154
u8 numbuffers[VPIF_CAPTURE_NUM_CHANNELS];
155
s8 device_type;
156
u32 min_bufsize[VPIF_CAPTURE_NUM_CHANNELS];
157
u32 channel_bufsize[VPIF_CAPTURE_NUM_CHANNELS];
158
u8 default_device[VPIF_CAPTURE_NUM_CHANNELS];
159
u8 max_device_type;
160
};
161
/* Struct which keeps track of the line numbers for the sliced vbi service */
162
struct vpif_service_line {
163
u16 service_id;
164
u16 service_line[2];
165
};
166
#endif /* End of __KERNEL__ */
167
#endif /* VPIF_CAPTURE_H */
168
169