ddmpx 设备驱动程序入口点

用途

为多路复用的设备驱动程序分配或取消分配通道。

语法

#include <sys/device.h>
#include <sys/types.h>
int ddmpx ( devno,  chanp,  channame)
dev_t devno;
chan_t *chanp;
char *channame;

参数

描述
德夫诺 指定 主要和次要设备号
钱普 指定通过引用传递的通道标识。
占名 指向要分配的通道的路径名称扩展。

描述

只有多路复用字符类设备驱动程序才能提供 邓普克斯 例程,并且 多路复用驱动程序必须执行此操作。 即使在提供 原始 读/写访问权时,块设备驱动程序也无法提供 邓普克斯 例程。

多路复用设备驱动程序是一个字符类设备驱动程序,它支持分配通道以提供对设备或虚拟子设备的更精细的访问控制。 此类型的设备驱动程序能够对附加到设备的特殊文件的路径名末尾的特殊通道相关信息进行解码。 此路径名扩展用于标识逻辑子设备或虚拟子设备或通道。

当对多路复用设备驱动程序所支持的设备实例发出 克里特 子例程调用时,内核会调用设备驱动程序的 邓普克斯 例程来分配通道。

当要分配或取消分配通道时,内核会调用 邓普克斯 例程。 在分配时,内核动态地为多路复用设备上的通道创建 g 节点 (核心内索引节点) ,以允许各种通道的保护属性不同。

要分配通道,将使用指向路径名扩展的 占名 指针来调用 邓普克斯 例程。 路径名扩展在路径名中特殊文件名后面的第一个 / (斜杠) 字符后开始。 邓普克斯 例程应该执行下列操作:

  • 解析此路径名扩展。
  • 分配相应的通道。
  • : 通过 钱普 参数返回通道标识。

如果不存在任何路径名扩展,那么 占名 指针将指向空字符串。 在此情况下,应分配可用通道,并通过 钱普 参数返回其通道标识。

如果从 邓普克斯 例程中未返回任何错误,那么将使用返回的通道标识来确定是否已分配该通道。 如果已分配,那么关联通道的 g 节点会使其引用计数递增。 如果尚未分配该通道,那么将为该通道创建新的 g 节点。 在任一情况下,都将使用 邓普克斯 例程指定的通道号来调用设备驱动程序的 德开放 例程。 如果 邓普克斯 例程返回非零返回码,那么假定未分配该通道,并且不会调用设备驱动程序的 德开放 例程。

如果请求关闭通道以便不再使用该通道 (由转至 0 的通道 g 节点 引用 0 确定) ,那么内核将调用 邓普克斯 例程。 在调用 德德德 例程后, 邓普克斯 例程会取消分配通道以关闭最后一次使用该通道。 如果 德德德 例程返回非零返回码,那么仍会调用 邓普克斯 例程以取消分配该通道。 德德德 例程的返回码已保存,将返回至调用者。 如果 德德德 例程未返回任何错误,但 邓普克斯 例程返回了非零返回码,那么假定已取消分配通道,尽管返回码已返回给调用者。

要取消分配通道,将使用空的 占名 指针以及 钱普 参数中通过引用传递的通道标识来调用 邓普克斯 例程。 如果通道 g 节点引用计数已转至 0 ,那么内核会在调用 德德德 例程以关闭该通道后调用 邓普克斯 例程以取消分配该通道。 德德德 例程本身不应该取消分配该通道。

执行环境

邓普克斯 例程仅在 流程环境 中进行调用。

返回值

如果分配或取消分配通道成功,那么 邓普克斯 例程应返回返回码 0。 如果在分配或释放时发生错误,那么此例程将返回非零值。

返回码应符合针对 POSIX 1003.1 标准中的 openclose 子例程描述的返回码 (如果适用)。 否则,返回码应该是 /usr/include/sys/errno.h 文件中定义的返回码。