This message is from the T13 list server.
Rather than a specific CDB proposal, I prefer to stick to a rough list of design goals and constraints. The SCSI experts can figure out the details :) Definitions: "HOB taskfile" -- ATA shadow register contents, with two bytes stored for each shadow register, "current" and "previous" bytes. This matches the 2-byte ATA FIFO used in standard ATA when supporting the LBA48 feature. Or in other words, a taskfile is the ATA version of a SCSI CDB. "non-HOB taskfile" -- ATA shadow register contents, with one byte stored for each shadow register, the "current" byte. Design requirements: 1) support for vendor-reserved ATA commands and unspecified (future) ATA commands is a requirement. 2) command protocol (pio-in, dma-out, dma-tcq-out, no-data, etc.) must be specified in addition to ATA Command opcode register. This is required for vendor-reserved ATA commands, and unspecified (i.e. implemented in the future) ATA commands. 3) support for HOB taskfiles is required (likely implies a variable-length CDB, as noted below), as this is what most current and future ATA devices will support. Observations: 1) it is likely that a variable-length CDB would be required for a HOB taskfile 2) it is likely that a 12-byte CDB is sufficient for a non-HOB taskfile. 2.1) Considering observation #1 with #2, may be desirable to simply avoid specification of a 12-byte CDB for ATA passthru. I only mention the 12-byte CDB because some legacy software is limited to 12-byte CDBs, and also some ATA host controllers do not support HOB taskfiles. 3) data transfer direction may be inferred from command protocol, or specified directly. if data transfer direction is listed in the CDB, then please make its specification a _requirement_, not optional. If specified explicitly (rather than inferred), it _must_ match the implicit data transfer direction in the command protocol field. 4) historically, OS drivers will give special treatment to the ATA SET FEATURES - XFER MODE command. For PATA host controllers, and some SATA controllers, this requires special synchronization and programming of host-controller-specific registers. Sometimes host controllers will "snoop" this ATA command as well, requiring the OS driver to For this reason, a "set features - xfer mode" 1-bit boolean flag would be useful. Such a flag MUST be set if the ATA Command register and Features register indicate a SET FEATURES - XFER MODE command. Zero otherwise.
