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
RF 连接器。仅在设备没有单独的调谐器时使用。
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
devnode 次要编号。主要编号始终为 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、网络、解复用器)使用此结构来创建设备节点。通常,驱动程序不应直接初始化此结构。
-
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
如果为 true,则也创建 RF 连接器
描述
此函数检查媒体控制器实体上的所有 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
指向
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
指向
struct i2c_adapter
的指针,该结构描述了将要绑定模块的 I2C 适配器。
unsigned char addr
适配器的 I2C 地址,采用 7 位表示法。
void *platform_data
要传递给探测的 I2C 模块的平台数据。
描述
此函数将 I2C 设备绑定到 DVB 核心。所有使用 I2C 总线控制硬件的驱动程序都应使用此函数。使用 dvb_module_probe()
绑定的模块应使用 dvb_module_release()
来取消绑定。
注意
过去,DVB 模块(主要是前端)通过 dvb_attach()
宏绑定,该宏使用 I2C 底层函数进行丑陋的 hack。这种用法已被弃用,并将很快被删除。请改用此例程。
返回值
成功时,返回一个指向绑定的 I2C 设备的
struct i2c_client
。否则返回NULL
。
-
void dvb_module_release(struct i2c_client *client)¶
释放使用
dvb_module_probe()
分配的 I2C 设备。
参数
struct i2c_client *client
指向
struct i2c_client
的指针,其中包含要释放的 I2C 客户端。可以为NULL
。
描述
此函数应用于释放 dvb_module_probe()
保留的所有资源,并解除 I2C 硬件的绑定。
-
dvb_attach¶
dvb_attach (FUNCTION, ARGS...)
将 DVB 前端连接到 DVB 核心。
参数
FUNCTION
要调用的前端模块上的函数。
ARGS...
FUNCTION 参数。
描述
此辅助函数在运行时加载前端模块并在那里使用 ARGS 运行 FUNCTION 函数。由于它增加了符号的使用计数,因此在取消注册时,应调用 dvb_detach()
。
注意
过去,DVB 模块(主要是前端)通过 dvb_attach()
宏绑定,该宏使用 I2C 底层函数进行丑陋的 hack。这种用法已被弃用,并将很快被删除。相反,您应该使用 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
环形缓冲区客户端用于指示缓冲区何时已满的等待队列。
lock
用于保护环形缓冲区的自旋锁。
-
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
的指针。byte
要写入的字节
-
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
传递给 poll 文件操作处理程序的
struct file
参数。poll_table *wait
传递给 poll 文件操作处理程序的
poll_table
wait 参数。
描述
实现 poll 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
为了处理
DMX_REQBUFS
,从用户空间传递的struct dmx_requestbuffers
。
描述
通过请求一定数量的缓冲区来启动流传输。 如果 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
为了处理
DMX_QUERYBUF
,从用户空间传递的struct dmx_buffer
。
-
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
为了处理
DMX_EXPBUF
,从用户空间传递的struct dmx_exportbuffer
。
描述
将缓冲区导出为文件描述符。
-
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
的指针,其中 vma 被传递给驱动程序中 mmap 文件操作处理程序。
描述
将数字电视视频缓冲区映射到应用程序地址空间。