编写设备驱动程序

ddi_log_sysevent() 语法

ddi_log_sysevent() 使用以下语法:

int ddi_log_sysevent(dev_info_t *dip, char *vendor, char *class, 
    char *subclass, nvlist_t *attr-list, sysevent_id_t *eidp, int sleep-flag);

其中:

dip

指向相应驱动程序处理的 dev_info 节点的指针。

vendor

指向定义驱动程序供应商的字符串的指针。第三方驱动程序应使用其公司的股票代号或类似的持久标识符。Sun 提供的驱动程序会使用 DDI_VENDOR_SUNW

class

指向定义事件类的字符串的指针。class 是特定于驱动程序的值。表示影响设备的一组环境条件的字符串可能即是一个类的示例。事件使用方必须能够理解该值。

subclass

表示 class 参数子集的特定于驱动程序的字符串。例如,在表示环境条件的类中,事件子类可能是指设备的温度。事件使用方必须能够理解该值。

attr-list

指向列出与事件关联的名称-值特性的 nvlist_t 结构的指针。名称-值特性是驱动程序定义的,可以是指设备的特定特性或条件。

例如,可同时读取 CD-ROM 和 DVD 的设备。此设备可能具有一个名称为 disc_type 并且值等于 cd_romdvd 的特性。

classsubclass 一样,事件使用方必须能够解释名称-值对。

有关名称-值对以及 nvlist_t 结构的更多信息,请参见定义事件特性以及 nvlist_alloc(9F) 手册页。

如果事件没有任何特性,则此参数应设置为 NULL

eidp

sysevent_id_t 结构的地址。sysevent_id_t 结构用于提供事件的唯一标识。ddi_log_sysevent (9F) 将向此结构返回系统提供的事件序列号和时间戳。有关 sysevent_id_t 结构的更多信息,请参见 ddi_log_sysevent(9F) 手册页。

sleep-flag

指示调用者如何处理不可用资源可能性的标志。如果 sleep-flag 设置为 DDI_SLEEP,则驱动程序会阻塞,直到资源可用为止。如果设置为 DDI_NOSLEEP,则分配不会休眠且不能保证成功。如果返回了 DDI_ENOMEM,则驱动程序以后需要重试该操作。

即使设置为 DDI_SLEEP,此界面也可能返回错误(如系统繁忙),syseventd 守护进程不响应或不尝试在中断上下文中记录事件。