xref: /OK3568_Linux_fs/kernel/Documentation/driver-api/media/dtv-common.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun.. SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunDigital TV Common functions
4*4882a593Smuzhiyun---------------------------
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunMath functions
7*4882a593Smuzhiyun~~~~~~~~~~~~~~
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunProvide some commonly-used math functions, usually required in order to
10*4882a593Smuzhiyunestimate signal strength and signal to noise measurements in dB.
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun.. kernel-doc:: include/media/dvb_math.h
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunDVB devices
16*4882a593Smuzhiyun~~~~~~~~~~~
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunThose functions are responsible for handling the DVB device nodes.
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun.. kernel-doc:: include/media/dvbdev.h
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunDigital TV Ring buffer
23*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~
24*4882a593Smuzhiyun
25*4882a593SmuzhiyunThose routines implement ring buffers used to handle digital TV data and
26*4882a593Smuzhiyuncopy it from/to userspace.
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun.. note::
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun  1) For performance reasons read and write routines don't check buffer sizes
31*4882a593Smuzhiyun     and/or number of bytes free/available. This has to be done before these
32*4882a593Smuzhiyun     routines are called. For example:
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun   .. code-block:: c
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun        /* write @buflen: bytes */
37*4882a593Smuzhiyun        free = dvb_ringbuffer_free(rbuf);
38*4882a593Smuzhiyun        if (free >= buflen)
39*4882a593Smuzhiyun                count = dvb_ringbuffer_write(rbuf, buffer, buflen);
40*4882a593Smuzhiyun        else
41*4882a593Smuzhiyun                /* do something */
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun        /* read min. 1000, max. @bufsize: bytes */
44*4882a593Smuzhiyun        avail = dvb_ringbuffer_avail(rbuf);
45*4882a593Smuzhiyun        if (avail >= 1000)
46*4882a593Smuzhiyun                count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize));
47*4882a593Smuzhiyun        else
48*4882a593Smuzhiyun                /* do something */
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun  2) If there is exactly one reader and one writer, there is no need
51*4882a593Smuzhiyun     to lock read or write operations.
52*4882a593Smuzhiyun     Two or more readers must be locked against each other.
53*4882a593Smuzhiyun     Flushing the buffer counts as a read operation.
54*4882a593Smuzhiyun     Resetting the buffer counts as a read and write operation.
55*4882a593Smuzhiyun     Two or more writers must be locked against each other.
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun.. kernel-doc:: include/media/dvb_ringbuffer.h
58*4882a593Smuzhiyun
59*4882a593SmuzhiyunDigital TV VB2 handler
60*4882a593Smuzhiyun~~~~~~~~~~~~~~~~~~~~~~
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun.. kernel-doc:: include/media/dvb_vb2.h
63