OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [ieee1394/] [dv1394-private.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * dv1394-private.h - DV input/output over IEEE 1394 on OHCI chips
3
 *   Copyright (C)2001 Daniel Maas <dmaas@dcine.com>
4
 *     receive, proc_fs by Dan Dennedy <dan@dennedy.org>
5
 *
6
 * based on:
7
 *   video1394.h - driver for OHCI 1394 boards
8
 *   Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>
9
 *                          Peter Schlaile <udbz@rz.uni-karlsruhe.de>
10
 *
11
 * This program is free software; you can redistribute it and/or modify
12
 * it under the terms of the GNU General Public License as published by
13
 * the Free Software Foundation; either version 2 of the License, or
14
 * (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 * along with this program; if not, write to the Free Software Foundation,
23
 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24
 */
25
 
26
#ifndef _DV_1394_PRIVATE_H
27
#define _DV_1394_PRIVATE_H
28
 
29
#include "ieee1394.h"
30
#include "ohci1394.h"
31
#include "dma.h"
32
 
33
/* data structures private to the dv1394 driver */
34
/* none of this is exposed to user-space */
35
 
36
 
37
/*
38
   the 8-byte CIP (Common Isochronous Packet) header that precedes
39
   each packet of DV data.
40
 
41
   See the IEC 61883 standard.
42
*/
43
 
44
struct CIP_header { unsigned char b[8]; };
45
 
46
static inline void fill_cip_header(struct CIP_header *cip,
47
                                   unsigned char source_node_id,
48
                                   unsigned long counter,
49
                                   enum pal_or_ntsc format,
50
                                   unsigned long timestamp)
51
{
52
        cip->b[0] = source_node_id;
53
        cip->b[1] = 0x78; /* packet size in quadlets (480/4) - even for empty packets! */
54
        cip->b[2] = 0x00;
55
        cip->b[3] = counter;
56
 
57
        cip->b[4] = 0x80; /* const */
58
 
59
        switch(format) {
60
        case DV1394_PAL:
61
                cip->b[5] = 0x80;
62
                break;
63
        case DV1394_NTSC:
64
                cip->b[5] = 0x00;
65
                break;
66
        }
67
 
68
        cip->b[6] = timestamp >> 8;
69
        cip->b[7] = timestamp & 0xFF;
70
}
71
 
72
 
73
 
74
/*
75
   DMA commands used to program the OHCI's DMA engine
76
 
77
   See the Texas Instruments OHCI 1394 chipset documentation.
78
*/
79
 
80
struct output_more_immediate { u32 q[8]; };
81
struct output_more { u32 q[4]; };
82
struct output_last { u32 q[4]; };
83
struct input_more { u32 q[4]; };
84
struct input_last { u32 q[4]; };
85
 
86
/* outputs */
87
 
88
static inline void fill_output_more_immediate(struct output_more_immediate *omi,
89
                                              unsigned char tag,
90
                                              unsigned char channel,
91
                                              unsigned char sync_tag,
92
                                              unsigned int  payload_size)
93
{
94
        omi->q[0] = cpu_to_le32(0x02000000 | 8); /* OUTPUT_MORE_IMMEDIATE; 8 is the size of the IT header */
95
        omi->q[1] = 0;
96
        omi->q[2] = 0;
97
        omi->q[3] = 0;
98
 
99
        /* IT packet header */
100
        omi->q[4] = cpu_to_le32(  (0x0 << 16)  /* IEEE1394_SPEED_100 */
101
                                  | (tag << 14)
102
                                  | (channel << 8)
103
                                  | (TCODE_ISO_DATA << 4)
104
                                  | (sync_tag) );
105
 
106
        /* reserved field; mimic behavior of my Sony DSR-40 */
107
        omi->q[5] = cpu_to_le32((payload_size << 16) | (0x7F << 8) | 0xA0);
108
 
109
        omi->q[6] = 0;
110
        omi->q[7] = 0;
111
}
112
 
113
static inline void fill_output_more(struct output_more *om,
114
                                    unsigned int data_size,
115
                                    unsigned long data_phys_addr)
116
{
117
        om->q[0] = cpu_to_le32(data_size);
118
        om->q[1] = cpu_to_le32(data_phys_addr);
119
        om->q[2] = 0;
120
        om->q[3] = 0;
121
}
122
 
123
static inline void fill_output_last(struct output_last *ol,
124
                                    int want_timestamp,
125
                                    int want_interrupt,
126
                                    unsigned int data_size,
127
                                    unsigned long data_phys_addr)
128
{
129
        u32 temp = 0;
130
        temp |= 1 << 28; /* OUTPUT_LAST */
131
 
132
        if (want_timestamp) /* controller will update timestamp at DMA time */
133
                temp |= 1 << 27;
134
 
135
        if (want_interrupt)
136
                temp |= 3 << 20;
137
 
138
        temp |= 3 << 18; /* must take branch */
139
        temp |= data_size;
140
 
141
        ol->q[0] = cpu_to_le32(temp);
142
        ol->q[1] = cpu_to_le32(data_phys_addr);
143
        ol->q[2] = 0;
144
        ol->q[3] = 0;
145
}
146
 
147
/* inputs */
148
 
149
static inline void fill_input_more(struct input_more *im,
150
                                   int want_interrupt,
151
                                   unsigned int data_size,
152
                                   unsigned long data_phys_addr)
153
{
154
        u32 temp =  2 << 28; /* INPUT_MORE */
155
        temp |= 8 << 24; /* s = 1, update xferStatus and resCount */
156
        if (want_interrupt)
157
                temp |= 0 << 20; /* interrupts, i=0 in packet-per-buffer mode */
158
        temp |= 0x0 << 16; /* disable branch to address for packet-per-buffer mode */
159
                               /* disable wait on sync field, not used in DV :-( */
160
        temp |= data_size;
161
 
162
        im->q[0] = cpu_to_le32(temp);
163
        im->q[1] = cpu_to_le32(data_phys_addr);
164
        im->q[2] = 0; /* branchAddress and Z not use in packet-per-buffer mode */
165
        im->q[3] = 0; /* xferStatus & resCount, resCount must be initialize to data_size */
166
}
167
 
168
static inline void fill_input_last(struct input_last *il,
169
                                    int want_interrupt,
170
                                    unsigned int data_size,
171
                                    unsigned long data_phys_addr)
172
{
173
        u32 temp =  3 << 28; /* INPUT_LAST */
174
        temp |= 8 << 24; /* s = 1, update xferStatus and resCount */
175
        if (want_interrupt)
176
                temp |= 3 << 20; /* enable interrupts */
177
        temp |= 0xC << 16; /* enable branch to address */
178
                               /* disable wait on sync field, not used in DV :-( */
179
        temp |= data_size;
180
 
181
        il->q[0] = cpu_to_le32(temp);
182
        il->q[1] = cpu_to_le32(data_phys_addr);
183
        il->q[2] = cpu_to_le32(1); /* branchAddress (filled in later) and Z = 1 descriptor in next block */
184
        il->q[3] = cpu_to_le32(data_size); /* xferStatus & resCount, resCount must be initialize to data_size */
185
}
186
 
187
 
188
 
189
/*
190
   A "DMA descriptor block" consists of several contiguous DMA commands.
191
   struct DMA_descriptor_block encapsulates all of the commands necessary
192
   to send one packet of DV data.
193
 
194
   There are three different types of these blocks:
195
 
196
        1) command to send an empty packet (CIP header only, no DV data):
197
 
198
            OUTPUT_MORE-Immediate <-- contains the iso header in-line
199
            OUTPUT_LAST           <-- points to the CIP header
200
 
201
        2) command to send a full packet when the DV data payload does NOT
202
           cross a page boundary:
203
 
204
            OUTPUT_MORE-Immediate <-- contains the iso header in-line
205
            OUTPUT_MORE           <-- points to the CIP header
206
            OUTPUT_LAST           <-- points to entire DV data payload
207
 
208
        3) command to send a full packet when the DV payload DOES cross
209
           a page boundary:
210
 
211
            OUTPUT_MORE-Immediate <-- contains the iso header in-line
212
            OUTPUT_MORE           <-- points to the CIP header
213
            OUTPUT_MORE           <-- points to first part of DV data payload
214
            OUTPUT_LAST           <-- points to second part of DV data payload
215
 
216
   This struct describes all three block types using unions.
217
 
218
   !!! It is vital that an even number of these descriptor blocks fit on one
219
   page of memory, since a block cannot cross a page boundary !!!
220
 
221
 */
222
 
223
struct DMA_descriptor_block {
224
 
225
        union {
226
                struct {
227
                        /*  iso header, common to all output block types */
228
                        struct output_more_immediate omi;
229
 
230
                        union {
231
                                /* empty packet */
232
                                struct {
233
                                        struct output_last ol;  /* CIP header */
234
                                } empty;
235
 
236
                                /* full packet */
237
                                struct {
238
                                        struct output_more om;  /* CIP header */
239
 
240
                                        union {
241
                                               /* payload does not cross page boundary */
242
                                                struct {
243
                                                        struct output_last ol;  /* data payload */
244
                                                } nocross;
245
 
246
                                               /* payload crosses page boundary */
247
                                                struct {
248
                                                        struct output_more om;  /* data payload */
249
                                                        struct output_last ol;  /* data payload */
250
                                                } cross;
251
                                        } u;
252
 
253
                                } full;
254
                        } u;
255
                } out;
256
 
257
                struct {
258
                        struct input_last il;
259
                } in;
260
 
261
        } u;
262
 
263
        /* ensure that PAGE_SIZE % sizeof(struct DMA_descriptor_block) == 0
264
           by padding out to 128 bytes */
265
        u32 __pad__[12];
266
};
267
 
268
 
269
/* struct frame contains all data associated with one frame in the
270
   ringbuffer these are allocated when the DMA context is initialized
271
   do_dv1394_init().  They are re-used after the card finishes
272
   transmitting the frame. */
273
 
274
struct video_card; /* forward declaration */
275
 
276
struct frame {
277
 
278
        /* points to the struct video_card that owns this frame */
279
        struct video_card *video;
280
 
281
        /* index of this frame in video_card->frames[] */
282
        unsigned int frame_num;
283
 
284
        /* FRAME_CLEAR - DMA program not set up, waiting for data
285
           FRAME_READY - DMA program written, ready to transmit
286
 
287
           Changes to these should be locked against the interrupt
288
        */
289
        enum {
290
                FRAME_CLEAR = 0,
291
                FRAME_READY
292
        } state;
293
 
294
        /* whether this frame has been DMA'ed already; used only from
295
           the IRQ handler to determine whether the frame can be reset */
296
        int done;
297
 
298
 
299
        /* kernel virtual pointer to the start of this frame's data in
300
           the user ringbuffer. Use only for CPU access; to get the DMA
301
           bus address you must go through the video->user_dma mapping */
302
        unsigned long data;
303
 
304
        /* Max # of packets per frame */
305
#define MAX_PACKETS 500
306
 
307
 
308
        /* a PAGE_SIZE memory pool for allocating CIP headers
309
           !header_pool must be aligned to PAGE_SIZE! */
310
        struct CIP_header *header_pool;
311
        dma_addr_t         header_pool_dma;
312
 
313
 
314
        /* a physically contiguous memory pool for allocating DMA
315
           descriptor blocks; usually around 64KB in size
316
           !descriptor_pool must be aligned to PAGE_SIZE! */
317
        struct DMA_descriptor_block *descriptor_pool;
318
        dma_addr_t                   descriptor_pool_dma;
319
        unsigned long                descriptor_pool_size;
320
 
321
 
322
        /* # of packets allocated for this frame */
323
        unsigned int n_packets;
324
 
325
 
326
        /* below are several pointers (kernel virtual addresses, not
327
           DMA bus addresses) to parts of the DMA program.  These are
328
           set each time the DMA program is written in
329
           frame_prepare(). They are used later on, e.g. from the
330
           interrupt handler, to check the status of the frame */
331
 
332
        /* points to status/timestamp field of first DMA packet */
333
        /* (we'll check it later to monitor timestamp accuracy) */
334
        u32 *frame_begin_timestamp;
335
 
336
        /* the timestamp we assigned to the first packet in the frame */
337
        u32 assigned_timestamp;
338
 
339
        /* pointer to the first packet's CIP header (where the timestamp goes) */
340
        struct CIP_header *cip_syt1;
341
 
342
        /* pointer to the second packet's CIP header
343
           (only set if the first packet was empty) */
344
        struct CIP_header *cip_syt2;
345
 
346
        /* in order to figure out what caused an interrupt,
347
           store pointers to the status fields of the two packets
348
           that can cause interrupts. We'll check these from the
349
           interrupt handler.
350
        */
351
        u32 *mid_frame_timestamp;
352
        u32 *frame_end_timestamp;
353
 
354
        /* branch address field of final packet. This is effectively
355
           the "tail" in the chain of DMA descriptor blocks.
356
           We will fill it with the address of the first DMA descriptor
357
           block in the subsequent frame, once it is ready.
358
        */
359
        u32 *frame_end_branch;
360
 
361
        /* the number of descriptors in the first descriptor block
362
           of the frame. Needed to start DMA */
363
        int first_n_descriptors;
364
};
365
 
366
 
367
struct packet {
368
        u16     timestamp;
369
        u16     invalid;
370
        u16     iso_header;
371
        u16     data_length;
372
        u32     cip_h1;
373
        u32     cip_h2;
374
        unsigned char data[480];
375
        unsigned char padding[16]; /* force struct size =512 for page alignment */
376
};
377
 
378
 
379
/* allocate/free a frame */
380
static struct frame* frame_new(unsigned int frame_num, struct video_card *video);
381
static void frame_delete(struct frame *f);
382
 
383
/* reset f so that it can be used again */
384
static void frame_reset(struct frame *f);
385
 
386
/* struct video_card contains all data associated with one instance
387
   of the dv1394 driver
388
*/
389
enum modes {
390
        MODE_RECEIVE,
391
        MODE_TRANSMIT
392
};
393
 
394
struct video_card {
395
 
396
        /* ohci card to which this instance corresponds */
397
        struct ti_ohci *ohci;
398
 
399
        /* OHCI card id; the link between the VFS inode and a specific video_card
400
           (essentially the device minor number) */
401
        int id;
402
 
403
        /* entry in dv1394_cards */
404
        struct list_head list;
405
 
406
        /* handle to /dev/ieee1394/dv/N, NULL if devfs not in use */
407
        devfs_handle_t devfs_handle;
408
 
409
        /* OHCI card IT DMA context number, -1 if not in use */
410
        int ohci_it_ctx;
411
        struct ohci1394_iso_tasklet it_tasklet;
412
 
413
        /* register offsets for current IT DMA context, 0 if not in use */
414
        u32 ohci_IsoXmitContextControlSet;
415
        u32 ohci_IsoXmitContextControlClear;
416
        u32 ohci_IsoXmitCommandPtr;
417
 
418
        /* OHCI card IR DMA context number, -1 if not in use */
419
        struct ohci1394_iso_tasklet ir_tasklet;
420
        int ohci_ir_ctx;
421
 
422
        /* register offsets for current IR DMA context, 0 if not in use */
423
        u32 ohci_IsoRcvContextControlSet;
424
        u32 ohci_IsoRcvContextControlClear;
425
        u32 ohci_IsoRcvCommandPtr;
426
        u32 ohci_IsoRcvContextMatch;
427
 
428
 
429
        /* CONCURRENCY CONTROL */
430
 
431
        /* there are THREE levels of locking associated with video_card. */
432
 
433
        /*
434
           1) the 'open' flag - this prevents more than one process from
435
           opening the device. (the driver currently assumes only one opener).
436
           This is a regular int, but use test_and_set_bit() (on bit zero)
437
           for atomicity.
438
         */
439
        unsigned long open;
440
 
441
        /*
442
           2) the spinlock - this provides mutual exclusion between the interrupt
443
           handler and process-context operations. Generally you must take the
444
           spinlock under the following conditions:
445
             1) DMA (and hence the interrupt handler) may be running
446
             AND
447
             2) you need to operate on the video_card, especially active_frame
448
 
449
             It is OK to play with video_card without taking the spinlock if
450
             you are certain that DMA is not running. Even if DMA is running,
451
             it is OK to *read* active_frame with the lock, then drop it
452
             immediately. This is safe because the interrupt handler will never
453
             advance active_frame onto a frame that is not READY (and the spinlock
454
             must be held while marking a frame READY).
455
 
456
             spinlock is also used to protect ohci_it_ctx and ohci_ir_ctx,
457
             which can be accessed from both process and interrupt context
458
         */
459
        spinlock_t spinlock;
460
 
461
        /* flag to prevent spurious interrupts (which OHCI seems to
462
           generate a lot :) from accessing the struct */
463
        int dma_running;
464
 
465
        /*
466
          3) the sleeping semaphore 'sem' - this is used from process context only,
467
          to serialize various operations on the video_card. Even though only one
468
          open() is allowed, we still need to prevent multiple threads of execution
469
          from entering calls like read, write, ioctl, etc.
470
 
471
          I honestly can't think of a good reason to use dv1394 from several threads
472
          at once, but we need to serialize anyway to prevent oopses =).
473
 
474
          NOTE: if you need both spinlock and sem, take sem first to avoid deadlock!
475
         */
476
        struct semaphore sem;
477
 
478
        /* people waiting for buffer space, please form a line here... */
479
        wait_queue_head_t waitq;
480
 
481
        /* support asynchronous I/O signals (SIGIO) */
482
        struct fasync_struct *fasync;
483
 
484
        /* the large, non-contiguous (rvmalloc()) ringbuffer for DV
485
           data, exposed to user-space via mmap() */
486
        unsigned long      dv_buf_size;
487
        struct dma_region  dv_buf;
488
 
489
        /* next byte in the ringbuffer that a write() call will fill */
490
        size_t write_off;
491
 
492
        struct frame *frames[DV1394_MAX_FRAMES];
493
 
494
        /* n_frames also serves as an indicator that this struct video_card is
495
           initialized and ready to run DMA buffers */
496
 
497
        int n_frames;
498
 
499
        /* this is the frame that is currently "owned" by the OHCI DMA controller
500
           (set to -1 iff DMA is not running)
501
 
502
           ! must lock against the interrupt handler when accessing it !
503
 
504
           RULES:
505
 
506
               Only the interrupt handler may change active_frame if DMA
507
                  is running; if not, process may change it
508
 
509
               If the next frame is READY, the interrupt handler will advance
510
               active_frame when the current frame is finished.
511
 
512
               If the next frame is CLEAR, the interrupt handler will re-transmit
513
               the current frame, and the dropped_frames counter will be  incremented.
514
 
515
               The interrupt handler will NEVER advance active_frame to a
516
               frame that is not READY.
517
 
518
        */
519
        int active_frame;
520
        int first_run;
521
 
522
        /* the same locking rules apply to these three fields also: */
523
 
524
        /* altered ONLY from process context. Must check first_clear_frame->state;
525
           if it's READY, that means the ringbuffer is full with READY frames;
526
           if it's CLEAR, that means one or more ringbuffer frames are CLEAR */
527
        unsigned int first_clear_frame;
528
 
529
        /* altered both by process and interrupt */
530
        unsigned int n_clear_frames;
531
 
532
        /* only altered by the interrupt */
533
        unsigned int dropped_frames;
534
 
535
 
536
 
537
        /* the CIP accumulator and continuity counter are properties
538
           of the DMA stream as a whole (not a single frame), so they
539
           are stored here in the video_card */
540
 
541
        unsigned long cip_accum;
542
        unsigned long cip_n, cip_d;
543
        unsigned int syt_offset;
544
        unsigned int continuity_counter;
545
 
546
        enum pal_or_ntsc pal_or_ntsc;
547
 
548
        /* redundant, but simplifies the code somewhat */
549
        unsigned int frame_size; /* in bytes */
550
 
551
        /* the isochronous channel to use, -1 if video card is inactive */
552
        int channel;
553
 
554
 
555
        /* physically contiguous packet ringbuffer for receive */
556
        struct dma_region packet_buf;
557
        unsigned long  packet_buf_size;
558
 
559
        unsigned int current_packet;
560
        int first_frame;        /* received first start frame marker? */
561
        enum modes mode;
562
};
563
 
564
/*
565
   if the video_card is not initialized, then the ONLY fields that are valid are:
566
   ohci
567
   open
568
   n_frames
569
*/
570
 
571
static inline int video_card_initialized(struct video_card *v)
572
{
573
        return v->n_frames > 0;
574
}
575
 
576
static int do_dv1394_init(struct video_card *video, struct dv1394_init *init);
577
static int do_dv1394_init_default(struct video_card *video);
578
static void do_dv1394_shutdown(struct video_card *video, int free_user_buf);
579
 
580
 
581
/* NTSC empty packet rate accurate to within 0.01%,
582
   calibrated against a Sony DSR-40 DVCAM deck */
583
 
584
#define CIP_N_NTSC   68000000
585
#define CIP_D_NTSC 1068000000
586
 
587
#define CIP_N_PAL  1
588
#define CIP_D_PAL 16
589
 
590
#endif /* _DV_1394_PRIVATE_H */
591
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.