The WHO field is described as a bit string in the specs for conceptual simplicity. Concretely I imagine the following.

conceptual bit string,coded bit string
""10000000…
"1"11000000…
"0"01000000…
"010"01010000…
"1111"11111000…
In short the string length is coded in a fixed length field by appending "1000…" with enough 0’s to fill the fixed length. The bit string is immediately to its left. As A packets travel from the root-complex downstream port numbers are extracted from the left end and the string is shifted left by an amount fixed for each switch. This scheme requires that a switch test the WHO of each A packet for being 10000… . That test is simplified in the next scheme:

The string is coded as above without the low marker bit. Instead there is a count of how many levels of port selector there are. Now testing for empty is cheaper and quicker.

In either case the shift of WHO is a fixed shift amount wired into each switch. There is no shift cost; it is just wires. The story for a growing WHO field in B packets on their way to the root complex is even easier.


An SSD might conform to this pattern consuming the last 35 to 40 bits of the WHO field of an A packet to identify the data within the SSD. I think this pattern does not suit B packets. This does not play well with the reflector scheme.