SCIOSTARTTGT (启动目标) SCSI 适配器设备驱动程序 ioctl 操作
用途
打开 SCSI 发起程序设备的逻辑路径。
描述
SCIOSTARTTGT 操作会打开 SCSI 启动器设备的逻辑路径。 主机 SCSI 适配器将作为目标。 此操作会导致适配器设备驱动程序分配和初始化管理从发起方接收到的数据所需的设备相关信息区域。 它还使适配器设备驱动程序分配系统缓冲区以保存从发起方接收到的数据。 最后,它使主机适配器准备好接收来自发起方的数据。
此操作只能从内核进程或设备驱动程序进行调用,因为它要求调用者和 SCSI 适配器设备驱动程序都能够直接访问内存中的彼此的代码。
SCIOSTARTTGT ioctl 操作的 arg 参数应设置为 sc_strt_tgt 结构的地址,该结构在 /usr/include/sys/scsi.h 文件中定义。 调用者使用 SCSI 发起方的 SCSI 标识填写 "标识" 字段,并设置logical unit number (LUN)字段到0,因为对于接收到的数据,将忽略发起方 LUN。
调用者设置buf_size字段为分配给此主机目标实例的所有接收缓冲区的期望大小。 这是与适配器相关的参数,对于 SCSI I/O 控制器,应该将其设置为 4096 字节。 该num_bufs此字段设置为指示调用者希望为设备分配的缓冲区数。 这也是一个依赖于适配器的参数。 对于 SCSI I/O 控制器,它应该设置为 16 或更大的值。
来电者填写recv_func字段,其中包含来自其模块的固定例程的地址,适配器设备驱动程序将调用该地址以传递接收到的数据信息结构。 这些结构会告知调用者数据所在的位置以及是否发生任何错误。
该tm_correlator可以选择由调用者使用该字段来提供将接收到的数据与相应设备相关联的有效方法。 此字段由 SCSI 适配器设备驱动程序保存并返回,并且会将信息传递回调用者的 recv_func 例程。
该free_funcfield 是此操作的输出参数。 SCSI 适配器设备驱动程序在此字段中填充其模块中固定例程的地址,调用者调用此地址以传递已处理的已接收数据信息结构。
当前,主机 SCSI 适配器仅充当 LUN 0 (从其他 SCSI 0 访问时)。 这意味着远程连接的 SCSI 启动器只能在每个主机 SCSI 适配器的一个逻辑连接处引导数据。 最多只能有一个调用进程可以打开从主机 SCSI 适配器到远程 SCSI 启动器的逻辑路径。 这并不会阻止单个进程同时打开多个目标设备。
返回值
成功完成后,此操作将返回值 0。 否则,将返回 -1 值,并将 errno 全局变量设置为以下值之一:
| 值 | 描述 |
|---|---|
| EINVAL | 已向该 SCSI 标识发出 SCIOSTARTTGT 命令,传递的 SCSI 标识与该适配器的 SCSI 标识相同,LUN字段未设置为 0 ,buf_size字段大于 4096 个字节,那么num_bufs字段小于 16 ,或者,recv_func字段设置为空。 |
| EIO | 指示发生 I/O 错误或内核服务故障,这会阻止设备驱动程序启用所选 SCSI 标识。 |
| ENOMEM | 指示发生了内存分配错误。 |
| EPERM | 指示调用者未在内核方式下运行,内核方式是唯一允许执行此操作的方式。 |
文件
| 项 | 描述 |
|---|---|
| /dev/scsi0, /dev/scsi1,...,/dev/scsin | 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 设备或适配器。 |
| /dev/vscsi0, /dev/vscsi1, ... , /dev/vscsin | 提供一个接口以允许 SCSI-2 快速/宽适配器 /A 和 SCSI-2 差分快速/宽适配器 /A 设备驱动程序访问 SCSI 设备或适配器。 |