SCIODNLD (下载) SCSI 适配器设备驱动程序 ioctl 操作
用途
提供将微码下载到适配器的方法。
描述
SCIODNLD 操作提供了将微码下载到所选适配器的功能。 系统管理例程可以使用此操作来准备适配器以执行操作。 运行 SCIODNLD 操作时,可以在 "正常" 或 "诊断" 方式下打开适配器。
有两个用于执行 SCIODNLD 操作的选项。 调用者可以将微码下载到适配器,也可以查询当前下载的微码的版本。
如果选择了下载微码选项,那么必须在调用者的内存空间中提供指向下载缓冲区及其长度的指针。 此微码的最大长度与适配器有关。 如果适配器需要传输完整块,那么必须将要发送的微码填充到下一个最大块边界。 块大小 (如果有) 是与适配器相关的。 请参阅特定 SCSI 适配器的参考手册,以查找要下载的微码缓冲区的特定于适配器的需求。
SCSI 适配器设备驱动程序会根据需要验证诸如最大长度和块边界之类的参数值。 SCIODNLD 操作的 阿尔格 参数可指定 sc_download 结构的地址。 此结构在 /usr/include/sys/scsi.h 文件中定义。
如果选择了查询版本选项,那么将忽略所传递参数块中的指针和长度字段。 在成功完成 SCIODNLD 操作后,微码版本将包含在version_number:NONE.
在执行 SCIODNLD 操作期间, SCSI 适配器设备驱动程序会执行正常错误恢复过程。
返回值
成功完成后,此操作将返回值 0。 否则,将返回 -1 值,并将 errno 全局变量设置为以下值之一:
| 值 | 描述 |
|---|---|
| EFAULT | 指示发生了严重的 I/O 错误,从而阻止下载完成。 在此情况下,无法对该卡执行进一步操作,并且调用者应该停止对该卡执行命令。 适配器错误-状态信息将记录在系统错误日志中。 |
| EFAULT | 指示发生内核与用户空间之间的错误副本。 |
| EINVAL | 指示适配器设备驱动程序由于输入参数不正确而无法运行该命令。 检查微码长度和块边界以查找错误。 |
| EIO | 指示由于不可恢复的 I/O 错误或微码循环冗余校验 (CRC) 错误,适配器设备驱动程序无法完成此命令。 如果卡具有板载微码,那么它可能能够继续运行,并且在此适配器上可能仍可以执行更多命令。 适配器错误-状态信息将记录在系统错误日志中。 |
| ENOMEM | 指示没有足够的内存可用于完成命令。 |
| ENXIO | 指示所选操作或子选项在此适配器上不受支持,因此不应该被视为错误。 调用者必须首先检查此返回值 (在检查其他 错误号 值之前) ,以避免将此错误用于失败的命令。 |
| ETIMEDOUT | 指示在传递的命令超时值到期之前,适配器未以状态进行响应。 由于下载操作可能尚未完成,因此可能无法对该卡进行进一步操作。 调用者应停止向卡发送命令。 此错误也会记录在系统错误日志中。 |
文件
| 项 | 描述 |
|---|---|
| /dev/scsi0, /dev/scsi1,..., /dev/scsin | 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备和适配器。 |