TMIOEVNT (事件) tmscsi 设备驱动程序 ioctl 操作
用途
允许调用者查询设备驱动程序以获取事件状态。
描述
TMIOEVNT ioctl 操作允许调用者查询设备驱动程序,以获取某些事件的状态。 TMIOEVNT 操作的 arg 参数指定在 /usr/include/sys/tmscsi.h 文件中定义的 tm_event_info 结构的地址。 此操作传达的状态通常未与特定应用程序子例程绑定,并且在其他情况下不会为应用程序所知道。 例如,未与 SCSI 命令直接关联的适配器功能的故障通过此设施进行报告。
虽然此操作可以独立于目标方式设备驱动程序的其他命令使用,但当与 选择入口点 POLLPRI 选项一起发出时,它是最有效的。 对于该设备驱动程序, POLLPRI 选项指示通过 TMIOEVNT 操作报告的事件已发生。 这允许对设备实例发生的事件以异步方式通知调用者,这意味着仅当发生事件时才需要发出 TMIOEVNT 操作。 在没有选择入口点的情况下,调用者必须在每个 读 或 写 子例程之后发出 TMIOEVNT 操作,以知道何时发生了事件。 选择入口点允许调用者监视一个或多个目标或发起方设备上的事件。
由于调用者通常不知道特定设备连接到哪个适配器,因此会为每个设备实例保留 TMIOEVNT 操作中的事件信息。 应用程序不应查看来自一个设备的 TMIOEVNT 操作的任何信息,因为这些信息必须影响通过此设备驱动程序打开的其他设备。 相反,应用程序必须将其每个设备的错误恢复基于该设备的特定 TMIOEVNT 信息。
通过以下方式报告事件信息:eventstm_event_info 结构的字段,并且可以具有以下值:
| 值 | 描述 |
|---|---|
| TM_FATAL_HDW_ERR | 适配器致命硬件故障 |
| TM_ADAP_CMD_FAILED | 不可恢复的适配器命令失败 |
| TM_SCSI_BUS_RESET | 检测到 SCSI 总线复位 |
| TM_BUFS_DELETED | 检测到最大缓冲区使用情况 |
可以报告的某些事件适用于任何 SCSI 设备,无论这些设备是发起方方式设备还是目标方式设备。 这些事件包括检测到的 适配器致命硬件故障, 不可恢复适配器命令失败和 SCSI BUS 已重置 。 检测到最大缓冲区使用情况 事件仅适用于目标方式设备,并且不会针对发起方方式设备实例进行报告。
" 适配器致命硬件故障 " 事件旨在指示致命情况。 这意味着没有任何其他命令可能成功完成此 SCSI 设备的连接,因为它所连接的适配器已发生故障。 在此情况下,应用程序应该结束与该设备的会话。
不可恢复适配器命令失败 事件不一定是致命的情况,但可能指示适配器未正常运行。 该应用程序具有以下可能的操作:
- 在不久的将来结束与设备的会话。
- 在发生多个 (两个或两个以上) 此类事件后结束会话。
- 尝试无限期地继续会话。
SCSI 总线复位检测 事件主要旨在仅用作信息,但必要时可由应用程序用于执行进一步操作。 在命令执行期间,也可以将 Reset 信息传达给应用程序,但 Reset 必须在 SCSI 命令期间发生,这样才能发生此情况。
检测到最大缓冲区使用情况 事件仅适用于给定的目标方式设备; 对于发起方设备,不会报告此事件。 此事件向应用程序指示此特定目标方式设备实例已填满其分配的最大缓冲区空间。 应用程序应足够快地执行 读 子例程以防止出现此情况。 如果发生此事件,那么数据不会丢失,但会延迟以防止进一步使用缓冲区。 当应用程序清空足够的缓冲区以继续执行合理操作时,将恢复数据接收。 可能需要增大 努姆布夫斯 属性的缺省值,以帮助最大程度地减少此问题。
返回值
| 项 | 描述 |
|---|---|
| EFAULT | 由于内核服务错误,操作失败。 |
| EINVAL | 已尝试对未配置,未打开或未处于此操作的正确方式 (发起方与目标) 的设备实例执行 ioctl 操作。 |
| EIO | 在操作期间发生 I/O 错误。 |
| EPERM | 对于 TMIOCMD 操作,调用者未具有 dev_config 权限。 |
| ETIMEDOUT | 该操作在超时到期之前未完成。 |
文件
| 项 | 描述 |
|---|---|
| /dev/tmscsi0, /dev/tmscsi1,..., /dev/tmscsin | 支持通过 SCSI 目标方式设备驱动程序进行处理器到处理器的通信。 |