并行 SCSI 适配器设备驱动程序

用途

支持 SCSI 适配器。

语法

<#include /usr/include/sys/scsi.h>
<#include /usr/include/sys/devinfo.h>

描述

/dev/scsin/dev/vscsin 特殊文件提供接口以允许 SCSI 设备驱动程序访问 SCSI 设备。 这些文件管理适配器资源,以便多个 SCSI 设备驱动程序可以同时访问同一 SCSI 适配器上的设备。 /dev/vscsin 特殊文件为 SCSI-2 Fast/Wide Adapter/ASCSI-2 差动 Fast/Wide Adapter/A提供接口,而 /dev/scsin 特殊文件为其他 SCSI 适配器提供接口。 SCSI 适配器可通过特殊文件 /dev/scsi0 /dev/scsi1... 进行访问。 和 /dev/vscsi0/dev/vscsi1, ....

/dev/scsin/dev/vscsin 特殊文件提供了用于访问发起程序和目标方式设备实例的接口。 主机适配器是用于访问设备 (例如,磁盘,磁带和 CD-ROM) 的发起方。 当从诸如计算机系统之类的设备或可充当 SCSI 启动器的其他设备进行访问时,适配器是目标。

与设备相关的子例程

SCSI 适配器设备驱动程序仅支持 关闭ioctl 个子例程。 子例程不受支持。

打开和关闭子例程

奥佩克斯 子例程提供适配器诊断功能。 奥佩克斯 子例程提供 扩展 参数。 此参数选择适配器方式,并接受 SC_DIAGNOSTIC 值。 此值在 /usr/include/sys/scsi.h 文件中定义,并将适配器置于诊断方式。

注: 某些 SCSI 适配器设备驱动程序的 "打开" 和 "关闭" 子例程不支持诊断方式 扩展 参数。 (SC_DIAGNOSTIC). 如果尝试打开,子例程将返回 -1 值,并且 errno 全局值将设置为 EINVAL 。 独立诊断包提供所有诊断功能。

在诊断方式下,只接受 关闭 子例程和 ioctl 操作。 适配器的所有其他有效子程序都会返回 -1 值,并将 errno 全局变量设置为 EACCES 值。 在诊断方式下, SCSI 适配器设备驱动程序可以接受以下请求:

  • 运行各种适配器诊断测试。
  • 下载适配器微码。

奥佩克斯 子例程需要适当的权限才能运行。 在没有适当授权的情况下尝试运行此子程序,会导致子程序返回 -1 值,并将 errno 全局变量值设置为 EPERM 。 如果尝试打开已为正常操作打开的设备,或者当另一个 openx 子程序正在运行时,将导致子程序返回 -1 值,并将 errno 全局变量设置为 EACCES 值。

任何内核进程都可以以正常方式打开 SCSI 适配器设备驱动程序。 对于 "正常" 方式, 扩展 参数设置为 0。 但是,非内核进程必须至少具有 dev_config 权限,才能以 "正常" 方式打开 SCSI 适配器设备驱动程序。 在没有适当授权的情况下试图执行正常的 open 子程序,会导致子程序返回 -1 值,并将 errno 全局变量设置为 EPERM 值。

ioctl 子例程

除了 IOCINFO 操作之外, SCSI 设备驱动程序还为处于非诊断和诊断方式的设备定义特定操作。

IOCINFO 操作是针对使用 ioctl 子例程的所有设备驱动程序定义的,如下所示:

  • 该操作返回 开发信息 结构。 此结构在 /usr/include/sys/devinfo.h 文件中定义。 此结构中的设备类型为 DD_BUS,而子类型为 DS_SCSI。 该flags字段未使用且设置为 0。 对于此操作,不需要诊断方式。
  • 开发信息 结构包含唯一数据,例如允许的卡 SCSI 标识和最大发起程序方式数据传输大小 (以字节为单位)。 调用 SCSI 设备驱动程序使用此信息来了解它在 SCSI 适配器上控制的设备所允许的最大传输大小。 通过这种方式, SCSI 设备驱动程序可以控制各种 SCSI 适配器中的设备,每个设备可能具有不同的最大发起程序方式传输大小。

处于非诊断方式的适配器的 SCSI ioctl 操作

非诊断操作是 SCSI 适配器设备驱动程序功能,而不是一般的设备驱动程序设施。 SCSI 适配器设备驱动程序 ioctl 操作要求该适配器设备驱动程序未处于诊断方式。 如果在适配器处于诊断模式时尝试这些操作,将返回 -1 值,并将 errno 全局变量设置为 EACCES 值。

对于处于非诊断方式的适配器,以下 SCSI 操作:

操作 描述
SCIODNLD 提供将微码下载到适配器的方法。 IBM® SCSI-2Fast/Wide Adapter/A设备驱动程序不支持此操作。 Fast/Wide 适配器的微码下载仅在独立诊断包中受支持。
SCIOEVENT 注册所选 SCSI 设备实例以接收异步事件通知。
SCIOGTHW 允许调用者验证 SCSI 适配器设备驱动程序是否支持收集的写操作。
SCIOHALT 异常终止当前命令 (如果有的话) ,清除任何暂挂命令的队列,并将特定设备的设备队列置于已停止状态。
科学渠 提供向 SCSI 设备发出 inquire 命令的方法。
SCIOREAD 将单个块读命令发送到所选 SCSI 设备。
SCIORESET 允许调用者强制 SCSI 设备释放所有当前预留,清除所有当前命令,并返回到初始状态。
SCIOSTART 打开指向 SCSI 目标设备的逻辑路径。 主机 SCSI 适配器充当发起程序。
SCIOSTARTTGT 打开 SCSI 发起程序设备的逻辑路径。 主机 SCSI 适配器将作为目标。
SCIOSTOP 关闭 SCSI 目标设备的逻辑路径,在该设备中, SCSI 适配器充当发起方。
SCIOSTOPTGT 关闭 SCSI 发起程序设备的逻辑路径,主机 SCSI 适配器在该设备上充当目标。
SCIOSTUNIT 提供向所选 SCSI 设备发出 "SCSI 启动单元" 命令的方法。
SCIOTUR 向所选 SCSI 设备发送 "测试单元就绪" 命令。

诊断方式下适配器的 SCSI ioctl 操作

仅当以诊断方式成功打开适配器时,才允许对 ioctl 子例程执行下列操作。 如果尝试对未处于诊断模式的适配器执行这些命令,将返回 -1 值,并将 errno 全局变量设置为 EACCES 值。

操作 描述
SCIODIAG 提供发出适配器诊断命令的方法。
SCIODNLD 提供将微码下载到适配器的方法。
SCIOTRAM 提供用于发出各种适配器命令以测试卡 DMA 接口和缓冲区 RAM 的方法。
注: 某些 SCSI 适配器设备驱动程序不支持诊断方式的 ioctl 操作。

为了允许在多个 SCSI 适配卡接口上运行这些操作,定义了特殊的返回值。 返回值为 -1 且 errno 值为 ENXIO 表示所请求的 ioctl 子程序不适用于当前适配器卡。 对于需要诊断方式才能执行的命令,不应将此返回值视为错误。

SCSI 错误情况摘要

适配器设备驱动程序的可能 错误号 值为:

描述
EACCES 指示在适配器有一个或多个设备在使用时尝试了 奥佩克斯 子例程。
EACCES 指示在适配器处于诊断方式时尝试了除 ioctl 关闭 以外的子例程。
EACCES 指示在适配器未处于 "诊断" 方式时尝试调用 SCIODIAG 命令。
EBUSY 指示删除操作不成功。 适配器仍处于打开状态。
EFAULT 指示适配器正在注册诊断错误以作为对 SCIODIAG 命令的响应。 必须发出 SCIODIAG resume 选项才能继续处理。
EFAULT 指示在 SCIODNLD 命令期间发生了严重的 I/O 错误。 停止对该卡的操作。
EFAULT 指示内核与用户空间之间的复制失败。
EINVAL 指示参数无效,或者设备尚未打开。
EIO 指示无效命令。 必须在执行此命令之前执行 SCIOSTART 操作,或者必须传递无效的 SCSI 标识和 LUN 组合。
EIO 指示由于在适配器或 SCSI 总线上检测到错误,该命令已失败。
EIO 指示设备驱动程序无法将代码置顶。
EIO 指示内核服务失败,或者发生了不可恢复的 I/O 错误。
ENOCONNECT 指示发生了 SCSI 总线故障。
ENODEV 指示无法选择目标设备或者目标设备未响应。
ENOMEM 指示由于内存量不足而无法完成该命令。
ENXIO 指示所请求的 ioctl 不受此适配器支持。
EPERM 指示调用者不具有必需的权限。
ETIMEDOUT 指示 SCSI 命令或适配器命令已超过了超时值。

可靠性和可维护性信息

适配器设备驱动程序检测到的错误可能是下列其中一项:

永久错误是无法重试的错误,或者在达到规定的重试次数之前未恢复错误。 临时错误是无法重试的非灾难性错误,或者是在达到规定的重试次数之前成功恢复的可重试错误。

错误-记录永久硬件错误的值

下面描述了 SCSI 适配器设备驱动程序检测到的永久性硬件错误的错误记录模板。 请参阅 返回码 结构以了解详细信息数据的实际定义。 rc 结构在 /usr/include/sys/scsi.h 文件中定义:

SCSI_ERR1:
字段 描述
Comment 永久 SCSI 适配器硬件错误。
Class H ,指示硬件错误。
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type PERM ,指示永久故障。
Err_Desc 0x1010,指示适配器错误。
Prob_Causes 以下内容:
0x3330
适配器硬件
0x3400
有线电视
0x3461
电缆端接器
0x6000
设备
Fail_Causes 以下内容:
0x3300
适配器
0x3400
电缆松脱或损坏
0x6000
设备
Fail_Actions 以下内容:
0x000
执行问题确定过程。
0x0301
请检查电缆及其连接。
Detail_Data1 108,11 和 HEX

错误-记录临时硬件错误的值

SCSI 适配器设备驱动程序检测到的临时硬件错误的错误记录模板如下:

SCSI_ERR2:
字段 描述
Comment 临时 SCSI 适配器硬件错误。
Class H ,指示硬件错误。
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示发生此错误时应创建一个错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type TEMP ,指示临时故障。
Err_Desc 0x1010,指示适配器错误。
Prob_Causes 以下内容:
0x3330
适配器硬件
0x3400
有线电视
0x3461
电缆端接器
0x6000
设备
Fail_Causes 以下内容:
0x3300
适配器
0x3400
电缆松脱或损坏
0x6000
设备
Fail_Actions 以下内容:
0x000
执行问题确定过程。
0x0301
请检查电缆及其连接。
Detail_Data1 108,11 和 HEX

错误-记录永久未知适配器微码错误的值

由 SCSI 适配器设备驱动程序检测到的永久未知 SCSI 适配器微码错误的错误记录模板如下:

SCSI_ERR3:
字段 描述
Comment 永久 SCSI 适配器软件错误。
Class H ,指示硬件错误。
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type PERM ,指示永久故障。
Err_Desc 0x6100,指示适配器错误。
Prob_Causes 0x3331,指示适配器微码。
Fail_Causes 0x3300,指示适配器。
Fail_Actions 以下内容:
0x000
执行问题确定过程。
0x3301
如果问题仍然存在 (0x3000) ,请与相应的服务代表联系。
Detail_Data1 108,11 和 HEX

错误-记录临时未知适配器微码错误的值

SCSI 适配器设备驱动程序检测到的临时未知 SCSI 适配器微码错误的错误记录模板如下:

SCSI_ERR4:
字段 描述
Comment 临时未知 SCSI 适配器软件错误。
Class H.
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type TEMP ,指示临时故障。
Err_Desc 等于 0x6100,指示微码程序错误。
Prob_Causes 3331 ,指示适配器微码。
Fail_Causes 3300 ,表示该适配器。
Fail_Actions 以下内容:
0x000
执行问题确定过程。
0x3301
如果问题仍然存在,请与相应的服务代表联系 (0x3000)。
Detail_Data1 108,11 和 HEX

错误-记录永久未知适配器设备驱动程序错误的值

以下是 SCSI 适配器设备驱动程序检测到的永久未知 SCSI 适配器设备驱动程序错误的错误记录模板:

SCSI_ERR5:
字段 描述
Comment 永久未知驱动程序错误。
Class S.
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type PERM ,指示永久故障。
Err_Desc 0x2100,指示软件程序错误。
Prob_Causes 0X1000,指示软件程序。
Fail_Causes 0X1000,指示软件程序。
Fail_Actions 0x3301,指示如果问题仍然存在,那么 (0x3000) 与相应的服务代表联系。
Detail_Data1 108,11 和 HEX

错误-记录临时未知适配器设备驱动程序错误的值

以下是 SCSI 适配器设备驱动程序检测到的临时未知 SCSI 适配器设备驱动程序错误的错误记录模板:

SCSI_ERR6:
字段 描述
Comment 临时未知驱动程序错误。
Class S.
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type TEMP ,指示临时故障。
Err_Desc 0x2100,指示软件程序错误。
Prob_Causes 0X1000,指示软件程序。
Fail_Causes 0X1000,指示软件程序。
Fail_Actions 0x3301,指示如果问题仍然存在,那么 (0x3000) 与相应的服务代表联系。
Detail_Data1 108,11 和 HEX

错误-记录永久未知系统错误的值

以下是 SCSI 适配器设备驱动程序检测到的永久性未知系统错误的错误记录模板:

SCSI_ERR7:
字段 描述
Comment 永久未知系统错误。
Class H.
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type UNKN ,指示未知错误。
Err_Desc 0xFE00,指示未确定错误。
Prob_Causes 0X1000,指示软件程序。
Fail_Causes 0X1000,指示软件程序。
Fail_Actions 0x0000 和 0x3301,指示应执行问题确定过程; 如果问题仍然存在,那么 (0x3000) 请与相应的服务代表联系。
Detail_Data1 108,11 和 HEX

错误-记录临时未知系统错误的值

SCSI 适配器设备驱动程序检测到的临时未知系统错误的错误记录模板如下所示:

SCSI_ERR8:
字段 描述
Comment 临时未知系统错误。
Class H.
Report TRUE ,指示在生成错误报告时应包括此错误。
Log TRUE ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type UNKN ,指示未知错误。
Err_Desc 0xFE00,指示未确定错误。
Prob_Causes 0X1000,指示软件程序。
Fail_Causes 0X1000,指示软件程序。
Fail_Actions 0x0000 和 0x3301,指示应执行问题确定过程; 如果问题仍然存在,那么 (0x3000) 请与相应的服务代表联系。
Detail_Data1 108,11 和 HEX

错误-记录临时 SCSI 总线错误的值

以下是 SCSI 适配器设备驱动程序发生的临时 SCSI 总线错误的错误记录模板:

SCSI_ERR10:
字段 描述
Comment 临时 SCSI 总线错误。
Class H ,指示硬件错误。
Report True ,指示在发生此错误时应创建错误日志条目。
Alert FALSE ,指示此错误不可警醒。
Err_Type TEMP ,指示 Termporary 故障。
Err_Desc 0x942,指示 SCSI 总线错误。
Prob_Causes 以下内容:
0x3400
有线电视
0x3461
电缆端接器
0x6000
设备
0x3300
适配器硬件
Fail_Causes 以下内容:
0x3400
电缆松脱或损坏
0x6000
设备
0x3300
适配器
Fail_Actions 以下内容:
0x000
执行问题确定过程。
0x0301
请检查电缆及其连接。
Detail_Data 108,11 和 HEX。

管理转储

该 SCSI 适配器设备驱动程序是系统转储设施的目标。 dddump 入口点的 转储初始化DUMPSTART 选项支持多次调用或冗余调用。

DUMPQUERY 选项返回最小 0 大小 (0 个字节) 和最大传输大小 (等于 SCSI 适配器设备驱动程序支持的最大传输大小)。

要进行处理,对 SCSI 适配器设备驱动程序 DUMPWRITE 选项的调用应该将 阿尔格 参数用作指向 斯克布夫 结构的指针。 通过使用此接口,可以在先前启动 (打开) 的目标设备上运行 SCSI 命令。 SCSI 适配器设备驱动程序忽略了 乌约普 参数。 使用 DUMPWRITE时不支持跨区或整合的命令。

注: 各种 斯克布夫 状态字段,包括:b_error字段,在 DUMPWRITE完成时未设置。 必要时,在转储期间不支持错误日志记录。

dddump 入口点的成功完成由 0 表示。 如果不成功,那么入口点将返回下列其中一项:

描述
EINVAL 指示向适配器设备驱动程序传递了无效的请求,例如,在成功执行 转储初始化 选项之前尝试 DUMPSTART 选项。
EIO 指示适配器设备驱动程序由于缺少必需的资源或由于 I/O 错误而无法完成命令。
ETIMEDOUT 指示在传递的命令超时值到期之前,适配器未以状态进行响应。

文件

描述
/dev/scsi0/dev/scsi1.../dev/scsin 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备或适配器。
/dev/vscsi0/dev/vscsi1, ... , /dev/vscsin 提供一个接口以允许 SCSI-2 快速/宽适配器 /ASCSI-2 差分快速/宽适配器 /A 设备驱动程序访问 SCSI 设备或适配器。