<div dir="ltr"><div>Hi,</div><div><br></div><div>I&#39;m observing strange behavior with USB Media Path protocol when using it in a UEFI boot option, so would much appreciate any advise one this.</div><div>The problem I see is in USB port numbering when creating UEFI boot options (BootXXXX) that have USB Media Path as part of the device path.</div><div><br></div><div>My objective is to make computer boot into Linux OS that is flashed on a USB stick. The USB device structure conforms to UEFI spec, with properly signed EFI image being located in the \EFI\BOOT\BOOTx64.EFI location on a bootable FAT32 partition of the USB drive. The proper signing of the EFI file is there to ensure that the OS would not be rejected by SecureBoot.</div><div><br></div><div><div>I see strange behavior where the <b>USB Parent Port Number</b> within USB Media Path is being interpreted differently on different computers (with different or sometimes same BIOS vendors). </div><div>On some machines passing 0-based port number makes the PC properly boot into my USB-Device Path-based boot option. </div><div>And on other PC-s only the 1-based port numbering works properly.</div></div><div><br></div><div>The UEFI spec says that the last two fields of the USB Device Path are the<b> USB </b><b>Parent </b><b>Port Number</b> and the <b>Interface </b>respectively.  I attached the portion of spec as an image to this email.</div><div><br></div><div><br></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>9.3.5.5 USB Device Paths</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>   Table 58. USB Device Path</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>   Mnemonic                | Byte Offset | Byte Length | Description                     |</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>   ----------------------------------------------------------------------------------------</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>  Type             |      0      |      1      |  Type 3 – Messaging Device Path</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>Sub-Type           |      1      |      1      |  Sub-Type 5 – USB</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">                </span> Length            |      2      |      2      |  Length of this structure in bytes. Length is 6 bytes.</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>USB Parent Port Number     |      4      |      1      |  USB Parent Port Number</font></div><div><font face="monospace, monospace" color="#0000ff" size="1"><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>Interface          |      5      |      1      |  USB Interface Number</font></div><div><br></div><div>The spec does not specify whether the <b>USB Parent Port Number</b> (the port number within parent USB hub) is 0-based or 1-based.</div><div>The examples that follow this section in the spec indicate that port number being 0-based.</div><div><br></div><div>I&#39;m pretty certain of behavior, as I&#39;ve forced computers to boot into my USB-based OS through USB multiple ports on multiple USB host controllers.<br></div><div>We tried the behavior on PC-s that have varying number of USB controllers, different number of USB hubs between USB device and the controller.</div><div>And even with cases where there were multiple USB hubs involved in the full device path, the port numbers of entire USB hub chain had to be wither 0-based or 1-based.</div><div><br></div><div><font color="#0000ff">PciRoot(0)/PCI(x,y/USB(1,0)/USB(3,0)/USB(2,0)</font> - in this example all USB components had to have 1-based ports for boot option to load my OS.</div><div><font color="#0000ff">PciRoot(0)/PCI(x,y/USB(0,0)/(1,0)</font> - and here all USB components had to have 0-based ports for my OS to load properly.</div><div><br></div><div><br></div><div>I need to find a reliable way to boot into the operating system from USB device which I know resides on specific USB controller/port/hub.</div><div>And our product requires this to work consistently on different models of UEFI-based computers.</div><div>But this 0-based vs 1-based USB Parent Port numbering throws off the logic of our software. </div><div><br></div><div>Can anyone help out with what&#39;s at play here with USB port numbers?</div><div>Is the port numbering supposed to be strict, or any UEFI vendor is free to choose their how to interpret it?</div><div><br></div><div>Thanks and regards,</div><div>Karen Gabrielyan</div><div class="gmail_signature"><div dir="ltr"><div><br></div><div><br></div><div><br></div><div><img src="cid:ii_15a0ff551057418a" alt="Inline image 1" width="472" height="148"><br></div></div></div>
</div>