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