3.1. 数字电视通用功能¶
3.1.1. DVB 设备¶
这些函数负责处理 DVB 设备节点。
-
enum dvb_device_type¶
数字电视设备的类型
常量
DVB_DEVICE_SEC
数字电视独立通用接口 (CI)
DVB_DEVICE_FRONTEND
数字电视前端。
DVB_DEVICE_DEMUX
数字电视解复用器。
DVB_DEVICE_DVR
数字电视数字视频录像 (DVR)。
DVB_DEVICE_CA
数字电视条件访问 (CA)。
DVB_DEVICE_NET
数字电视网络。
DVB_DEVICE_VIDEO
数字电视视频解码器。已弃用。仅在 av7110-av 上使用。
DVB_DEVICE_AUDIO
数字电视音频解码器。已弃用。仅在 av7110-av 上使用。
DVB_DEVICE_OSD
数字电视屏幕显示 (OSD)。已弃用。仅在 av7110 上使用。
-
struct dvb_adapter¶
表示使用 Linux DVB API 的数字电视适配器
定义:
struct dvb_adapter {
int num;
struct list_head list_head;
struct list_head device_list;
const char *name;
u8 proposed_mac [6];
void* priv;
struct device *device;
struct module *module;
int mfe_shared;
struct dvb_device *mfe_dvbdev;
struct mutex mfe_lock;
#if defined(CONFIG_MEDIA_CONTROLLER_DVB);
struct mutex mdev_lock;
struct media_device *mdev;
struct media_entity *conn;
struct media_pad *conn_pads;
#endif;
};
成员
num
适配器的编号
list_head
包含 DVB 适配器的列表
device_list
包含 DVB 设备的列表
name
适配器的名称
proposed_mac
适配器建议的 MAC 地址
priv
私有数据
device
指向
struct device
的指针module
指向 struct module 的指针
mfe_shared
指示互斥前端。1 = 传统排除行为:阻止任何 open() 调用 2 = 增强的排除行为,模拟繁忙前端的标准行为:允许只读共享,否则当任何前端已经以写入访问方式打开时,立即返回 -EBUSY。
mfe_dvbdev
正在使用的前端设备,在 MFE 的情况下
mfe_lock
用于在使用 MFE 时防止使用其他前端的锁。
mdev_lock
保护对 mdev 指针的访问。
mdev
指向
struct media_device
的指针,在使用媒体控制器时使用。conn
射频连接器。仅当设备没有单独的调谐器时才使用。
conn_pads
指向与 conn 关联的
struct media_pad
的指针;
-
struct dvb_device¶
表示 DVB 设备节点
定义:
struct dvb_device {
struct list_head list_head;
struct kref ref;
const struct file_operations *fops;
struct dvb_adapter *adapter;
enum dvb_device_type type;
int minor;
u32 id;
int readers;
int writers;
int users;
wait_queue_head_t wait_queue;
int (*kernel_ioctl)(struct file *file, unsigned int cmd, void *arg);
#if defined(CONFIG_MEDIA_CONTROLLER_DVB);
const char *name;
struct media_intf_devnode *intf_devnode;
unsigned tsout_num_entities;
struct media_entity *entity, *tsout_entity;
struct media_pad *pads, *tsout_pads;
#endif;
void *priv;
};
成员
list_head
包含所有 DVB 设备的列表头
ref
此设备的引用计数
fops
指向 struct file_operations 的指针
adapter
指向持有此设备节点的适配器的指针
type
设备的类型,由
enum dvb_device_type
定义。minor
设备节点次设备号。主设备号始终为 DVB_MAJOR。
id
设备 ID 号,在适配器内部
readers
由调用者初始化。每次以只读模式调用 open() 都会使此计数器减一。
writers
由调用者初始化。每次以读/写模式调用 open() 都会使此计数器减一。
users
由调用者初始化。每次以任何模式调用 open() 都会使此计数器减一。
wait_queue
等待队列,用于等待 DVB API 调用者内部的某些事件
kernel_ioctl
用于处理来自用户空间的 ioctl 调用的回调函数。
name
要在媒体控制器中用于设备的名称
intf_devnode
指向 media_intf_devnode 的指针。由 dvbdev 核心用于存储 MC 设备节点接口
tsout_num_entities
传输流输出实体的数量
entity
指向与设备节点关联的
struct media_entity
的指针tsout_entity
包含与每个 TS 输出节点关联的 MC 实体的数组
pads
指向与 entity 关联的
struct media_pad
的指针;tsout_pads
包含每个 tsout_entity 的源焊盘的数组
priv
私有数据
描述
此结构由 DVB 核心(前端、CA、net、解复用器)用于创建设备节点。通常,驱动程序不应直接初始化此结构。
-
struct dvbdevfops_node¶
在 dvbdevfops_list 中注册的 fops 节点
定义:
struct dvbdevfops_node {
struct file_operations *fops;
enum dvb_device_type type;
const struct dvb_device *template;
struct list_head list_head;
};
成员
fops
为 ->owner 注册动态分配的 fops
type
dvb_device 的类型
template
用于注册的 dvb_device
list_head
dvbdevfops_list 的 list_head
-
struct dvb_device *dvb_device_get(struct dvb_device *dvbdev)¶
增加 dvb_device 引用
参数
struct dvb_device *dvbdev
指向
struct dvb_device
的指针
-
void dvb_device_put(struct dvb_device *dvbdev)¶
减少 dvb_device 引用
参数
struct dvb_device *dvbdev
指向
struct dvb_device
的指针
-
int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module, struct device *device, short *adapter_nums)¶
注册新的 DVB 适配器
参数
struct dvb_adapter *adap
指向
struct dvb_adapter
的指针const char *name
适配器的名称
struct module *module
在调用者处使用 THIS_MODULE 初始化
struct device *device
指向与设备驱动程序对应的
struct device
的指针short *adapter_nums
包含 dvb_register_adapter 的编号列表的数组;用于从中选择。通常,使用以下内容初始化:DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nums)
-
int dvb_unregister_adapter(struct dvb_adapter *adap)¶
注销 DVB 适配器
参数
struct dvb_adapter *adap
指向
struct dvb_adapter
的指针
-
int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, const struct dvb_device *template, void *priv, enum dvb_device_type type, int demux_sink_pads)¶
注册新的 DVB 设备
参数
struct dvb_adapter *adap
指向
struct dvb_adapter
的指针struct dvb_device **pdvbdev
指向将存储新的
struct dvb_device
的位置的指针const struct dvb_device *template
用于创建
pdvbdev
的模板;void *priv
私有数据
enum dvb_device_type type
设备的类型,由
enum dvb_device_type
定义。int demux_sink_pads
解复用器输出的数量,用于通过媒体控制器创建 TS 输出。
-
void dvb_remove_device(struct dvb_device *dvbdev)¶
删除已注册的 DVB 设备
-
void dvb_unregister_device(struct dvb_device *dvbdev)¶
注销 DVB 设备
参数
struct dvb_device *dvbdev
指向
struct dvb_device
的指针
-
int dvb_create_media_graph(struct dvb_adapter *adap, bool create_rf_connector)¶
为设备的数字电视部分创建媒体图。
参数
struct dvb_adapter *adap
指向
struct dvb_adapter
的指针bool create_rf_connector
如果为真,则也会创建射频连接器
描述
此函数检查媒体控制器实体中的所有 DVB 相关函数,并为媒体图创建所需的链接。它能够处理多个调谐器或多个前端,但如果设备有多个调谐器和多个前端,或者设备有多个复用器,则不会创建链接。在这种情况下,调用方驱动程序应手动创建剩余的链接。
-
void dvb_register_media_controller(struct dvb_adapter *adap, struct media_device *mdev)¶
在 DVB 适配器处注册媒体控制器
参数
struct dvb_adapter *adap
指向
struct dvb_adapter
的指针struct media_device *mdev
指向
struct media_device
的指针
-
struct media_device *dvb_get_media_controller(struct dvb_adapter *adap)¶
获取关联的媒体控制器
参数
struct dvb_adapter *adap
指向
struct dvb_adapter
的指针
参数
struct inode *inode
指向
struct inode
的指针。struct file *file
指向
struct file
的指针。
描述
检查 DVB 设备节点是否仍然有效,权限是否正确,并递增负使用计数。
参数
struct inode *inode
指向
struct inode
的指针。struct file *file
指向
struct file
的指针。
描述
检查 DVB 设备节点是否仍然有效,权限是否正确,并递减负使用计数。
参数
struct file *file
指向
struct file
的指针。unsigned int cmd
Ioctl 名称。
unsigned long arg
Ioctl 参数。
描述
检查 DVB 设备节点和 struct dvbdev.kernel_ioctl 是否仍然有效。如果有效,则调用 dvb_usercopy()
。
-
int dvb_usercopy(struct file *file, unsigned int cmd, unsigned long arg, int (*func)(struct file *file, unsigned int cmd, void *arg))¶
在发出 ioctl 时,从/向用户空间内存复制数据。
参数
struct file *file
指向 struct
file
的指针。unsigned int cmd
Ioctl 名称。
unsigned long arg
Ioctl 参数。
int (*func)(struct file *file, unsigned int cmd, void *arg)
实际处理 ioctl 的函数
描述
辅助函数,使用 ioctl 方向和大小从用户空间复制。然后,它调用 func,如果需要,将数据复制回用户空间。
-
struct i2c_client *dvb_module_probe(const char *module_name, const char *name, struct i2c_adapter *adap, unsigned char addr, void *platform_data)¶
用于探测 I2C 模块的辅助例程
参数
const char *module_name
要探测的 I2C 模块的名称
const char *name
I2C 模块的可选名称。用于调试目的。如果为
NULL
,则默认为 module_name。struct i2c_adapter *adap
指向描述将绑定模块的 I2C 适配器的
struct i2c_adapter
的指针。unsigned char addr
适配器的 I2C 地址,以 7 位表示法。
void *platform_data
要传递给探测的 I2C 模块的平台数据。
描述
此函数将 I2C 设备绑定到 DVB 核心。所有使用 I2C 总线控制硬件的驱动程序都应使用此函数。使用 dvb_module_probe()
绑定的模块应使用 dvb_module_release()
解绑定。
注意
过去,DVB 模块(主要是前端)通过 dvb_attach()
宏绑定,该宏使用 I2C 底层函数进行丑陋的黑客攻击。这种用法已弃用,并将很快删除。相反,请使用此例程。
返回
成功时,返回一个指向绑定的 I2C 设备的
struct i2c_client
。NULL
否则。
-
void dvb_module_release(struct i2c_client *client)¶
释放使用
dvb_module_probe()
分配的 I2C 设备。
参数
struct i2c_client *client
指向要释放的 I2C 客户端的
struct i2c_client
的指针。可以为NULL
。
描述
此函数应用于释放 dvb_module_probe()
保留的所有资源,并解除 I2C 硬件的绑定。
-
dvb_attach¶
dvb_attach (FUNCTION, ARGS...)
将 DVB 前端附加到 DVB 核心。
参数
FUNCTION
要调用的前端模块上的函数。
ARGS...
FUNCTION 参数。
描述
此辅助函数在运行时加载前端模块,并在其中使用 ARGS 运行 FUNCTION 函数。由于它会递增符号使用计数,因此在取消注册时,应调用 dvb_detach()
。
注意
过去,DVB 模块(主要是前端)通过 dvb_attach()
宏绑定,该宏使用 I2C 底层函数进行丑陋的黑客攻击。这种用法已弃用,并将很快删除。相反,您应该使用 dvb_module_probe()
。
-
dvb_detach¶
dvb_detach (FUNC)
分离通过
dvb_attach()
加载的 DVB 前端
3.1.2. 数字电视环形缓冲区¶
这些例程实现用于处理数字电视数据并将其从/向用户空间复制的环形缓冲区。
注意
出于性能原因,读取和写入例程不会检查缓冲区大小和/或可用/空闲的字节数。这必须在调用这些例程之前完成。例如
/* write @buflen: bytes */ free = dvb_ringbuffer_free(rbuf); if (free >= buflen) count = dvb_ringbuffer_write(rbuf, buffer, buflen); else /* do something */ /* read min. 1000, max. @bufsize: bytes */ avail = dvb_ringbuffer_avail(rbuf); if (avail >= 1000) count = dvb_ringbuffer_read(rbuf, buffer, min(avail, bufsize)); else /* do something */
如果只有一个读取器和一个写入器,则无需锁定读取或写入操作。必须相互锁定两个或多个读取器。刷新缓冲区算作读取操作。重置缓冲区算作读取和写入操作。必须相互锁定两个或多个写入器。
-
struct dvb_ringbuffer¶
描述 DVB 框架中使用的环形缓冲区
定义:
struct dvb_ringbuffer {
u8 *data;
ssize_t size;
ssize_t pread;
ssize_t pwrite;
int error;
wait_queue_head_t queue;
spinlock_t lock;
};
成员
data
写入环形缓冲区数据的区域
size
环形缓冲区的大小
pread
要读取的下一个位置
pwrite
要写入的下一个位置
error
由环形缓冲区客户端用于指示发生了错误。
queue
环形缓冲区客户端用于指示缓冲区已满的等待队列
锁
用于保护环形缓冲区的自旋锁
-
void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len)¶
初始化环形缓冲区、锁和队列
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针void *data
指向将存储数据的缓冲区的指针
size_t len
从环形缓冲区到 buf 的字节数
-
int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf)¶
测试缓冲区是否为空
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针
-
ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf)¶
返回缓冲区中空闲字节的数量
-
ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf)¶
返回缓冲区中等待的字节数
-
void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf)¶
将环形缓冲区重置为初始状态
-
void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf)¶
刷新缓冲区
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针
-
void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf)¶
刷新受自旋锁保护的缓冲区并唤醒等待任务
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针
-
DVB_RINGBUFFER_PEEK¶
DVB_RINGBUFFER_PEEK (rbuf, offs)
查看缓冲区中字节 offs
参数
rbuf
指向
struct dvb_ringbuffer
的指针offs
环形缓冲区内的偏移量
-
DVB_RINGBUFFER_SKIP¶
DVB_RINGBUFFER_SKIP (rbuf, num)
将读取指针前进 num 字节
参数
rbuf
指向
struct dvb_ringbuffer
的指针num
要前进的字节数
-
ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf, u8 __user *buf, size_t len)¶
将缓冲区读取到用户指针中
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针u8 __user *buf
指向将存储数据的缓冲区的指针
size_t len
从环形缓冲区到 buf 的字节数
描述
此变体假设缓冲区是用户空间中的内存。因此,它将在内部调用 copy_to_user()。
返回
传输的字节数或 -EFAULT
-
void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len)¶
将缓冲区读取到指针中
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针u8 *buf
指向将存储数据的缓冲区的指针
size_t len
从环形缓冲区到 buf 的字节数
描述
此变体假设缓冲区是内核空间中的内存
返回
传输的字节数或 -EFAULT
-
DVB_RINGBUFFER_WRITE_BYTE¶
DVB_RINGBUFFER_WRITE_BYTE (rbuf, byte)
将单个字节写入环形缓冲区
参数
rbuf
指向
struct dvb_ringbuffer
的指针字节
要写入的字节
-
ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf, size_t len)¶
将缓冲区写入环形缓冲区
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针const u8 *buf
指向将读取数据的缓冲区的指针
size_t len
从环形缓冲区到 buf 的字节数
描述
此变体假设缓冲区是内核空间中的内存
返回
传输的字节数或 -EFAULT
-
ssize_t dvb_ringbuffer_write_user(struct dvb_ringbuffer *rbuf, const u8 __user *buf, size_t len)¶
写入通过用户指针接收的缓冲区
参数
struct dvb_ringbuffer *rbuf
指向
struct dvb_ringbuffer
的指针const u8 __user *buf
指向将读取数据的缓冲区的指针
size_t len
从环形缓冲区到 buf 的字节数
描述
此变体假设缓冲区是用户空间中的内存。因此,它将在内部调用 copy_from_user()。
返回
传输的字节数或 -EFAULT
-
ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len)¶
将数据包写入环形缓冲区。
参数
struct dvb_ringbuffer *rbuf
要写入的环形缓冲区。
u8 *buf
要写入的缓冲区。
size_t len
缓冲区长度(当前限制为最大 65535 字节)。
返回
写入的字节数,或 -EFAULT、-ENOMEM、-EINVAL。
-
ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx, int offset, u8 __user *buf, size_t len)¶
从环形缓冲区中的数据包读取。
参数
struct dvb_ringbuffer *rbuf
相关的环形缓冲区。
size_t idx
由
dvb_ringbuffer_pkt_next()
返回的数据包索引。int offset
要从中读取的数据包中的偏移量。
u8 __user *buf
数据的目标缓冲区。
size_t len
目标缓冲区的大小。
返回
读取的字节数,或 -EFAULT。
描述
注意
与 dvb_ringbuffer_read()
不同,这 不会 更新环形缓冲区中的读取指针。您必须使用 dvb_ringbuffer_pkt_dispose()
将数据包标记为不再需要。
-
ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx, int offset, u8 *buf, size_t len)¶
从环形缓冲区中的数据包读取。
参数
struct dvb_ringbuffer *rbuf
相关的环形缓冲区。
size_t idx
由
dvb_ringbuffer_pkt_next()
返回的数据包索引。int offset
要从中读取的数据包中的偏移量。
u8 *buf
数据的目标缓冲区。
size_t len
目标缓冲区的大小。
注意
与 dvb_ringbuffer_read_user()
不同,这 确实 更新了环形缓冲区中的读取指针。
返回
读取的字节数,或 -EFAULT。
-
void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx)¶
处理环形缓冲区中的数据包。
参数
struct dvb_ringbuffer *rbuf
相关的环形缓冲区。
size_t idx
由
dvb_ringbuffer_pkt_next()
返回的数据包索引。
-
ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t *pktlen)¶
获取环形缓冲区中下一个数据包的索引。
参数
struct dvb_ringbuffer *rbuf
相关的环形缓冲区。
size_t idx
上一个数据包索引,或 -1 以返回第一个数据包索引。
size_t *pktlen
成功后,将被更新以包含数据包的长度(以字节为单位)。返回数据包索引(如果 >=0),如果没有可用的数据包,则返回 -1。
3.1.3. 数字电视 VB2 处理程序¶
-
enum dvb_buf_type¶
数字电视内存映射缓冲区类型
常量
DVB_BUF_TYPE_CAPTURE
缓冲区由内核填充,包含接收到的数字电视流
-
enum dvb_vb2_states¶
用于控制 VB2 状态机的状态
常量
DVB_VB2_STATE_NONE
VB2 引擎尚未初始化、初始化失败或 VB2 已释放。
DVB_VB2_STATE_INIT
VB2 引擎已初始化。
DVB_VB2_STATE_REQBUFS
已请求缓冲区
DVB_VB2_STATE_STREAMON
VB2 正在流式传输。调用者不应直接检查它。相反,他们应该使用
dvb_vb2_is_streaming()
。
注意
描述
调用者不应直接接触状态机。这在 dvb_vb2.c 内部处理。
-
struct dvb_buffer¶
v4l2 的视频缓冲区信息。
定义:
struct dvb_buffer {
struct vb2_buffer vb;
struct list_head list;
};
成员
vb
嵌入式结构
vb2_buffer
。list
struct dvb_buffer
的列表。
-
struct dvb_vb2_ctx¶
VB2 处理程序的控制结构
定义:
struct dvb_vb2_ctx {
struct vb2_queue vb_q;
struct mutex mutex;
spinlock_t slock;
struct list_head dvb_q;
struct dvb_buffer *buf;
int offset;
int remain;
int state;
int buf_siz;
int buf_cnt;
int nonblocking;
enum dmx_buffer_flags flags;
u32 count;
char name[DVB_VB2_NAME_MAX + 1];
};
成员
vb_q
指向具有 videobuf2 队列的
struct vb2_queue
的指针。mutex
用于序列化 vb2 操作的互斥锁。由 vb2 核心
wait_prepare
和wait_finish
操作使用。slock
用于保护 dvb_vb2.c 中的缓冲区填充的自旋锁。
dvb_q
尚未填充的缓冲区的列表。
buf
指向当前正在填充的缓冲区的指针。
offset
buf 中要填充的下一个位置的索引。
remain
buf 中还剩多少字节要填充。
state
由
enum dvb_vb2_states
定义的缓冲区状态的位掩码。buf_siz
每个 VB2 缓冲区的大小。
buf_cnt
VB2 缓冲区的数量。
nonblocking
如果与零不同,则设备以非阻塞模式运行。
flags
由
enum dmx_buffer_flags
定义的缓冲区标志。仅在DMX_DQBUF
处填充。DMX_QBUF
应该将此字段清零。count
填充缓冲区的单调计数器。有助于识别数据流丢失。仅在
DMX_DQBUF
处填充。DMX_QBUF
应该将此字段清零。name
设备类型的名称。目前,它可以是“dvr”或“demux_filter”。
-
int dvb_vb2_init(struct dvb_vb2_ctx *ctx, const char *name, int non_blocking)¶
初始化 VB2 处理程序
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
const char *name
VB2 处理程序的名称
int non_blocking
如果不为零,则表示设备处于非阻塞模式
-
int dvb_vb2_release(struct dvb_vb2_ctx *ctx)¶
释放 VB2 处理程序分配的资源,并将 ctx 置于 DVB_VB2_STATE_NONE 状态。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
-
int dvb_vb2_is_streaming(struct dvb_vb2_ctx *ctx)¶
检查 VB2 处理程序是否正在流式传输
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
返回
如果不流式传输,则为 0,否则为 1。
-
int dvb_vb2_fill_buffer(struct dvb_vb2_ctx *ctx, const unsigned char *src, int len, enum dmx_buffer_flags *buffer_flags)¶
填充 VB2 缓冲区
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
const unsigned char *src
数据存储的位置
int len
要从 src 复制的字节数
enum dmx_buffer_flags *buffer_flags
指向由
enum dmx_buffer_flags
定义的缓冲区标志的指针。可以为 NULL。
-
__poll_t dvb_vb2_poll(struct dvb_vb2_ctx *ctx, struct file *file, poll_table *wait)¶
用于数字电视缓冲区处理的
vb2_core_streamon()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct file *file
传递给轮询文件操作处理程序的
struct file
参数。poll_table *wait
传递给轮询文件操作处理程序的
poll_table
等待参数。
描述
实现轮询 syscall() 逻辑。
-
int dvb_vb2_stream_on(struct dvb_vb2_ctx *ctx)¶
用于数字电视缓冲区处理的
vb2_core_streamon()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
描述
启动 dvb 流式传输
-
int dvb_vb2_stream_off(struct dvb_vb2_ctx *ctx)¶
用于数字电视缓冲区处理的
vb2_core_streamoff()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
描述
停止 dvb 流式传输
-
int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)¶
用于数字电视缓冲区处理的
vb2_core_reqbufs()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct dmx_requestbuffers *req
从用户空间传递的
struct dmx_requestbuffers
,以便处理DMX_REQBUFS
。
描述
通过请求多个缓冲区来启动流式传输。如果 req->count
为零,也用于释放先前请求的缓冲区。
-
int dvb_vb2_querybuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)¶
用于数字电视缓冲区处理的
vb2_core_querybuf()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct dmx_buffer *b
从用户空间传递的
struct dmx_buffer
,以便处理DMX_QUERYBUF
。
-
int dvb_vb2_expbuf(struct dvb_vb2_ctx *ctx, struct dmx_exportbuffer *exp)¶
用于数字电视缓冲区处理的
vb2_core_expbuf()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct dmx_exportbuffer *exp
从用户空间传递的
struct dmx_exportbuffer
,以便处理DMX_EXPBUF
。
描述
将缓冲区导出为文件描述符。
-
int dvb_vb2_qbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)¶
用于数字电视缓冲区处理的
vb2_core_qbuf()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct dmx_buffer *b
为了处理
DMX_QBUF
,从用户空间传递的struct dmx_buffer
。
描述
根据用户空间请求,将数字电视缓冲区入队
-
int dvb_vb2_dqbuf(struct dvb_vb2_ctx *ctx, struct dmx_buffer *b)¶
用于数字电视缓冲区处理的
vb2_core_dqbuf()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct dmx_buffer *b
为了处理
DMX_DQBUF
,从用户空间传递的struct dmx_buffer
。
描述
将数字电视缓冲区出队到用户空间
-
int dvb_vb2_mmap(struct dvb_vb2_ctx *ctx, struct vm_area_struct *vma)¶
用于数字电视缓冲区处理的
vb2_mmap()
的包装器。
参数
struct dvb_vb2_ctx *ctx
VB2 处理程序的控制结构
struct vm_area_struct *vma
指向
struct vm_area_struct
的指针,该指针带有传递给驱动程序中 mmap 文件操作处理程序的 vma。
描述
将数字电视视频缓冲区映射到应用程序地址空间。