mirror of https://github.com/acidanthera/audk.git
OvmfPkg: QemuBootOrderLib: recognize Q35 SATA disks / CD-ROMs
The OpenFirmware device paths that QEMU generates for these disks and CD-ROMs are very similar to those generated for the i440fx IDE disks and CD-ROMs (including the same number of devpath nodes necessary for unique parsing). The interpretations and the translation to UEFI devpath fragments are different, of course. (The spaces after "ide@1,1" are inserted below only for illustration purposes.) primary or secondary | master or slave v v i440fx IDE: /pci@i0cf8/ide@1,1 /drive@0/disk@0 Q35 SATA: /pci@i0cf8/pci8086,2922@1f,2/drive@1/disk@0 ^ ^ | device number | (fixed 0) channel (port) number The similarity is reflected in the translation output (spaces again inserted for illustration only): i440fx IDE: PciRoot(0x0)/Pci(0x1,0x1) /Ata(Primary,Master,0x0) Q35 SATA: PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x1,0x0,0x0) ^ ^ ^ | | LUN; | | always 0 on Q35 | port multiplier port | number; always 0 on Q35 channel (port) number Cc: Alexander Graf <agraf@suse.de> Cc: Reza Jelveh <reza.jelveh@tuhh.de> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Hannes Reinecke <hare@suse.de> Cc: Gabriel L. Somlo <somlo@cmu.edu> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Gabriel Somlo <somlo@cmu.edu> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18531 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
8a6e6db42f
commit
0febef91bf
|
@ -769,6 +769,49 @@ TranslatePciOfwNodes (
|
|||
Secondary ? "Secondary" : "Primary",
|
||||
Slave ? "Slave" : "Master"
|
||||
);
|
||||
} else if (NumNodes >= FirstNonBridge + 3 &&
|
||||
SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "pci8086,2922") &&
|
||||
SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "drive") &&
|
||||
SubstringEq (OfwNode[FirstNonBridge + 2].DriverName, "disk")
|
||||
) {
|
||||
//
|
||||
// OpenFirmware device path (Q35 SATA disk and CD-ROM):
|
||||
//
|
||||
// /pci@i0cf8/pci8086,2922@1f,2/drive@1/disk@0
|
||||
// ^ ^ ^ ^ ^
|
||||
// | | | | device number (fixed 0)
|
||||
// | | | channel (port) number
|
||||
// | PCI slot & function holding SATA HBA
|
||||
// PCI root at system bus port, PIO
|
||||
//
|
||||
// UEFI device path:
|
||||
//
|
||||
// PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x1,0x0,0x0)
|
||||
// ^ ^ ^
|
||||
// | | LUN (always 0 on Q35)
|
||||
// | port multiplier port number,
|
||||
// | always 0 on Q35
|
||||
// channel (port) number
|
||||
//
|
||||
UINT64 Channel;
|
||||
|
||||
NumEntries = 1;
|
||||
if (RETURN_ERROR (ParseUnitAddressHexList (
|
||||
OfwNode[FirstNonBridge + 1].UnitAddress, &Channel,
|
||||
&NumEntries))) {
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
|
||||
Written = UnicodeSPrintAsciiFormat (
|
||||
Translated,
|
||||
*TranslatedSize * sizeof (*Translated), // BufferSize in bytes
|
||||
"PciRoot(0x%x)%s/Pci(0x%Lx,0x%Lx)/Sata(0x%Lx,0x0,0x0)",
|
||||
PciRoot,
|
||||
Bridges,
|
||||
PciDevFun[0],
|
||||
PciDevFun[1],
|
||||
Channel
|
||||
);
|
||||
} else if (NumNodes >= FirstNonBridge + 3 &&
|
||||
SubstringEq (OfwNode[FirstNonBridge + 0].DriverName, "isa") &&
|
||||
SubstringEq (OfwNode[FirstNonBridge + 1].DriverName, "fdc") &&
|
||||
|
|
Loading…
Reference in New Issue