WIP: ATA to CAM integration

Gary Corcoran gcorcoran at rcn.com
Fri Jun 5 16:34:21 UTC 2009


Matthew Dillon wrote:
>     More on the port multiplier spec.  It turns out that the port-multiplier
>     port selector is in the command table, so it is per command-tag.  There
>     is confusion in the spec though:
> 
>     section 9.1:
> 
>     In this mode of operation, a communication path is opened between the
>     HBA and a device through the Port Multiplier.  Since Port Multipliers are
>     meant to be simple, the burden of making a connection is on the AHCI
>     software, to ensure that multiple commands are not outstanding to
>     different devices behind the Port Multiplier.
> 
>     section 9.1.2:
> 
>     "Since queued commands result in two different operations (command issue,
>     clear of BSY, then data transfer), if commands were sent to different
>     ports, the Port Multiplier may issue FISes back to the HBA in
>     an interleaved manner from different ports.  This will break an HBA that
>     only supports command-based switching.  Therefore, when executing native
>     command queueing commands, system software must only add commands
>     to the command list that target a single port behind the Port Multiplier,
>     wait for the commands to finish (PxSACT bits all cleared), then add
>     commands for a different port.  Additionally, the tags used
>     must match the command slot entries."
> 
>     --
> 
>     It's unclear to me what this means.  Can we use NCQ to queue multiple
>     commands to multiple ports behind a single port multiplier in parallel
>     or can't we?  It's very confusing.

As I read the above, this:
 > ensure that multiple commands are not outstanding to
 >     different devices behind the Port Multiplier

combined with this:
 > system software must only add commands
 >     to the command list that target a *single port* behind the Port Multiplier,
 >     *wait for the commands to finish*

suggests strongly that you many not send multiple commands out to a single
port multiplier.  However, I agree that it's not crystal clear, and may not
be what was intended.

Gary


More information about the freebsd-current mailing list