第 8 章。Ioctl()s

目录
8.1. SG_IO
8.2. SG_GET_ACCESS_COUNT
8.3. SG_SET_COMMAND_Q (和 _GET_)
8.4. SG_SET_DEBUG
8.5. SG_EMULATED_HOST
8.6. SG_SET_KEEP_ORPHAN (和 _GET_)
8.7. SG_SET_FORCE_LOW_DMA
8.8. SG_GET_LOW_DMA
8.9. SG_NEXT_CMD_LEN
8.10. SG_GET_NUM_WAITING
8.11. SG_SET_FORCE_PACK_ID
8.12. SG_GET_PACK_ID
8.13. SG_GET_REQUEST_TABLE
8.14. SG_SET_RESERVED_SIZE (和 _GET_ )
8.15. SG_SCSI_RESET
8.16. SG_GET_SCSI_ID
8.17. SG_GET_SG_TABLESIZE
8.18. SG_GET_TIMEOUT
8.19. SG_SET_TIMEOUT
8.20. SG_SET_TRANSFORM
8.21. SG_GET_TRANSFORM
8.22. Sg ioctl 在版本 3 中已移除
8.23. SCSI_IOCTL_GET_IDLUN
8.24. SCSI_IOCTL_GET_PCI
8.25. SCSI_IOCTL_PROBE_HOST
8.26. SCSI_IOCTL_SEND_COMMAND

Linux SCSI 上层驱动程序(包括 sg)具有“逐级传递”ioctl() 架构。 这意味着请求值(即第二个参数)不被上层驱动程序理解的 ioctl() 将被传递到 SCSI 中间层。 那些不被中间层驱动程序理解的 ioctl() 将被传递到下层(适配器)驱动程序。 如果这 3 个层级都不理解 ioctl() 请求值,则返回 -1 并且 EINVAL 会被放入 errno 中。 按照惯例,请求值的符号名称的开头指示哪个层级将响应 ioctl()。 例如,以 “SG_” 开头的请求值由 sg 驱动程序处理,而以 “SCSI_” 开头的请求值由中间层处理。

大多数 sg ioctl() 通过作为 ioctl() 调用的第三个参数给出的指针来读取或写入信息,并在成功时返回 0。 一些较旧的 ioctl() 从驱动程序获取值,并将该值作为 ioctl() 调用的结果返回(例如 ioctl(SG_GET_TIMEOUT))。

下面列出了所有 sg 驱动程序的 ioctl()。它们都以 “SG_” 开头。 后面列出了几个有趣的 SCSI 中间层 ioctl(),它们以 “SCSI_IOCTL_” 开头。 sg ioctl() 大致按字母顺序排列(忽略 _SET_、_GET_ 和 _FORCE_)。 由于 ioctl(SG_IO) 是一个完整的 SCSI 命令请求/响应序列,因此它首先被列出。