SCIOEVENT (事件) SCSI 适配器设备驱动程序 ioctl 操作
用途
注册所选 SCSI 设备实例以接收异步事件通知。
描述
SCIOEVENT 操作将注册所选发起程序或目标方式设备以接收异步事件通知。 只有内核方式进程或设备驱动程序可以调用此函数。 如果用户方式进程尝试执行 SCIOEVENT 操作,那么 ioctl 命令将失败,并且 错误号 全局值将设置为 EPERM。
SCIOEVENT 操作的 arg 参数应设置为 sc_event_struct 结构的地址,该结构位于 /usr/include/sys/scsi.h 文件中。 如果这是目标方式实例,那么会使用 SCIOSTARTTGT 操作来打开设备会话; 然后调用程序会填充ID具有 SCSI 发起方的 SCSI 标识的字段,并设置logical unit number(LUN) 字段的值为 0。 如果这是发起程序方式实例,那么已使用 SCIOSTART 操作来打开设备会话;ID然后,将该字段设置为 SCSI 目标的 SCSI 标识,并将该 LUN 设置为 SCSI 目标的 LUN 标识。 先前必须已使用其中一个启动 ioctls 打开设备,此操作才会成功。 如果未打开设备会话,那么 ioctl 命令将不成功,并且返回的 错误号 全局值将设置为 EINVAL。
对于每个设备会话,此 ioctl 执行的事件注册仅允许一次; 在打开设备后,仅接受第一个 SCIOEVENT 操作。 后续的 SCIOEVENT 操作不成功,并且 错误号 全局值设置为 EINVAL。 关闭设备会话时,会自动取消事件注册。
来电者填写mode具有下列其中一个值的字段,这些值在 /usr/include/sys/scsi.h 文件中定义:
#define SC_IM_MODE /* this is an initiator mode device */ #define SC_TM_MODE /* this is a target mode device */该async_func字段中填充了锁定例程 (在调用程序中) 的地址,只要异步事件状态可用于已注册的设备, SCSI 适配器设备驱动程序就应该调用该锁定例程。 在 /usr/include/sys/scsi.h 文件中定义的 struct sc_event_info 结构按地址传递到调用者的 async_func 例程。
该async_correlator可以选择由调用者使用该字段来提供将事件信息与相应设备相关联的有效方法。 此字段由 SCSI 适配器设备驱动程序保存,并在未更改的情况下返回,并将信息传递回调用者的 异步功能 例程。
调用者必须将保留字段设置为 0。
返回值
成功完成后,此操作将返回值 0。 否则,将返回 -1 值,并将 errno 全局变量设置为以下值之一:
| 值 | 描述 |
|---|---|
| EFAULT | 指示发生内核与用户空间之间的错误副本。 |
| EINVAL | 尚未向此设备实例发出 SCIOSTART 或 SCIOSTARTTGT 操作程序,或者已针对异步事件注册此设备。 |
| EPERM | 指示调用者未在内核方式下运行,内核方式是唯一允许执行此操作的方式。 |
文件
| 项 | 描述 |
|---|---|
| /dev/scsi0, /dev/scsi1,..., /dev/scsin | 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备或适配器。 |
| /dev/vscsi0, /dev/vscsi1, ... , /dev/vscsin | 提供一个接口以允许 SCSI-2 快速/宽适配器 /A 和 SCSI-2 差分快速/宽适配器 /A 设备驱动程序访问 SCSI 设备或适配器。 |