aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/dt3155/dt3155.h
blob: 2e158151a7551e011a6a642c4c330aa5cb7ee3ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*

Copyright 1996,2002,2005 Gregory D. Hager, Alfred A. Rizzi, Noah J. Cowan,
                         Jason Lapenta, Scott Smedley

This file is part of the DT3155 Device Driver.

The DT3155 Device Driver is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.

The DT3155 Device Driver is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with the DT3155 Device Driver; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA

  $Id: dt3155.h,v 1.11 2005/08/09 06:08:51 ssmedley Exp $

-- Changes --

  Date     Programmer  Description of changes made
  -------------------------------------------------------------------
  03-Jul-2000 JML     n/a
  10-Oct-2001 SS      port to 2.4 kernel.
  24-Jul-2002 SS      remove unused code & added GPL licence.
  05-Aug-2005 SS      port to 2.6 kernel; make CCIR mode default.

*/

#ifndef _DT3155_INC
#define _DT3155_INC

#ifdef __KERNEL__
#include <linux/types.h>	/* u_int etc. */
#include <linux/time.h>		/* struct timeval */
#else
#include <sys/ioctl.h>
#include <sys/param.h>
#include <sys/time.h>
#include <unistd.h>
#endif


#define TRUE  1
#define FALSE 0

/* Uncomment this for 50Hz CCIR */
#define CCIR 1

/* Can be 1 or 2 */
#define MAXBOARDS 1

#define BOARD_MAX_BUFFS 3
#define MAXBUFFERS BOARD_MAX_BUFFS*MAXBOARDS

#define PCI_PAGE_SIZE (1 << 12)

#ifdef CCIR
#define DT3155_MAX_ROWS 576
#define DT3155_MAX_COLS 768
#define FORMAT50HZ TRUE
#else
#define DT3155_MAX_ROWS 480
#define DT3155_MAX_COLS 640
#define FORMAT50HZ FALSE
#endif

/* Configuration structure */
struct dt3155_config_s {
  u_int acq_mode;
  u_int cols, rows;
  u_int continuous;
};


/* hold data for each frame */
typedef struct
{
  u_long addr;          /* address of the buffer with the frame */
  u_long tag;           /* unique number for the frame */
  struct timeval time;  /* time that capture took place */
} frame_info_t;

/* Structure for interrupt and buffer handling.  */
/* This is the setup for 1 card                  */
struct dt3155_fbuffer_s {
  int    nbuffers;

  frame_info_t frame_info[ BOARD_MAX_BUFFS ];

  int empty_buffers[ BOARD_MAX_BUFFS ];    /* indexes empty frames */
  int empty_len;                /* Number of empty buffers  */
                                /* Zero means empty */

  int active_buf;               /* Where data is currently dma'ing */
  int locked_buf;               /* Buffers used by user */

  int ready_que[ BOARD_MAX_BUFFS ];
  u_long ready_head;  /* The most recent buffer located here */
  u_long ready_len;   /* The number of ready buffers */

  int even_happened;
  int even_stopped;

  int stop_acquire;             /* Flag to stop interrupts */
  u_long frame_count;           /* Counter for frames acquired by this card */

};



#define DT3155_MODE_FRAME 1
#define DT3155_MODE_FIELD 2

#define DT3155_SNAP 1
#define DT3155_ACQ  2

/* There is one status structure for each card. */
typedef struct dt3155_status_s
{
  int fixed_mode;              /* if 1, we are in fixed frame mode */
  u_long reg_addr;             /* Register address for a single card */
  u_long mem_addr;             /* Buffer start addr for this card */
  u_long mem_size;             /* This is the amount of mem available  */
  u_int  irq;                  /* this card's irq */
  struct dt3155_config_s config;  /* configuration struct */
  struct dt3155_fbuffer_s fbuffer;/* frame buffer state struct */
  u_long state;                /* this card's state */
  u_int device_installed;      /* Flag if installed. 1=installed */
} dt3155_status_t;

/* Reference to global status structure */
extern struct dt3155_status_s dt3155_status[MAXBOARDS];

#define DT3155_STATE_IDLE    0x00
#define DT3155_STATE_FRAME   0x01
#define DT3155_STATE_FLD     0x02
#define DT3155_STATE_STOP   0x100
#define DT3155_STATE_ERROR  0x200
#define DT3155_STATE_MODE   0x0ff

#define DT3155_IOC_MAGIC     '!'

#define DT3155_SET_CONFIG  _IOW( DT3155_IOC_MAGIC, 1, struct dt3155_config_s )
#define DT3155_GET_CONFIG  _IOR( DT3155_IOC_MAGIC, 2, struct dt3155_status_s )
#define DT3155_STOP        _IO(  DT3155_IOC_MAGIC, 3 )
#define DT3155_START       _IO(  DT3155_IOC_MAGIC, 4 )
#define DT3155_FLUSH       _IO(  DT3155_IOC_MAGIC, 5 )
#define DT3155_IOC_MAXNR   5

/* Error codes */

#define DT_ERR_NO_BUFFERS   0x10000 /* not used but it might be one day - SS */
#define DT_ERR_CORRUPT      0x20000
#define DT_ERR_OVERRUN      0x30000
#define DT_ERR_I2C_TIMEOUT  0x40000
#define DT_ERR_MASK         0xff0000/* not used but it might be one day - SS */

/* User code will probably want to declare one of these for each card */
typedef struct dt3155_read_s
{
  u_long offset;
  u_long frame_seq;
  u_long state;

  frame_info_t frame_info;
} dt3155_read_t;

#endif /* _DT3155_inc */