SCIODIAG (诊断) SCSI 适配器设备驱动程序 ioctl 操作

用途

提供发出适配器诊断命令的方法。

描述

SCIODIAG 操作使调用者能够向所选 SCSI 适配器发出各种适配器诊断命令。 这些诊断命令选项为:

  • 运行卡内部诊断测试
  • 运行卡 SCSI Wrap 测试
  • 运行卡读/写寄存器测试
  • 运行卡 POS 寄存器测试
  • 运行卡 SCSI 总线重置测试

另外一个选项允许调用者从故障点恢复卡 "内部诊断" 测试,该故障由返回值指示。 SCIODIAG 操作的 阿尔格 参数可指定 sc_card_diag 结构的地址。 此结构在 /usr/include/sys/scsi.h 文件中定义。

卡诊断所报告的每个错误中的实际适配器错误状态信息将作为返回参数传递给调用者。 请参阅 /usr/include/sys/scsi.h 文件中定义的 sc_card_diag 结构,以获取返回数据的格式。

在卡诊断已完成 (发生先前错误) 时,将返回值 ENOMSG 。 此时,由于卡内部诊断测试已完成,因此不需要进一步的 SCIODIAG 恢复选项。

SCIODIAG 操作导致 错误号 值为 EFAULT时,始终会返回适配器错误状态。 由于针对每个此类卷返回此错误信息,因此针对卡 "内部诊断" 测试返回的最终 ENOMSG 值不包含任何错误状态信息。 此外,由于这是诊断命令,因此这些错误不会记录在系统错误日志中。

注: SCSI 适配器设备驱动程序在执行此操作期间不执行任何内部重试或其他错误恢复过程。 运行此命令时也会禁止错误日志记录。

返回值

成功完成后,此操作将返回值 0。 否则,将返回 -1 值,并将 errno 全局变量设置为以下值之一:

描述
EFAULT 指示在用户和内核空间之间发生了错误的副本。
EFAULT 对于 70087011 系统型号上的集成 SCSI 适配器,此返回值还表明 SCSI 适配器设备驱动程序在尝试运行 SCIODIAG 操作时检测到错误。 在这种情况下,必须对返回的适配器状态信息进行分析以发现错误的原因。 因为这是一个诊断命令,所以此错误不会记录在系统错误日志中。

对于所有其他 SCSI 适配器,此值指示卡内部诊断已检测到错误并已暂停。 要继续,调用者必须使用 resume 选项发出另一个 SCIODIAG 操作。 作为对此选项的响应,卡将继续进行诊断,直到到达结束或检测到另一个错误为止。 调用者必须继续发出 SCIODIAG 操作,直到 EFAULT 错误不再返回为止。

EINVAL 指示输入参数不正确。
EIO 指示 SCSI 适配器设备驱动程序在尝试运行 SCIODIAG 操作期间检测到错误。 在这种情况下,必须对返回的适配器状态信息进行分析以发现错误的原因。 因为这是一个诊断命令,所以此错误不会记录在系统错误日志中。
ENOMSG 指示卡 "内部诊断" 测试已完成。
ENXIO 指示选择的操作或子选项在此适配器上不受支持。 不应将此操作视为错误。 调用者必须首先检查此返回值 (在检查其他 错误号 值之前) ,以避免将此错误用于失败的命令。
ETIMEDOUT 指示在传递的命令超时值到期之前,适配器未以状态进行响应。 SCIODIAG 操作是一个诊断命令,因此它的错误不会记录在系统错误日志中。

文件

描述
/dev/scsi0/dev/scsi1... /dev/scsin         提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备/适配器。