From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=141.146.126.79; helo=aserp2130.oracle.com; envelope-from=nikita.leshchenko@oracle.com; receiver=edk2-devel@lists.01.org Received: from aserp2130.oracle.com (aserp2130.oracle.com [141.146.126.79]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A45BC211C3864 for ; Thu, 31 Jan 2019 02:08:20 -0800 (PST) Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id x0VA4b8W154339 for ; Thu, 31 Jan 2019 10:08:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2018-07-02; bh=6GY8qE/3P+QYG1mzdGLlh4F8lC4B9ZIT6Cs6HlG8eVs=; b=QjOJGMkYbfeogBYmBX2Xh2KSs4LvBf6PPoTlVtdYhtNpjS9pQgBPiTE3D4XpL10cs0TF BBfQbFOIsaK5mnccW4YDEDKhIIpsf1xi+oQhl6j3SaKZdmUm3l2KTos2ZcmZqptPluTL p05W/8Gj1LgZvIrUz2HfXo6C1/2TnQBffzj2V55fPLeq/+nE1LwJvJQis47pQJqXO1H8 9G3tDs7SW9N8GQ/0xrYLXBun5ZKQA1wpAxsU6UkOpFdkt8OFXHO55Kd7GyzcXCX5qMGD aiJ11fCc4vhNswMeDuDPKVhmB3dZHXbMWr5Z9wg2bQUSrUW9sWOyHcPDE8L6RFDs+KZl 4A== Received: from aserv0021.oracle.com (aserv0021.oracle.com [141.146.126.233]) by aserp2130.oracle.com with ESMTP id 2q8d2efvb4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 31 Jan 2019 10:08:19 +0000 Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0021.oracle.com (8.14.4/8.14.4) with ESMTP id x0VA8Jh1029860 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 31 Jan 2019 10:08:19 GMT Received: from abhmp0013.oracle.com (abhmp0013.oracle.com [141.146.116.19]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id x0VA8J9a029788 for ; Thu, 31 Jan 2019 10:08:19 GMT Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Thu, 31 Jan 2019 02:08:19 -0800 From: Nikita Leshenko To: edk2-devel@lists.01.org Cc: liran.alon@oracle.com, Nikita Leshenko Date: Thu, 31 Jan 2019 12:07:23 +0200 Message-Id: <20190131100724.20907-14-nikita.leshchenko@oracle.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190131100724.20907-1-nikita.leshchenko@oracle.com> References: <20190131100724.20907-1-nikita.leshchenko@oracle.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9152 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=1 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901310080 Subject: [PATCH 13/14] OvmfPkg/MptScsiDxe: Report multiple targets X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 31 Jan 2019 10:08:20 -0000 Content-Transfer-Encoding: 8bit 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. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Nikita Leshenko Reviewed-by: Konrad Rzeszutek Wilk Reviewed-by: Aaron Young Reviewed-by: Liran Alon --- OvmfPkg/MptScsiDxe/MptScsi.c | 27 ++++++++++++++++++++------- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 1 + OvmfPkg/OvmfPkg.dec | 3 +++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index a7dab0f71a..0b888a1c56 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -157,6 +157,7 @@ typedef struct { EFI_PCI_IO_PROTOCOL *PciIo; UINT64 OriginalPciAttributes; UINT32 StallPerPollUsec; + UINT8 MaxTarget; MPT_SCSI_IO_ERROR_REPLY IoErrorReply; MPT_SCSI_REQUEST_WITH_SG IoRequest; } MPT_SCSI_DEV; @@ -245,6 +246,7 @@ MptScsiInit ( EFI_STATUS Status; Dev->StallPerPollUsec = PcdGet32 (PcdMptScsiStallPerPollUsec); + Dev->MaxTarget = PcdGet8 (PcdMptScsiMaxTargetLimit); Status = MptScsiReset (Dev); if (EFI_ERROR (Status)) { @@ -254,7 +256,7 @@ MptScsiInit ( MPT_IO_CONTROLLER_INIT_REQUEST Req = { .WhoInit = MPT_IOC_WHOINIT_ROM_BIOS, .Function = MPT_MESSAGE_HDR_FUNCTION_IOC_INIT, - .MaxDevices = 1, + .MaxDevices = Dev->MaxTarget + 1, .MaxBuses = 1, .ReplyFrameSize = sizeof (MPT_SCSI_IO_ERROR_REPLY), }; @@ -305,6 +307,7 @@ MptScsiInit ( STATIC EFI_STATUS MptScsiPopulateRequest ( + IN MPT_SCSI_DEV *Dev, IN UINT8 Target, IN UINT64 Lun, IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, @@ -316,7 +319,7 @@ MptScsiPopulateRequest ( return EFI_UNSUPPORTED; } - if (Target > 0 || Lun > 0) { + if (Target > Dev->MaxTarget || Lun > 0) { return EFI_INVALID_PARAMETER; } @@ -504,7 +507,7 @@ MptScsiPassThru ( // Packet->DataDirection, // Packet->InTransferLength, Packet->OutTransferLength)); - Status = MptScsiPopulateRequest (*Target, Lun, Packet, &Dev->IoRequest); + Status = MptScsiPopulateRequest (Dev, *Target, Lun, Packet, &Dev->IoRequest); if (EFI_ERROR (Status)) { return Status; } @@ -568,16 +571,22 @@ MptScsiGetNextTargetLun ( IN OUT UINT64 *Lun ) { + MPT_SCSI_DEV *Dev = MPT_SCSI_FROM_PASS_THRU (This); + DEBUG ((EFI_D_INFO, "MptScsiGetNextTargetLun %d %d\n", **Target, *Lun)); - // Currently support only target 0 LUN 0, so hardcode it + // Currently support only LUN 0, so hardcode it if (!IsTargetInitialized (*Target)) { **Target = 0; *Lun = 0; - return EFI_SUCCESS; + } else if (**Target < Dev->MaxTarget) { + **Target += 1; + *Lun = 0; } else { return EFI_NOT_FOUND; } + + return EFI_SUCCESS; } STATIC @@ -588,15 +597,19 @@ MptScsiGetNextTarget ( IN OUT UINT8 **Target ) { + MPT_SCSI_DEV *Dev = MPT_SCSI_FROM_PASS_THRU (This); + DEBUG ((EFI_D_INFO, "MptScsiGetNextTarget\n")); - // Currently support only target 0 LUN 0, so hardcode it if (!IsTargetInitialized (*Target)) { **Target = 0; - return EFI_SUCCESS; + } else if (**Target < Dev->MaxTarget) { + **Target += 1; } else { return EFI_NOT_FOUND; } + + return EFI_SUCCESS; } STATIC diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf index 5875d6c94b..3b6717c204 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -43,3 +43,4 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec ## CONSUMES + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiMaxTargetLimit ## CONSUMES diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 4ca98ff09f..3f088eca96 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -123,6 +123,9 @@ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd|0x0|UINT32|0x1f gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec|5|UINT32|0x28 + ## Set the *inclusive* number of targets that MptScsi exposes for scan + # by ScsiBusDxe. + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiMaxTargetLimit|7|UINT8|0x29 [PcdsDynamic, PcdsDynamicEx] gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2 -- 2.20.1