From nobody Tue Feb 10 06:58:16 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+55457+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+55457+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1583349751; cv=none; d=zohomail.com; s=zohoarc; b=fBEJo1ytwFsWwTMHUQvIFX36unlPeZ6ITocUBkKZPL/CJkQDe2aXP/nVbrdCrTdBoCWuiyOUcxA/dnhXfe9JxGHJZw/L6n3id3p6uw2fxx72vPPJuDILQIuyfjf6n22wHboug6AXGPRTIs9bglKs60bC4AizTYeg2uh9PjItJCk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1583349751; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=e1ahmlL7zWuEa7Esg3kciTJkTUyVDSvrTVQwSPlGf2Q=; b=PwlWDk4vaGCCACus/7Kaaam7uaTlYar4rL0JFY4dBVK27+419dKC9f2B6d3uEPT1lqiP0vmGhTjvO3GO9lPOvBaM/gOKIDDmbSuAQ36bUKFubIjORjkSOz5XRWhlg+TMRfZP7l+xwRKLqq7Mju35QZIZZLdrzws9X0D6RrehZT0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+55457+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1583349751679140.93485576677995; Wed, 4 Mar 2020 11:22:31 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id 1EGKYY1788612x8owxC4eVtB; Wed, 04 Mar 2020 11:22:31 -0800 X-Received: from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78]) by mx.groups.io with SMTP id smtpd.web09.16659.1583349750674862273 for ; Wed, 04 Mar 2020 11:22:30 -0800 X-Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 024Iw6uK027780; Wed, 4 Mar 2020 19:22:30 GMT X-Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 2yffwr0e4y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 04 Mar 2020 19:22:30 +0000 X-Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 024JDCC7149081; Wed, 4 Mar 2020 19:22:29 GMT X-Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3030.oracle.com with ESMTP id 2yg1h1h4yt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 04 Mar 2020 19:22:29 +0000 X-Received: from abhmp0017.oracle.com (abhmp0017.oracle.com [141.146.116.23]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 024JMShw024859; Wed, 4 Mar 2020 19:22:28 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 04 Mar 2020 11:22:28 -0800 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, jordan.l.justen@intel.com, lersek@redhat.com, ard.biesheuvel@linaro.org Subject: [edk2-devel] [PATCH v3 13/13] OvmfPkg/MptScsiDxe: Report multiple targets Date: Wed, 4 Mar 2020 21:22:57 +0200 Message-Id: <20200304192257.96736-14-nikita.leshchenko@oracle.com> In-Reply-To: <20200304192257.96736-1-nikita.leshchenko@oracle.com> References: <20200304192257.96736-1-nikita.leshchenko@oracle.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,nikita.leshchenko@oracle.com X-Gm-Message-State: SmnRpMaWKgtemvASTO9MA3hKx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1583349751; bh=uDNWAWULdpUZiLiBHpgwbJVWvNxmfx/BCb0xyikvE4U=; h=Cc:Date:From:Reply-To:Subject:To; b=qJtIoZGyFU9bVs8gqjGbR5DKqpAud+f0y+z7/hqZ32uXt8JnzM1FpUC3y16hjpFLyY+ ZHPnc7c3n+R+5nSSEipDbT3zMn4jOdv/C+N3hglA+m7P9vxbUBL9A68X8CgrgL0aF8ptg bBBauRWwreMWNIpRp3b2j1ZEo+sPg3ZoOBA= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The controller supports up to 8 targets (Not reported by the controller, but based on the implementation of the virtual device), report them in GetNextTarget and GetNextTargetLun. The firmware will then try to communicate with them and create a block device for each one that responds. Support for multiple LUNs will be implemented in another series. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Liran Alon --- OvmfPkg/MptScsiDxe/MptScsi.c | 44 ++++++++++++++++++++++++------- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 1 + OvmfPkg/OvmfPkg.dec | 4 +++ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 0985be07bc8e..dbc765f94136 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -51,6 +51,7 @@ typedef struct { EFI_PCI_IO_PROTOCOL *PciIo; UINT64 OriginalPciAttributes; UINT32 StallPerPollUsec; + UINT8 MaxTarget; MPT_SCSI_DMA_BUFFER *Dma; EFI_PHYSICAL_ADDRESS DmaPhysical; VOID *DmaMapping; @@ -163,6 +164,7 @@ MptScsiInit ( UINT32 Reply32; =20 Dev->StallPerPollUsec =3D PcdGet32 (PcdMptScsiStallPerPollUsec); + Dev->MaxTarget =3D PcdGet8 (PcdMptScsiMaxTargetLimit); =20 Status =3D MptScsiReset (Dev); if (EFI_ERROR (Status)) { @@ -173,7 +175,7 @@ MptScsiInit ( ZeroMem (&Reply, sizeof (Reply)); Req.Data.WhoInit =3D MPT_IOC_WHOINIT_ROM_BIOS; Req.Data.Function =3D MPT_MESSAGE_HDR_FUNCTION_IOC_INIT; - Req.Data.MaxDevices =3D 1; + Req.Data.MaxDevices =3D Dev->MaxTarget + 1; Req.Data.MaxBuses =3D 1; Req.Data.ReplyFrameSize =3D sizeof (MPT_SCSI_IO_ERROR_REPLY); =20 @@ -252,7 +254,7 @@ MptScsiPopulateRequest ( return EFI_UNSUPPORTED; } =20 - if (Target > 0 || Lun > 0) { + if (Target > Dev->MaxTarget || Lun > 0) { return EFI_INVALID_PARAMETER; } =20 @@ -532,16 +534,27 @@ MptScsiGetNextTargetLun ( IN OUT UINT64 *Lun ) { + MPT_SCSI_DEV *Dev; + + Dev =3D MPT_SCSI_FROM_PASS_THRU (This); // - // Currently support only target 0 LUN 0, so hardcode it + // Currently support only LUN 0, so hardcode it // if (!IsTargetInitialized (*Target)) { ZeroMem (*Target, TARGET_MAX_BYTES); *Lun =3D 0; - return EFI_SUCCESS; + } else if (**Target < Dev->MaxTarget) { + // + // This device support 256 targets only, so it's enough to increment + // the LSB of Target, as it will never overflow. + // + **Target +=3D 1; + *Lun =3D 0; } else { return EFI_NOT_FOUND; } + + return EFI_SUCCESS; } =20 STATIC @@ -552,15 +565,22 @@ MptScsiGetNextTarget ( IN OUT UINT8 **Target ) { - // - // Currently support only target 0 LUN 0, so hardcode it - // + MPT_SCSI_DEV *Dev; + + Dev =3D MPT_SCSI_FROM_PASS_THRU (This); if (!IsTargetInitialized (*Target)) { ZeroMem (*Target, TARGET_MAX_BYTES); - return EFI_SUCCESS; + } else if (**Target < Dev->MaxTarget) { + // + // This device support 256 targets only, so it's enough to increment + // the LSB of Target, as it will never overflow. + // + **Target +=3D 1; } else { return EFI_NOT_FOUND; } + + return EFI_SUCCESS; } =20 STATIC @@ -573,6 +593,7 @@ MptScsiBuildDevicePath ( IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { + MPT_SCSI_DEV *Dev; SCSI_DEVICE_PATH *ScsiDevicePath; =20 if (DevicePath =3D=3D NULL) { @@ -583,7 +604,8 @@ MptScsiBuildDevicePath ( // This device support 256 targets only, so it's enough to dereference // the LSB of Target. // - if (*Target > 0 || Lun > 0) { + Dev =3D MPT_SCSI_FROM_PASS_THRU (This); + if (*Target > Dev->MaxTarget || Lun > 0) { return EFI_NOT_FOUND; } =20 @@ -613,6 +635,7 @@ MptScsiGetTargetLun ( OUT UINT64 *Lun ) { + MPT_SCSI_DEV *Dev; SCSI_DEVICE_PATH *ScsiDevicePath; =20 if (DevicePath =3D=3D NULL || @@ -625,8 +648,9 @@ MptScsiGetTargetLun ( return EFI_UNSUPPORTED; } =20 + Dev =3D MPT_SCSI_FROM_PASS_THRU (This); ScsiDevicePath =3D (SCSI_DEVICE_PATH *)DevicePath; - if (ScsiDevicePath->Pun > 0 || + if (ScsiDevicePath->Pun > Dev->MaxTarget || ScsiDevicePath->Lun > 0) { return EFI_NOT_FOUND; } diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf index 1ba65f2fbbdf..b21655bc7f81 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -43,3 +43,4 @@ [Protocols] =20 [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec ## CONSUMES + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiMaxTargetLimit ## CONSUMES diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 7e8097f9952e..1e17df0316a1 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -231,6 +231,10 @@ [PcdsFixedAtBuild] ## Microseconds to stall between polling for MptScsi request result gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec|5|UINT32|0x36 =20 + ## Set the *inclusive* number of targets that MptScsi exposes for scan + # by ScsiBusDxe. + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiMaxTargetLimit|7|UINT8|0x37 + [PcdsDynamic, PcdsDynamicEx] gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable|FALSE|BOOLEAN|0x10 --=20 2.20.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#55457): https://edk2.groups.io/g/devel/message/55457 Mute This Topic: https://groups.io/mt/71733508/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-