From nobody Mon Apr 29 10:19:57 2024 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+57363+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+57363+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885736; cv=none; d=zohomail.com; s=zohoarc; b=LlMNU9qgXV4/NxIuIils1B3Ls1w8PFOTa+iT9VkVajVyrczkhOY+8h283o/IpdDalY2CFEhwEL/3u+UZT2PgA7wx98fxORsAmEBMEqMDmEHN5oH7AiWn/BOjSDqRLRdBX34Yx5ZoaakguUCfSllHZVCUJ07PwWKpZb/2TxkJlFc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885736; 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=P1JpBIzYp47ezmTHp4/iiqVdhHpY86pEB16GIQpoY/k=; b=MdTyEqPSOlzYzHAHE56LU6Yf3iBA+Qongu6ldumNs+c16Uean/xRFeQA1DYSnyJ1EhoS7awDLATFJHXpQ2varm7VzGtxwQ7kgiEup+UektKJyvUcmgNv1VGN8y+tTOt4mbtEC24wOOxI6HBnIe+pnwfCXHvU5I4CcCUpeYCxLfc= 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+57363+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 1586885736166378.8652926501511; Tue, 14 Apr 2020 10:35:36 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id J3zKYY1788612xO5JiXfiPk7; Tue, 14 Apr 2020 10:35:35 -0700 X-Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) by mx.groups.io with SMTP id smtpd.web10.718.1586885735277358861 for ; Tue, 14 Apr 2020 10:35:35 -0700 X-Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH9ap5154802; Tue, 14 Apr 2020 17:35:31 GMT X-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2120.oracle.com with ESMTP id 30b6hpp86a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:31 +0000 X-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7ScE130599; Tue, 14 Apr 2020 17:35:31 GMT X-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3020.oracle.com with ESMTP id 30bqm2e1es-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:30 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 03EHZTAC030649; Tue, 14 Apr 2020 17:35:30 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:29 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 01/13] OvmfPkg/MptScsiDxe: Create empty driver Date: Tue, 14 Apr 2020 20:38:01 +0300 Message-Id: <20200414173813.7715-2-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: Sw8NLz6zdHWd6HGk0xmJ8un2x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885735; bh=33RnoXKjM9cmqlsPdXvQeo5EW4zoUwhnSR3TxohILCo=; h=Cc:Date:From:Reply-To:Subject:To; b=qd37S/3EqTmqNUPnkP6zwHVi4tFtaubs49UF1Yw3gGSx1dOnd6drP4NOdYT6RGbP1Hf Da+XfgOu52kezlQ7Pz1chilsnv1sWRKET3nLmGP/D8Gokic2C2HNrW0UzMw4cG8gSJONc FWCaccyC/1OifhAuCMadwbdYCPSd/hj2b7w= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" In preparation for implementing LSI Fusion MPT SCSI devices, create a basic scaffolding for a driver. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Liran Alon Reviewed-by: Laszlo Ersek --- Maintainers.txt | 3 ++- OvmfPkg/MptScsiDxe/MptScsi.c | 26 ++++++++++++++++++++++++++ OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 26 ++++++++++++++++++++++++++ OvmfPkg/OvmfPkgIa32.dsc | 4 ++++ OvmfPkg/OvmfPkgIa32.fdf | 3 +++ OvmfPkg/OvmfPkgIa32X64.dsc | 4 ++++ OvmfPkg/OvmfPkgIa32X64.fdf | 3 +++ OvmfPkg/OvmfPkgX64.dsc | 4 ++++ OvmfPkg/OvmfPkgX64.fdf | 3 +++ 9 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 OvmfPkg/MptScsiDxe/MptScsi.c create mode 100644 OvmfPkg/MptScsiDxe/MptScsiDxe.inf diff --git a/Maintainers.txt b/Maintainers.txt index 1733225722b6..01b5b8188158 100644 --- a/Maintainers.txt +++ b/Maintainers.txt @@ -435,8 +435,9 @@ OvmfPkg: CSM modules F: OvmfPkg/Csm/ R: David Woodhouse =20 -OvmfPkg: PVSCSI driver +OvmfPkg: PVSCSI and MptScsi driver F: OvmfPkg/PvScsiDxe/ +F: OvmfPkg/MptScsiDxe/ R: Liran Alon R: Nikita Leshenko =20 diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c new file mode 100644 index 000000000000..c6c8142dfde6 --- /dev/null +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -0,0 +1,26 @@ +/** @file + + This driver produces Extended SCSI Pass Thru Protocol instances for + LSI Fusion MPT SCSI devices. + + Copyright (C) 2020, Oracle and/or its affiliates. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +// +// Entry Point +// + +EFI_STATUS +EFIAPI +MptScsiEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + return EFI_UNSUPPORTED; +} diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf new file mode 100644 index 000000000000..b4006a7c2d97 --- /dev/null +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -0,0 +1,26 @@ +## @file +# This driver produces Extended SCSI Pass Thru Protocol instances for +# LSI Fusion MPT SCSI devices. +# +# Copyright (C) 2020, Oracle and/or its affiliates. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 1.29 + BASE_NAME =3D MptScsiDxe + FILE_GUID =3D 2B3DB5DD-B315-4961-8454-0AFF3C811B19 + MODULE_TYPE =3D UEFI_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D MptScsiEntryPoint + +[Sources] + MptScsi.c + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + UefiDriverEntryPoint diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index cbc5f0e583bc..158a5e9f39bd 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -49,6 +49,7 @@ [Defines] # Device drivers # DEFINE PVSCSI_ENABLE =3D TRUE + DEFINE MPT_SCSI_ENABLE =3D TRUE =20 # # Flash size selection. Setting FD_SIZE_IN_KB on the command line direct= ly to @@ -744,6 +745,9 @@ [Components] OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf !if $(PVSCSI_ENABLE) =3D=3D TRUE OvmfPkg/PvScsiDxe/PvScsiDxe.inf +!endif +!if $(MPT_SCSI_ENABLE) =3D=3D TRUE + OvmfPkg/MptScsiDxe/MptScsiDxe.inf !endif MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntim= eDxe.inf diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index 8e43f4264ecc..fd81b6fa8bed 100644 --- a/OvmfPkg/OvmfPkgIa32.fdf +++ b/OvmfPkg/OvmfPkgIa32.fdf @@ -233,6 +233,9 @@ [FV.DXEFV] !if $(PVSCSI_ENABLE) =3D=3D TRUE INF OvmfPkg/PvScsiDxe/PvScsiDxe.inf !endif +!if $(MPT_SCSI_ENABLE) =3D=3D TRUE +INF OvmfPkg/MptScsiDxe/MptScsiDxe.inf +!endif =20 !if $(SECURE_BOOT_ENABLE) =3D=3D TRUE INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootCon= figDxe.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index 6d69cc6cb56f..a6c5a1d9d050 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -48,6 +48,7 @@ [Defines] # Device drivers # DEFINE PVSCSI_ENABLE =3D TRUE + DEFINE MPT_SCSI_ENABLE =3D TRUE =20 # # Flash size selection. Setting FD_SIZE_IN_KB on the command line direct= ly to @@ -756,6 +757,9 @@ [Components.X64] OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf !if $(PVSCSI_ENABLE) =3D=3D TRUE OvmfPkg/PvScsiDxe/PvScsiDxe.inf +!endif +!if $(MPT_SCSI_ENABLE) =3D=3D TRUE + OvmfPkg/MptScsiDxe/MptScsiDxe.inf !endif MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntim= eDxe.inf diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index 25af9fbed48a..f71134a65931 100644 --- a/OvmfPkg/OvmfPkgIa32X64.fdf +++ b/OvmfPkg/OvmfPkgIa32X64.fdf @@ -234,6 +234,9 @@ [FV.DXEFV] !if $(PVSCSI_ENABLE) =3D=3D TRUE INF OvmfPkg/PvScsiDxe/PvScsiDxe.inf !endif +!if $(MPT_SCSI_ENABLE) =3D=3D TRUE +INF OvmfPkg/MptScsiDxe/MptScsiDxe.inf +!endif =20 !if $(SECURE_BOOT_ENABLE) =3D=3D TRUE INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootCon= figDxe.inf diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 5ad4f461ce52..9aa8dd9e5fe1 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -48,6 +48,7 @@ [Defines] # Device drivers # DEFINE PVSCSI_ENABLE =3D TRUE + DEFINE MPT_SCSI_ENABLE =3D TRUE =20 # # Flash size selection. Setting FD_SIZE_IN_KB on the command line direct= ly to @@ -754,6 +755,9 @@ [Components] OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf !if $(PVSCSI_ENABLE) =3D=3D TRUE OvmfPkg/PvScsiDxe/PvScsiDxe.inf +!endif +!if $(MPT_SCSI_ENABLE) =3D=3D TRUE + OvmfPkg/MptScsiDxe/MptScsiDxe.inf !endif MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntim= eDxe.inf diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 25af9fbed48a..f71134a65931 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -234,6 +234,9 @@ [FV.DXEFV] !if $(PVSCSI_ENABLE) =3D=3D TRUE INF OvmfPkg/PvScsiDxe/PvScsiDxe.inf !endif +!if $(MPT_SCSI_ENABLE) =3D=3D TRUE +INF OvmfPkg/MptScsiDxe/MptScsiDxe.inf +!endif =20 !if $(SECURE_BOOT_ENABLE) =3D=3D TRUE INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootCon= figDxe.inf --=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 (#57363): https://edk2.groups.io/g/devel/message/57363 Mute This Topic: https://groups.io/mt/73015378/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- From nobody Mon Apr 29 10:19:57 2024 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+57364+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+57364+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885737; cv=none; d=zohomail.com; s=zohoarc; b=RGuRf6SyeqgNnWGIcTx5Hw/zM2NuPlM8auMqTkA/qipb/UoSBchr3+TznDokbY/bAFCFES1EZHCfm9f6SD4yPRz1OjEbYl7h3lLY5rGs97U1WiVTTN7gXyxtCiLL39ExsosczJLtQwkCoD0EgdyfNMrCKZYol6WHDjeJDPiugp8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885737; 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=4ZXEhFHWVBTjfgVRx3Owa/NOMRqcDukGrQlheR4wtv8=; b=eJ/zyjAUwuY5caWxcNjVpoiDqt4NCXZbHO0gOX1fn3ItBDRCvTU8L4JsZZbR6L8CEz3Ji2LuZ2WCZdb7ENJjQuqC32oHai07znAkq+sPRKt82eZeAPMyNrwHUQfKq+rjVPWISRSunziYxOmpnhVN82khEWhQG2pWBlUDODkatts= 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+57364+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 1586885737690488.8121600343054; Tue, 14 Apr 2020 10:35:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id YLYjYY1788612xthUyN1dWht; Tue, 14 Apr 2020 10:35:37 -0700 X-Received: from userp2130.oracle.com (userp2130.oracle.com [156.151.31.86]) by mx.groups.io with SMTP id smtpd.web10.719.1586885736895506425 for ; Tue, 14 Apr 2020 10:35:37 -0700 X-Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EHAfFg141189; Tue, 14 Apr 2020 17:35:33 GMT X-Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2130.oracle.com with ESMTP id 30b5ar68p9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:33 +0000 X-Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7ro3011980; Tue, 14 Apr 2020 17:35:33 GMT X-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3030.oracle.com with ESMTP id 30bqcjamkd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:33 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 03EHZWnt030657; Tue, 14 Apr 2020 17:35:32 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:31 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 02/13] OvmfPkg/MptScsiDxe: Install DriverBinding Protocol Date: Tue, 14 Apr 2020 20:38:02 +0300 Message-Id: <20200414173813.7715-3-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: c7mhweWjvBriGaIMu2FTLwNex1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885737; bh=ku+3AoMoB/jgku1oa/MY+WBjj9F1eWBFIIZWWJ1xFhg=; h=Cc:Date:From:Reply-To:Subject:To; b=iY5FgBcnR5KcfP7FhJtfxmCyrCqbx2dtEQmVYdrKv2RZKeg3N3MZ/hKhQcC1Hf4htrE L/bwL8UegUZETyFD92OqQand38iXyq8Gx5ndfCyP2x/yvuQysyE7eivj40zsT4j7TQTn7 5kbGJIKCvlPsrURmkFIuFc0pPQXZfEZbgq8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" In order to probe and connect to the MptScsi device we need this protocol. Currently it does nothing. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Laszlo Ersek Reviewed-by: Liran Alon --- OvmfPkg/MptScsiDxe/MptScsi.c | 67 ++++++++++++++++++++++++++++++- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 1 + 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index c6c8142dfde6..581d3909b84d 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -9,8 +9,66 @@ =20 **/ =20 +#include #include =20 +// +// Higher versions will be used before lower, 0x10-0xffffffef is the versi= on +// range for IVH (Indie Hardware Vendors) +// +#define MPT_SCSI_BINDING_VERSION 0x10 + +// +// Driver Binding +// + +STATIC +EFI_STATUS +EFIAPI +MptScsiControllerSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiControllerStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiControllerStop ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN UINTN NumberOfChildren, + IN EFI_HANDLE *ChildHandleBuffer + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_DRIVER_BINDING_PROTOCOL mMptScsiDriverBinding =3D { + &MptScsiControllerSupported, + &MptScsiControllerStart, + &MptScsiControllerStop, + MPT_SCSI_BINDING_VERSION, + NULL, // ImageHandle, filled by EfiLibInstallDriverBindingComponentName2 + NULL, // DriverBindingHandle, filled as well +}; + // // Entry Point // @@ -22,5 +80,12 @@ MptScsiEntryPoint ( IN EFI_SYSTEM_TABLE *SystemTable ) { - return EFI_UNSUPPORTED; + return EfiLibInstallDriverBindingComponentName2 ( + ImageHandle, + SystemTable, + &mMptScsiDriverBinding, + ImageHandle, // The handle to install onto + NULL, // TODO Component name + NULL // TODO Component name + ); } diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf index b4006a7c2d97..53585068684f 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -24,3 +24,4 @@ [Packages] =20 [LibraryClasses] UefiDriverEntryPoint + UefiLib --=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 (#57364): https://edk2.groups.io/g/devel/message/57364 Mute This Topic: https://groups.io/mt/73015379/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- From nobody Mon Apr 29 10:19:57 2024 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+57365+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+57365+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885740; cv=none; d=zohomail.com; s=zohoarc; b=G7M4MMxO1ywHArGESY79mR9pr+ZBL+BBpxqESIYVA6eejaGaavKARLOns8a58AFN81ujmff5ZRFhQcAFAdjkuNqT60cjsgteQ5adaFR/g8dyJKdEe1sQIuwt0K1+OF3K03VeeYRWjf1CHxaQTqtSbLZviowclRkwaLARy/j6Drk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885740; 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=y9WVcRrV1+6geFkpyrWMKJ7LbA93HT9qGKLNUVO4xgg=; b=Kf0L6laJ8fDI9TVcQOOKC1oz3pijPHHySI0vU/CAEGDU9F4SB4Ol6e7fMJJO7m4BigzG/altygbCT8Nhka0L5vsK5Z/YcwSVxLb5kSBLh32hJQqBbI2FlSuxUG0K7Xlk2oYfg6qrXEfn8pSsaESm4s92ym/ZMkvAJXaz9mNVt+4= 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+57365+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 1586885740254400.6751455473832; Tue, 14 Apr 2020 10:35:40 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 7bQOYY1788612x67oKyQnQx2; Tue, 14 Apr 2020 10:35:39 -0700 X-Received: from userp2130.oracle.com (userp2130.oracle.com [156.151.31.86]) by mx.groups.io with SMTP id smtpd.web12.662.1586885739419293900 for ; Tue, 14 Apr 2020 10:35:39 -0700 X-Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EHAeuE141096; Tue, 14 Apr 2020 17:35:36 GMT X-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 30b5ar68pm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:35 +0000 X-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7TCd130682; Tue, 14 Apr 2020 17:35:35 GMT X-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by userp3020.oracle.com with ESMTP id 30bqm2e1kc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:35 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 03EHZYC2030705; Tue, 14 Apr 2020 17:35:34 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:34 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Jaben Carsey Subject: [edk2-devel] [PATCH v4 03/13] OvmfPkg/MptScsiDxe: Report name of driver Date: Tue, 14 Apr 2020 20:38:03 +0300 Message-Id: <20200414173813.7715-4-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: 0joDkyKgupW5HixaEb15qcD3x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885739; bh=rpASH+ZtGVr8cczwM2y3jvJE160qiCsVvIjz9ymsoqY=; h=Cc:Date:From:Reply-To:Subject:To; b=ZfmrNiqGp16q5mmnIelT2Uxe+mWEnUwwMsbdowKhbjMHs5kQLZ9/GK9Bqc7M37uTw7a 77Ot62SGW7xgMdeoSPo+GnugvQP6830Oggj/eZRPL0LDeVgUyBj8DecpH2N67pnA7c4YE vXLeBZc1uqeRI4sBCZLeDk0yPPBXcxQBja0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Install Component Name protocols to have a nice display name for the driver in places such as UEFI shell. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Laszlo Ersek Reviewed-by: Jaben Carsey Reviewed-by: Liran Alon --- OvmfPkg/MptScsiDxe/MptScsi.c | 61 ++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 581d3909b84d..64949a809022 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -69,6 +69,63 @@ EFI_DRIVER_BINDING_PROTOCOL mMptScsiDriverBinding =3D { NULL, // DriverBindingHandle, filled as well }; =20 +// +// Component Name +// + +STATIC +EFI_UNICODE_STRING_TABLE mDriverNameTable[] =3D { + { "eng;en", L"LSI Fusion MPT SCSI Driver" }, + { NULL, NULL } +}; + +STATIC +EFI_COMPONENT_NAME_PROTOCOL mComponentName; + +EFI_STATUS +EFIAPI +MptScsiGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +{ + return LookupUnicodeString2 ( + Language, + This->SupportedLanguages, + mDriverNameTable, + DriverName, + (BOOLEAN)(This =3D=3D &mComponentName) // Iso639Language + ); +} + +EFI_STATUS +EFIAPI +MptScsiGetDeviceName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE DeviceHandle, + IN EFI_HANDLE ChildHandle, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_COMPONENT_NAME_PROTOCOL mComponentName =3D { + &MptScsiGetDriverName, + &MptScsiGetDeviceName, + "eng" // SupportedLanguages, ISO 639-2 language codes +}; + +STATIC +EFI_COMPONENT_NAME2_PROTOCOL mComponentName2 =3D { + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) &MptScsiGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) &MptScsiGetDeviceName, + "en" // SupportedLanguages, RFC 4646 language codes +}; + // // Entry Point // @@ -85,7 +142,7 @@ MptScsiEntryPoint ( SystemTable, &mMptScsiDriverBinding, ImageHandle, // The handle to install onto - NULL, // TODO Component name - NULL // TODO Component name + &mComponentName, + &mComponentName2 ); } --=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 (#57365): https://edk2.groups.io/g/devel/message/57365 Mute This Topic: https://groups.io/mt/73015381/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- From nobody Mon Apr 29 10:19:57 2024 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+57373+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+57373+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885863; cv=none; d=zohomail.com; s=zohoarc; b=cApVoh6MHPBiShkeWHzAc3tfZnkWjpgkMnw/I/K9CHHwVXSwSPMEt/IIBaK8TvMFhU3mB7OQQikzU4QlOfFd0PrNbxxtBti1EIEGrIkNvH7N3Pg9G7iPA3UAtU0OkrnbF54fBg70lbj+gt0nbcOYalwHt5bstHFyOxGc29w1exo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885863; 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=cJO406iG+w5hAkQ8W2NCWUgjWRbgdRq8XfMvy6OgN20=; b=j49WRMIGRn/BajJ3fjrMnzWmtaI1No0fjyVP32ZPCorsbFcX/0TcrDDttiRnpkktwxQ3Mz2DsiQ2E4McgjJI9KB3tCii9NxZKlc0+amVxt5AN5yU9gMjyQ/qTmgLb14aJN6bcqg6QDowA/9WiZltWZX4aRdHA4Tmo4evPUQ3u80= 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+57373+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 1586885863587270.0015450062907; Tue, 14 Apr 2020 10:37:43 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id veiGYY1788612xipaWB5phXb; Tue, 14 Apr 2020 10:37:43 -0700 X-Received: from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78]) by mx.groups.io with SMTP id smtpd.web11.712.1586885862714991792 for ; Tue, 14 Apr 2020 10:37:42 -0700 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 03EHAARr173248; Tue, 14 Apr 2020 17:37:39 GMT X-Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 30b5um6a6c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:37:39 +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 03EH7EKG116454; Tue, 14 Apr 2020 17:35:38 GMT X-Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by aserp3030.oracle.com with ESMTP id 30ctaarq8g-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:38 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZbWW016297; Tue, 14 Apr 2020 17:35:37 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:36 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 04/13] OvmfPkg/MptScsiDxe: Probe PCI devices and look for MptScsi Date: Tue, 14 Apr 2020 20:38:04 +0300 Message-Id: <20200414173813.7715-5-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: QYt07hWZNWGLJTgzIwyp4vQAx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885863; bh=haCWr771Mywjz6rZW/cPnLeG5QrXhKWYFqhXD4jqdDY=; h=Cc:Date:From:Reply-To:Subject:To; b=Hu9vNe06FnvW0yT+Ux5sxXJtQCLDT0phjk3/Mzaw9sui4VS0tWAJRGXBhpTvlEFtaSz tLpo+6723GU4tZwykATdvWezcWt/fbMxvBFUxhotZa2LMW1wozrJ0cojlD/4S187w9qy4 M/nQ0abmbBq7lZT+64ap5k6XLzOlCjDI3aQ= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" The MptScsiControllerSupported function is called on handles passed in by the ConnectController() boot service and if the handle is the lsi53c1030 controller the function would return success. A successful return value will attach our driver to the device. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Laszlo Ersek Reviewed-by: Liran Alon --- .../Include/IndustryStandard/FusionMptScsi.h | 23 +++++++++ OvmfPkg/MptScsiDxe/MptScsi.c | 49 ++++++++++++++++++- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 5 ++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 OvmfPkg/Include/IndustryStandard/FusionMptScsi.h diff --git a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h b/OvmfPkg/Inc= lude/IndustryStandard/FusionMptScsi.h new file mode 100644 index 000000000000..df9bdc2f0348 --- /dev/null +++ b/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h @@ -0,0 +1,23 @@ +/** @file + + Macros and type definitions for LSI Fusion MPT SCSI devices. + + Copyright (C) 2020, Oracle and/or its affiliates. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __FUSION_MPT_SCSI_H__ +#define __FUSION_MPT_SCSI_H__ + +// +// Device offsets and constants +// + +#define LSI_LOGIC_PCI_VENDOR_ID 0x1000 +#define LSI_53C1030_PCI_DEVICE_ID 0x0030 +#define LSI_SAS1068_PCI_DEVICE_ID 0x0054 +#define LSI_SAS1068E_PCI_DEVICE_ID 0x0058 + +#endif // __FUSION_MPT_SCSI_H__ diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 64949a809022..4e2f8f2296fb 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -9,7 +9,11 @@ =20 **/ =20 +#include +#include +#include #include +#include #include =20 // @@ -31,7 +35,50 @@ MptScsiControllerSupported ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - return EFI_UNSUPPORTED; + EFI_STATUS Status; + EFI_PCI_IO_PROTOCOL *PciIo; + PCI_TYPE00 Pci; + + Status =3D gBS->OpenProtocol ( + ControllerHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&PciIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + return Status; + } + + Status =3D PciIo->Pci.Read ( + PciIo, + EfiPciIoWidthUint32, + 0, + sizeof (Pci) / sizeof (UINT32), + &Pci + ); + if (EFI_ERROR (Status)) { + goto Done; + } + + if (Pci.Hdr.VendorId =3D=3D LSI_LOGIC_PCI_VENDOR_ID && + (Pci.Hdr.DeviceId =3D=3D LSI_53C1030_PCI_DEVICE_ID || + Pci.Hdr.DeviceId =3D=3D LSI_SAS1068_PCI_DEVICE_ID || + Pci.Hdr.DeviceId =3D=3D LSI_SAS1068E_PCI_DEVICE_ID)) { + Status =3D EFI_SUCCESS; + } else { + Status =3D EFI_UNSUPPORTED; + } + +Done: + gBS->CloseProtocol ( + ControllerHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); + return Status; } =20 STATIC diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf index 53585068684f..414b96e5a248 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -21,7 +21,12 @@ [Sources] =20 [Packages] MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] + UefiBootServicesTableLib UefiDriverEntryPoint UefiLib + +[Protocols] + gEfiPciIoProtocolGuid ## TO_START --=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 (#57373): https://edk2.groups.io/g/devel/message/57373 Mute This Topic: https://groups.io/mt/73015428/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- From nobody Mon Apr 29 10:19:57 2024 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+57366+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+57366+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885745; cv=none; d=zohomail.com; s=zohoarc; b=VTse8DZQVieocr2mEaKCblNtvF0kILRefSNj1K9bIFsiRis3aJ6isag4j/CDDoagWTt2eHJN11o+pwIlztdARuRWjoOrZeszuRJtdw3V5oX39Gp+nKlIqlwEwUWN3rFXhh/3lbZmca31/lq2romZy5k00vB5uBcQAIf9T0mb4Kc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885745; 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=1CMH7P+uOUVtqRkcczV37pn+R1VtcuhjjFk4Scergqs=; b=Gw9bslt47zbzgGp69BZpv1Euhtw8/SDntrzB113MmpIVp2bOvw+MJMM3D+SP/tKpBFcEgDNb9wHNgaNu7N7A+kkBYRd1U6yIOto3IXUQnqfaj7izueewwVcdxUjLolhPvMf5kFSCqNAHN0aN/sDE4TnQh7WXiEV0xGVw2x3/t0k= 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+57366+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 1586885745845975.5613400036248; Tue, 14 Apr 2020 10:35:45 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id c8s4YY1788612xi8o5q9v3In; Tue, 14 Apr 2020 10:35:45 -0700 X-Received: from userp2130.oracle.com (userp2130.oracle.com [156.151.31.86]) by mx.groups.io with SMTP id smtpd.web10.722.1586885744987529823 for ; Tue, 14 Apr 2020 10:35:45 -0700 X-Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EHAovU141442; Tue, 14 Apr 2020 17:35:41 GMT X-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 30b5ar68q1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:41 +0000 X-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7SDN130635; Tue, 14 Apr 2020 17:35:40 GMT X-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 30bqm2e1q8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:40 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZdnU026751; Tue, 14 Apr 2020 17:35:39 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:38 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 05/13] OvmfPkg/MptScsiDxe: Install stubbed EXT_SCSI_PASS_THRU Date: Tue, 14 Apr 2020 20:38:05 +0300 Message-Id: <20200414173813.7715-6-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: NasfmMTdzs6lv0fFr057OTgmx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885745; bh=2sIxC6Sz7Vf6jNJdJk8fRpu4QpjaVyzn+z5zoFUsuOo=; h=Cc:Date:From:Reply-To:Subject:To; b=JdLNFnFhXhzb9G7Kks6uimNT5KeGNk10ZACr58/NvAIs3Ke9M5K6WhcCCrXgFPv5Ppp E6ELMnZmi0WkyQ7ZfvOwxcg8ZP0PkTR2Kqlx837BQLGFMDSJ1Ln1yOup1sgRc90QFsHdN Ezh8uL8uv2qSaxtXnLON0kZK9h+O8o818UA= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Support dynamic insertion and removal of the protocol Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Laszlo Ersek --- OvmfPkg/MptScsiDxe/MptScsi.c | 181 +++++++++++++++++++++++++++++- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 5 +- 2 files changed, 183 insertions(+), 3 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 4e2f8f2296fb..40d392c2346f 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -11,9 +11,12 @@ =20 #include #include +#include +#include #include #include #include +#include #include =20 // @@ -22,6 +25,109 @@ // #define MPT_SCSI_BINDING_VERSION 0x10 =20 +// +// Runtime Structures +// + +#define MPT_SCSI_DEV_SIGNATURE SIGNATURE_32 ('M','P','T','S') +typedef struct { + UINT32 Signature; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; + EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; +} MPT_SCSI_DEV; + +#define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ + CR (PassThruPtr, MPT_SCSI_DEV, PassThru, MPT_SCSI_DEV_SIGNATURE) + +// +// Ext SCSI Pass Thru +// + +STATIC +EFI_STATUS +EFIAPI +MptScsiPassThru ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet, + IN EFI_EVENT Event OPTIONAL + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiGetNextTargetLun ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target, + IN OUT UINT64 *Lun + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiGetNextTarget ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN OUT UINT8 **Target + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiBuildDevicePath ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun, + IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiGetTargetLun ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, + OUT UINT8 **Target, + OUT UINT64 *Lun + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiResetChannel ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This + ) +{ + return EFI_UNSUPPORTED; +} + +STATIC +EFI_STATUS +EFIAPI +MptScsiResetTargetLun ( + IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This, + IN UINT8 *Target, + IN UINT64 Lun + ) +{ + return EFI_UNSUPPORTED; +} + // // Driver Binding // @@ -90,7 +196,49 @@ MptScsiControllerStart ( IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ) { - return EFI_UNSUPPORTED; + EFI_STATUS Status; + MPT_SCSI_DEV *Dev; + + Dev =3D AllocateZeroPool (sizeof (*Dev)); + if (Dev =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + Dev->Signature =3D MPT_SCSI_DEV_SIGNATURE; + + // + // Host adapter channel, doesn't exist + // + Dev->PassThruMode.AdapterId =3D MAX_UINT32; + Dev->PassThruMode.Attributes =3D + EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL | + EFI_EXT_SCSI_PASS_THRU_ATTRIBUTES_LOGICAL; + + Dev->PassThru.Mode =3D &Dev->PassThruMode; + Dev->PassThru.PassThru =3D &MptScsiPassThru; + Dev->PassThru.GetNextTargetLun =3D &MptScsiGetNextTargetLun; + Dev->PassThru.BuildDevicePath =3D &MptScsiBuildDevicePath; + Dev->PassThru.GetTargetLun =3D &MptScsiGetTargetLun; + Dev->PassThru.ResetChannel =3D &MptScsiResetChannel; + Dev->PassThru.ResetTargetLun =3D &MptScsiResetTargetLun; + Dev->PassThru.GetNextTarget =3D &MptScsiGetNextTarget; + + Status =3D gBS->InstallProtocolInterface ( + &ControllerHandle, + &gEfiExtScsiPassThruProtocolGuid, + EFI_NATIVE_INTERFACE, + &Dev->PassThru + ); + if (EFI_ERROR (Status)) { + goto FreePool; + } + + return EFI_SUCCESS; + +FreePool: + FreePool (Dev); + + return Status; } =20 STATIC @@ -103,7 +251,36 @@ MptScsiControllerStop ( IN EFI_HANDLE *ChildHandleBuffer ) { - return EFI_UNSUPPORTED; + EFI_STATUS Status; + EFI_EXT_SCSI_PASS_THRU_PROTOCOL *PassThru; + MPT_SCSI_DEV *Dev; + + Status =3D gBS->OpenProtocol ( + ControllerHandle, + &gEfiExtScsiPassThruProtocolGuid, + (VOID **)&PassThru, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_GET_PROTOCOL // Lookup only + ); + if (EFI_ERROR (Status)) { + return Status; + } + + Dev =3D MPT_SCSI_FROM_PASS_THRU (PassThru); + + Status =3D gBS->UninstallProtocolInterface ( + ControllerHandle, + &gEfiExtScsiPassThruProtocolGuid, + &Dev->PassThru + ); + if (EFI_ERROR (Status)) { + return Status; + } + + FreePool (Dev); + + return Status; } =20 STATIC diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf index 414b96e5a248..5bdbc63f3ac6 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -24,9 +24,12 @@ [Packages] OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] + DebugLib + MemoryAllocationLib UefiBootServicesTableLib UefiDriverEntryPoint UefiLib =20 [Protocols] - gEfiPciIoProtocolGuid ## TO_START + gEfiPciIoProtocolGuid ## TO_START + gEfiExtScsiPassThruProtocolGuid ## BY_START --=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 (#57366): https://edk2.groups.io/g/devel/message/57366 Mute This Topic: https://groups.io/mt/73015383/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- From nobody Mon Apr 29 10:19:57 2024 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+57367+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+57367+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885747; cv=none; d=zohomail.com; s=zohoarc; b=JivmSre99Jp5cnJ1793h2hvHDYMVRqQ1US16K6gjoWbB6iXKdYnAVYk0Bno+I4H8UDh68Yxsyjk8Bn5aUkDNL6y6Sg5NV7NanT67VBaidrq544oMMo7JlybnRcOqKjS3KiFi7HQvHjAqRnHiUeZWv/MU+MXg1kepsIzxHCmtEqA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885747; 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=RNb12pIpIhNlbFrzdGGFzAYOGnKO5JLC286Up4xl5hw=; b=hfLzQtTv2y6FAvSMyhYi6gEEjaYcrzg2Jwu3frbxfzYuQ6Bv1yILAJ+YlVCrAv43zfAaRi6eellSIa7fJ88WpFGnd+68AMXgnq4GCNhYebItid/mV0gAMrub/GwIahkEUfmLE3bedZBBXS7BZOu2+At4GgnoKF4RftZjRkGOmx0= 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+57367+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 1586885747211312.5420903962313; Tue, 14 Apr 2020 10:35:47 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id v8w8YY1788612x7KPrkNQZ6G; Tue, 14 Apr 2020 10:35:46 -0700 X-Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) by mx.groups.io with SMTP id smtpd.web10.724.1586885746427539481 for ; Tue, 14 Apr 2020 10:35:46 -0700 X-Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH9alw154803; Tue, 14 Apr 2020 17:35:43 GMT X-Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2120.oracle.com with ESMTP id 30b6hpp870-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:43 +0000 X-Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7skg012159; Tue, 14 Apr 2020 17:35:43 GMT X-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3030.oracle.com with ESMTP id 30bqcjamus-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:42 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZfEZ026757; Tue, 14 Apr 2020 17:35:41 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:41 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 06/13] OvmfPkg/MptScsiDxe: Report one Target and one LUN Date: Tue, 14 Apr 2020 20:38:06 +0300 Message-Id: <20200414173813.7715-7-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: QyCzN7P94ZGZXOyEBECcfiLex1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885746; bh=53sYnVdgQo/BrlB1fn5cIH9julCqx00q+obzCW8Fo6U=; h=Cc:Date:From:Reply-To:Subject:To; b=mRCib02GNFnwInKF/BvEBOi2Ac+65xn03QJGK95MlDvneIMZUzZEWA1BvuqDuaSLg4T F/OcQECDgrzxt8YPDWU/XGyymY2n9/2nKF1ZMFVZhsuKHaBh96lyDZa331mA66Gr09Qzj WCkwPALShlVw84CWToR1tRUbfS5S7SIs9fc= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Support for multiple targets will be implemented in a later commit in this series. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Laszlo Ersek --- OvmfPkg/MptScsiDxe/MptScsi.c | 40 +++++++++++++++++++++++++++++-- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 1 + 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 40d392c2346f..30fb084379db 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -11,6 +11,7 @@ =20 #include #include +#include #include #include #include @@ -57,6 +58,22 @@ MptScsiPassThru ( return EFI_UNSUPPORTED; } =20 +STATIC +BOOLEAN +IsTargetInitialized ( + IN UINT8 *Target + ) +{ + UINTN Idx; + + for (Idx =3D 0; Idx < TARGET_MAX_BYTES; ++Idx) { + if (Target[Idx] !=3D 0xFF) { + return TRUE; + } + } + return FALSE; +} + STATIC EFI_STATUS EFIAPI @@ -66,7 +83,17 @@ MptScsiGetNextTargetLun ( IN OUT UINT64 *Lun ) { - return EFI_UNSUPPORTED; + // + // Currently support only target 0 LUN 0, so hardcode it + // + if (!IsTargetInitialized (*Target)) { + ZeroMem (*Target, TARGET_MAX_BYTES); + *Lun =3D 0; + } else { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; } =20 STATIC @@ -77,7 +104,16 @@ MptScsiGetNextTarget ( IN OUT UINT8 **Target ) { - return EFI_UNSUPPORTED; + // + // Currently support only target 0 LUN 0, so hardcode it + // + if (!IsTargetInitialized (*Target)) { + ZeroMem (*Target, TARGET_MAX_BYTES); + } else { + return EFI_NOT_FOUND; + } + + return EFI_SUCCESS; } =20 STATIC diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf index 5bdbc63f3ac6..809f12173bb8 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -24,6 +24,7 @@ [Packages] OvmfPkg/OvmfPkg.dec =20 [LibraryClasses] + BaseMemoryLib DebugLib MemoryAllocationLib UefiBootServicesTableLib --=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 (#57367): https://edk2.groups.io/g/devel/message/57367 Mute This Topic: https://groups.io/mt/73015385/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- From nobody Mon Apr 29 10:19:57 2024 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+57374+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+57374+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885870; cv=none; d=zohomail.com; s=zohoarc; b=J86QOERGL37VirdKmBrAoScZIme5p4Qj2H6rrW57ax94JEpXFJmUZBiCmFEkiftHBV90VUD7wAyrPkDNlaSqfVf4xDnMUNt7+kJTcsJmjTqZjMyW6vzkzqHwhxZUsC7tWWBqEk9IsgBJ+L4phHLXSvk4P5Up912P9qCb+3MVv38= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885870; 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=aizuj6DWxaFRPjuhNFOcHoF9PZlAyehNhWr7Dxzx/v0=; b=SVY7QyEgE5acLXH3ajlD4hdRyN9bc7jPYb3xbP2IRW8m+YYHkP6H7f7eEHZ3N0qbZLjwu3AiAR0aMs88ZuEX3DTPUfzSEPYCMTWjP/tJKRQhyK1oqnj6nrsAKsO/pgMHXDBIiQ3NbY1zAwj325Wt3JsswJX+JiyagqRt9nYCNtM= 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+57374+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 1586885870341689.6198219496068; Tue, 14 Apr 2020 10:37:50 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id aqStYY1788612xYzPR3CVKGa; Tue, 14 Apr 2020 10:37:49 -0700 X-Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) by mx.groups.io with SMTP id smtpd.web12.699.1586885868643837306 for ; Tue, 14 Apr 2020 10:37:48 -0700 X-Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH9ate154780; Tue, 14 Apr 2020 17:37:45 GMT X-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2120.oracle.com with ESMTP id 30b6hpp8kd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:37:45 +0000 X-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7PY2130522; Tue, 14 Apr 2020 17:35:45 GMT X-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 30bqm2e1wd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:45 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZhQ3026770; Tue, 14 Apr 2020 17:35:43 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:43 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 07/13] OvmfPkg/MptScsiDxe: Build and decode DevicePath Date: Tue, 14 Apr 2020 20:38:07 +0300 Message-Id: <20200414173813.7715-8-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: v44i27ws6gbvYzSdoJ2SjwlGx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885869; bh=snoj9DAzndpUvQXxBtuK1i7pDXC9oeTH0AFA2Xdkwdo=; h=Cc:Date:From:Reply-To:Subject:To; b=idCujo9PcXu4ptTOJV3BOwDjsNdq+cHeJUcBp96C3SjH9+63mPrEAsShxF8NxtawDit 6lTM9HIaYtqhNknwtVOs6zZR9suNXBf117XuHowhvi7/l0zN1ttQYnBxiOqQBEVUpAOBn w9wwH5gEITAtarWlMJx8iBliVASE2MuESx8= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Used to identify the individual disks in the hardware tree. Currently we accept only Pun=3D0 and Lun=3D0, but we will relax this in a later patch. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Liran Alon Reviewed-by: Laszlo Ersek --- OvmfPkg/MptScsiDxe/MptScsi.c | 57 ++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 30fb084379db..69ab947c0da2 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -126,7 +126,34 @@ MptScsiBuildDevicePath ( IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { - return EFI_UNSUPPORTED; + SCSI_DEVICE_PATH *ScsiDevicePath; + + if (DevicePath =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + // + // This device support 256 targets only, so it's enough to dereference + // the LSB of Target. + // + if (*Target > 0 || Lun > 0) { + return EFI_NOT_FOUND; + } + + ScsiDevicePath =3D AllocateZeroPool (sizeof (*ScsiDevicePath)); + if (ScsiDevicePath =3D=3D NULL) { + return EFI_OUT_OF_RESOURCES; + } + + ScsiDevicePath->Header.Type =3D MESSAGING_DEVICE_PATH; + ScsiDevicePath->Header.SubType =3D MSG_SCSI_DP; + ScsiDevicePath->Header.Length[0] =3D (UINT8)sizeof (*ScsiDevicePath); + ScsiDevicePath->Header.Length[1] =3D (UINT8)(sizeof (*ScsiDevicePath) >>= 8); + ScsiDevicePath->Pun =3D *Target; + ScsiDevicePath->Lun =3D (UINT16)Lun; + + *DevicePath =3D &ScsiDevicePath->Header; + return EFI_SUCCESS; } =20 STATIC @@ -139,7 +166,33 @@ MptScsiGetTargetLun ( OUT UINT64 *Lun ) { - return EFI_UNSUPPORTED; + SCSI_DEVICE_PATH *ScsiDevicePath; + + if (DevicePath =3D=3D NULL || + Target =3D=3D NULL || *Target =3D=3D NULL || Lun =3D=3D NULL) { + return EFI_INVALID_PARAMETER; + } + + if (DevicePath->Type !=3D MESSAGING_DEVICE_PATH || + DevicePath->SubType !=3D MSG_SCSI_DP) { + return EFI_UNSUPPORTED; + } + + ScsiDevicePath =3D (SCSI_DEVICE_PATH *)DevicePath; + if (ScsiDevicePath->Pun > 0 || + ScsiDevicePath->Lun > 0) { + return EFI_NOT_FOUND; + } + + ZeroMem (*Target, TARGET_MAX_BYTES); + // + // This device support 256 targets only, so it's enough to set the LSB + // of Target. + // + **Target =3D (UINT8)ScsiDevicePath->Pun; + *Lun =3D ScsiDevicePath->Lun; + + return EFI_SUCCESS; } =20 STATIC --=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 (#57374): https://edk2.groups.io/g/devel/message/57374 Mute This Topic: https://groups.io/mt/73015430/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- From nobody Mon Apr 29 10:19:57 2024 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+57375+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+57375+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885871; cv=none; d=zohomail.com; s=zohoarc; b=X5j4CRPPKARp4eQiPKd0BbJSowUsh1BBnJeMGf6LotI/pRxYbLsTUtwOtyEe+cjEji9IoKbGTeQxmscZQBwNXp3T0RGynxvMfOiUk6GV6ueZod2E9yjbuUgUFLiCuPF6LAmnMFWQaRYiABOlQ5/9ZsScgH7nIKiDYtaX80fG6vU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885871; 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=IzdardU2o4pUQGoApMQvB9GnTVLdHIJYIyQdLKy8d6w=; b=YEgb3MjSsfC9VB7hyAaqBzjjaErarEEldni0B+1w8nCjqLTONbmWCf7dHUs+IwXWxIdxiNqBDZu2rjpUKN12v4ms8UZ4j3S4zmjIcon3JZx6p0ZeOudt/witm8GJVorAV3RmdlzokpcW8aVJ5KDbX+XS7UV1qqJgYYghvM+63/g= 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+57375+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 1586885871619262.9729646303799; Tue, 14 Apr 2020 10:37:51 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id JQEoYY1788612xKQ4S7ebjnz; Tue, 14 Apr 2020 10:37:51 -0700 X-Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) by mx.groups.io with SMTP id smtpd.web12.702.1586885870819599280 for ; Tue, 14 Apr 2020 10:37:50 -0700 X-Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH9ZtT154728; Tue, 14 Apr 2020 17:37:47 GMT X-Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by userp2120.oracle.com with ESMTP id 30b6hpp8kg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:37:47 +0000 X-Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH86p7106201; Tue, 14 Apr 2020 17:35:47 GMT X-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserp3020.oracle.com with ESMTP id 30bqph9g44-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:46 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZk8G026784; Tue, 14 Apr 2020 17:35:46 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:45 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 08/13] OvmfPkg/MptScsiDxe: Open PciIo protocol for later use Date: Tue, 14 Apr 2020 20:38:08 +0300 Message-Id: <20200414173813.7715-9-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: fnN6qVX4czeqpt4tIONnIDo1x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885871; bh=mcPK8MgV+b8JTZR7ysoo/XL368kNxcbgpc0Ya4A7CvY=; h=Cc:Date:From:Reply-To:Subject:To; b=T+J58u8ZpE1SV6GQxa9QWUv1sKQ4xzzz+LcwCVwDVPEuc+j+r/F2hCTXtiVJqQ8xNzR VM1r4v0y+7Q8dzLiopZM/jl6QJLMFVEGWg6EGdnpnobJlhmug8IR2N+xNlG78z0IiHqwR okYgumB5PKcugfldKF2zJiqg63t3PyVUPoQ= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" This will give us an exclusive access to the PciIo of this device after it was started and until is will be stopped. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Liran Alon Reviewed-by: Laszlo Ersek --- OvmfPkg/MptScsiDxe/MptScsi.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 69ab947c0da2..275265774252 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -35,6 +35,7 @@ typedef struct { UINT32 Signature; EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; + EFI_PCI_IO_PROTOCOL *PciIo; } MPT_SCSI_DEV; =20 #define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ @@ -295,6 +296,18 @@ MptScsiControllerStart ( =20 Dev->Signature =3D MPT_SCSI_DEV_SIGNATURE; =20 + Status =3D gBS->OpenProtocol ( + ControllerHandle, + &gEfiPciIoProtocolGuid, + (VOID **)&Dev->PciIo, + This->DriverBindingHandle, + ControllerHandle, + EFI_OPEN_PROTOCOL_BY_DRIVER + ); + if (EFI_ERROR (Status)) { + goto FreePool; + } + // // Host adapter channel, doesn't exist // @@ -319,11 +332,19 @@ MptScsiControllerStart ( &Dev->PassThru ); if (EFI_ERROR (Status)) { - goto FreePool; + goto CloseProtocol; } =20 return EFI_SUCCESS; =20 +CloseProtocol: + gBS->CloseProtocol ( + ControllerHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); + FreePool: FreePool (Dev); =20 @@ -367,6 +388,13 @@ MptScsiControllerStop ( return Status; } =20 + gBS->CloseProtocol ( + ControllerHandle, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + ControllerHandle + ); + FreePool (Dev); =20 return Status; --=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 (#57375): https://edk2.groups.io/g/devel/message/57375 Mute This Topic: https://groups.io/mt/73015432/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- From nobody Mon Apr 29 10:19:57 2024 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+57368+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+57368+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885755; cv=none; d=zohomail.com; s=zohoarc; b=Pas7SECElP12Q/V8yG6mjng5MaJFDz5F/vPGTn6SoR9ubkTUbWi4q69CHQbcWa/nKW8WBMxDouo2gy4NFKjwr22qJQTiCN/Zn+8xsFVp/B5z0MBN3ldwW1hpNDgsTxCPJk+QeWyK72pF5Q46plxmxLvEe6Z4CSkJ9SCojPlz3kk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885755; 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=H8Xjj7bW0Q+ghsnlmn07/9UHjYZmzQGWXoCINO7Q+f0=; b=LurKgdcn/UGJKoUHNC8flwNOYzw+o0SQNsonj85pgYX+xldbxECwuzLjHaoydKoT2sMhkC3XQ4zk0gh5GR8oF5Fv+kDP1w7euowssYyzlLozPXutCZpEDdWLwC8fTnxnOZz4sjO8UBQstDORow6RjVwjHAcFSCZsQcjqWhO9jr0= 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+57368+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 1586885755354427.6555323988671; Tue, 14 Apr 2020 10:35:55 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id OhSLYY1788612xljxt0PNsVs; Tue, 14 Apr 2020 10:35:54 -0700 X-Received: from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78]) by mx.groups.io with SMTP id smtpd.web12.666.1586885754464981613 for ; Tue, 14 Apr 2020 10:35:54 -0700 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 03EHAAK3173230; Tue, 14 Apr 2020 17:35:50 GMT X-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by aserp2120.oracle.com with ESMTP id 30b5um69ty-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:50 +0000 X-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7U6Y130822; Tue, 14 Apr 2020 17:35:50 GMT X-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 30bqm2e271-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:49 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZmFe026801; Tue, 14 Apr 2020 17:35:48 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:48 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 09/13] OvmfPkg/MptScsiDxe: Set and restore PCI attributes Date: Tue, 14 Apr 2020 20:38:09 +0300 Message-Id: <20200414173813.7715-10-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: ptT1iLb09B2nYulZu5pzMjIMx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885754; bh=IEwFprONvfJGMT184rS8QT2/RU81AbsfooZBMZnbQs4=; h=Cc:Date:From:Reply-To:Subject:To; b=mFWK1z/TVwM2kWReEwZtsdkLujJi1UdAEVu/FZCQqkPaXDGgqcfVBoQmQVCrB1KSuT8 6U7jMiXR+NqNz5LMr8njsEnqXQ50LKpmmFsQHkixR97FKjyMcd59Sc5SDvapq0JBezBRg KOsfufm5Rmi3+xZJik5LN1S8Uf1fGoEfhto= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Enable the IO Space and Bus Mastering and restore the original values when the device is stopped. This is a standard procedure in PCI drivers. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Liran Alon Reviewed-by: Laszlo Ersek --- OvmfPkg/MptScsiDxe/MptScsi.c | 42 +++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 275265774252..4bfd03d2acb0 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -36,6 +36,7 @@ typedef struct { EFI_EXT_SCSI_PASS_THRU_PROTOCOL PassThru; EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; EFI_PCI_IO_PROTOCOL *PciIo; + UINT64 OriginalPciAttributes; } MPT_SCSI_DEV; =20 #define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ @@ -308,6 +309,30 @@ MptScsiControllerStart ( goto FreePool; } =20 + Status =3D Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationGet, + 0, + &Dev->OriginalPciAttributes + ); + if (EFI_ERROR (Status)) { + goto CloseProtocol; + } + + // + // Enable I/O Space & Bus-Mastering + // + Status =3D Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationEnable, + (EFI_PCI_IO_ATTRIBUTE_IO | + EFI_PCI_IO_ATTRIBUTE_BUS_MASTER), + NULL + ); + if (EFI_ERROR (Status)) { + goto CloseProtocol; + } + // // Host adapter channel, doesn't exist // @@ -332,11 +357,19 @@ MptScsiControllerStart ( &Dev->PassThru ); if (EFI_ERROR (Status)) { - goto CloseProtocol; + goto RestoreAttributes; } =20 return EFI_SUCCESS; =20 +RestoreAttributes: + Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationEnable, + Dev->OriginalPciAttributes, + NULL + ); + CloseProtocol: gBS->CloseProtocol ( ControllerHandle, @@ -388,6 +421,13 @@ MptScsiControllerStop ( return Status; } =20 + Dev->PciIo->Attributes ( + Dev->PciIo, + EfiPciIoAttributeOperationEnable, + Dev->OriginalPciAttributes, + NULL + ); + gBS->CloseProtocol ( ControllerHandle, &gEfiPciIoProtocolGuid, --=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 (#57368): https://edk2.groups.io/g/devel/message/57368 Mute This Topic: https://groups.io/mt/73015388/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- From nobody Mon Apr 29 10:19:57 2024 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+57369+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+57369+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885756; cv=none; d=zohomail.com; s=zohoarc; b=Jt5HRWn0Aw3F35WheMmRVsAO2VlccSXVAiqrYy6jVCvavN6ZjaZVDTIfaZNGYHErUzk8RoZukAIo+xPH1yxYkLufuV+Iv0pXL9nY7hnYFPUNSZ2Vu2ndRdhrKjd3w55YjhLsYUaT0zXD/Mo1Q3ulMF6i0SGBNVGEZuBG1tyN7N0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885756; 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=HNUy91aFgv1+dAh5SxKvdgBBYtcPlq2JpE+0Dav7xnU=; b=IGGMH+12hz9kud+/uEtRTCj0xuNhzPnloj/tf4N8Azus3led3AJva2c4rwO2SUHpLKgb6CcYoz7bwgd28gR+jw9xSQe49FwYsttoczSlckU5iEurR+C1f6yM39thslY6BPw2aPvmLJUGn+cJ7Fc8224/VH8LCiSJZH9h/WWtBow= 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+57369+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 1586885756349952.4717072542371; Tue, 14 Apr 2020 10:35:56 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 5jtAYY1788612xeX4UKbMP5N; Tue, 14 Apr 2020 10:35:56 -0700 X-Received: from userp2120.oracle.com (userp2120.oracle.com [156.151.31.85]) by mx.groups.io with SMTP id smtpd.web11.684.1586885755593029050 for ; Tue, 14 Apr 2020 10:35:55 -0700 X-Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH9alx154803; Tue, 14 Apr 2020 17:35:52 GMT X-Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2120.oracle.com with ESMTP id 30b6hpp87y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:52 +0000 X-Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7sCG012066; Tue, 14 Apr 2020 17:35:52 GMT X-Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by userp3030.oracle.com with ESMTP id 30bqcjanef-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:52 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 03EHZoWw022227; Tue, 14 Apr 2020 17:35:50 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:50 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 10/13] OvmfPkg/MptScsiDxe: Initialize hardware Date: Tue, 14 Apr 2020 20:38:10 +0300 Message-Id: <20200414173813.7715-11-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: sPmGCKOga28VukrXPEOym5fxx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885756; bh=6v49JczT8WKJVeMthtl2m9uweI4v3NmlGdA0vwv5ndc=; h=Cc:Date:From:Reply-To:Subject:To; b=mo8Z4cxliNNquUCh9ExSOMmcLEJ0pIy6xDVOD1hsPupqmYe1Jqlm4fPSAI3bkkzqa6p rH1NCZsiL0bT5PvYcyTxmd10V9/ikDNeJUcpUveDEN9gqeJ3UbEN/9PM9FCxD+DADj1SR 0GyMFHTXWxme4KNd4K1EEc9CnOEbNKWC3Rw= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Reset and send the IO controller initialization request. The reply is read back to complete the doorbell function but it isn't useful to us because it doesn't contain relevant data or status codes. See "LSI53C1030 PCI-X to Dual Channel Ultra320 SCSI Multifunction Controller" technical manual for more information. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko --- .../Include/IndustryStandard/FusionMptScsi.h | 123 +++++++++++++ OvmfPkg/MptScsiDxe/MptScsi.c | 173 +++++++++++++++++- 2 files changed, 295 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h b/OvmfPkg/Inc= lude/IndustryStandard/FusionMptScsi.h index df9bdc2f0348..d00a9e6db0bf 100644 --- a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h +++ b/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h @@ -20,4 +20,127 @@ #define LSI_SAS1068_PCI_DEVICE_ID 0x0054 #define LSI_SAS1068E_PCI_DEVICE_ID 0x0058 =20 +#define MPT_REG_DOORBELL 0x00 +#define MPT_REG_WRITE_SEQ 0x04 +#define MPT_REG_HOST_DIAG 0x08 +#define MPT_REG_TEST 0x0c +#define MPT_REG_DIAG_DATA 0x10 +#define MPT_REG_DIAG_ADDR 0x14 +#define MPT_REG_ISTATUS 0x30 +#define MPT_REG_IMASK 0x34 +#define MPT_REG_REQ_Q 0x40 +#define MPT_REG_REP_Q 0x44 + +#define MPT_DOORBELL_RESET 0x40 +#define MPT_DOORBELL_HANDSHAKE 0x42 + +#define MPT_IMASK_DOORBELL 0x01 +#define MPT_IMASK_REPLY 0x08 + +#define MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUEST 0x00 +#define MPT_MESSAGE_HDR_FUNCTION_IOC_INIT 0x02 + +#define MPT_SG_ENTRY_TYPE_SIMPLE 0x01 + +#define MPT_IOC_WHOINIT_ROM_BIOS 0x02 + +// +// Device structures +// + +typedef union { +#pragma pack (1) + struct { + UINT8 WhoInit; + UINT8 Reserved1; + UINT8 ChainOffset; + UINT8 Function; + UINT8 Flags; + UINT8 MaxDevices; + UINT8 MaxBuses; + UINT8 MessageFlags; + UINT32 MessageContext; + UINT16 ReplyFrameSize; + UINT16 Reserved2; + UINT32 HostMfaHighAddr; + UINT32 SenseBufferHighAddr; + } Data; +#pragma pack () + UINT64 Uint64; // 8 byte alignment required by HW +} MPT_IO_CONTROLLER_INIT_REQUEST; + +#pragma pack (1) +typedef struct { + UINT8 WhoInit; + UINT8 Reserved1; + UINT8 MessageLength; + UINT8 Function; + UINT8 Flags; + UINT8 MaxDevices; + UINT8 MaxBuses; + UINT8 MessageFlags; + UINT32 MessageContext; + UINT16 Reserved2; + UINT16 IOCStatus; + UINT32 IOCLogInfo; +} MPT_IO_CONTROLLER_INIT_REPLY; + +typedef struct { + UINT8 TargetID; + UINT8 Bus; + UINT8 ChainOffset; + UINT8 Function; + UINT8 CDBLength; + UINT8 SenseBufferLength; + UINT8 Reserved; + UINT8 MessageFlags; + UINT32 MessageContext; + UINT8 LUN[8]; + UINT32 Control; + UINT8 CDB[16]; + UINT32 DataLength; + UINT32 SenseBufferLowAddress; +} MPT_SCSI_IO_REQUEST; + +typedef struct { + UINT32 Length: 24; + UINT32 EndOfList: 1; + UINT32 Is64BitAddress: 1; + // + // True when the buffer contains data to be transfered. Otherwise it's t= he + // destination buffer + // + UINT32 BufferContainsData: 1; + UINT32 LocalAddress: 1; + UINT32 ElementType: 2; + UINT32 EndOfBuffer: 1; + UINT32 LastElement: 1; + UINT64 DataBufferAddress; +} MPT_SG_ENTRY_SIMPLE; +#pragma pack () + +typedef union { +#pragma pack (1) + struct { + UINT8 TargetID; + UINT8 Bus; + UINT8 MessageLength; + UINT8 Function; + UINT8 CDBLength; + UINT8 SenseBufferLength; + UINT8 Reserved; + UINT8 MessageFlags; + UINT32 MessageContext; + UINT8 SCSIStatus; + UINT8 SCSIState; + UINT16 IOCStatus; + UINT32 IOCLogInfo; + UINT32 TransferCount; + UINT32 SenseCount; + UINT32 ResponseInfo; + } Data; +#pragma pack () + UINT64 Uint64; // 8 byte alignment required by HW +} MPT_SCSI_IO_ERROR_REPLY; + #endif // __FUSION_MPT_SCSI_H__ diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 4bfd03d2acb0..9c3bdc430e1a 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -42,6 +42,167 @@ typedef struct { #define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ CR (PassThruPtr, MPT_SCSI_DEV, PassThru, MPT_SCSI_DEV_SIGNATURE) =20 +// +// Hardware functions +// + +STATIC +EFI_STATUS +Out32 ( + IN MPT_SCSI_DEV *Dev, + IN UINT32 Addr, + IN UINT32 Data + ) +{ + return Dev->PciIo->Io.Write ( + Dev->PciIo, + EfiPciIoWidthUint32, + PCI_BAR_IDX0, + Addr, + 1, + &Data + ); +} + +STATIC +EFI_STATUS +In32 ( + IN MPT_SCSI_DEV *Dev, + IN UINT32 Addr, + OUT UINT32 *Data + ) +{ + return Dev->PciIo->Io.Read ( + Dev->PciIo, + EfiPciIoWidthUint32, + PCI_BAR_IDX0, + Addr, + 1, + Data + ); +} + +STATIC +EFI_STATUS +MptDoorbell ( + IN MPT_SCSI_DEV *Dev, + IN UINT8 DoorbellFunc, + IN UINT8 DoorbellArg + ) +{ + return Out32 ( + Dev, + MPT_REG_DOORBELL, + (((UINT32)DoorbellFunc) << 24) | (DoorbellArg << 16) + ); +} + +STATIC +EFI_STATUS +MptScsiReset ( + IN MPT_SCSI_DEV *Dev + ) +{ + EFI_STATUS Status; + + // + // Reset hardware + // + Status =3D MptDoorbell (Dev, MPT_DOORBELL_RESET, 0); + if (EFI_ERROR (Status)) { + return Status; + } + // + // Mask interrupts + // + Status =3D Out32 (Dev, MPT_REG_IMASK, MPT_IMASK_DOORBELL | MPT_IMASK_REP= LY); + if (EFI_ERROR (Status)) { + return Status; + } + // + // Clear interrupt status + // + Status =3D Out32 (Dev, MPT_REG_ISTATUS, 0); + if (EFI_ERROR (Status)) { + return Status; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +MptScsiInit ( + IN MPT_SCSI_DEV *Dev + ) +{ + EFI_STATUS Status; + MPT_IO_CONTROLLER_INIT_REQUEST Req; + MPT_IO_CONTROLLER_INIT_REPLY Reply; + UINT8 *ReplyBytes; + UINT32 ReplyWord; + + Status =3D MptScsiReset (Dev); + if (EFI_ERROR (Status)) { + return Status; + } + + ZeroMem (&Req, sizeof (Req)); + 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.MaxBuses =3D 1; + Req.Data.ReplyFrameSize =3D sizeof (MPT_SCSI_IO_ERROR_REPLY); + + // + // Send controller init through doorbell + // + Status =3D MptDoorbell ( + Dev, + MPT_DOORBELL_HANDSHAKE, + sizeof (Req) / sizeof (UINT32) + ); + if (EFI_ERROR (Status)) { + return Status; + } + Status =3D Dev->PciIo->Io.Write ( + Dev->PciIo, + EfiPciIoWidthFifoUint32, + 0, + MPT_REG_DOORBELL, + sizeof (Req) / sizeof (UINT32), + &Req + ); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Read reply through doorbell + // Each 32bit (Dword) read produces 16bit (Word) of data + // + ReplyBytes =3D (UINT8 *)&Reply; + while (ReplyBytes !=3D (UINT8 *)(&Reply + 1)) { + Status =3D In32 (Dev, MPT_REG_DOORBELL, &ReplyWord); + if (EFI_ERROR (Status)) { + return Status; + } + CopyMem (ReplyBytes, &ReplyWord, sizeof (UINT16)); + ReplyBytes +=3D sizeof (UINT16); + } + + // + // Clear interrupts generated by doorbell reply + // + Status =3D Out32 (Dev, MPT_REG_ISTATUS, 0); + if (EFI_ERROR (Status)) { + return Status; + } + + return EFI_SUCCESS; +} + // // Ext SCSI Pass Thru // @@ -333,6 +494,11 @@ MptScsiControllerStart ( goto CloseProtocol; } =20 + Status =3D MptScsiInit (Dev); + if (EFI_ERROR (Status)) { + goto RestorePciAttributes; + } + // // Host adapter channel, doesn't exist // @@ -357,11 +523,14 @@ MptScsiControllerStart ( &Dev->PassThru ); if (EFI_ERROR (Status)) { - goto RestoreAttributes; + goto UninitDev; } =20 return EFI_SUCCESS; =20 +UninitDev: + MptScsiReset (Dev); + RestoreAttributes: Dev->PciIo->Attributes ( Dev->PciIo, @@ -421,6 +590,8 @@ MptScsiControllerStop ( return Status; } =20 + MptScsiReset (Dev); + Dev->PciIo->Attributes ( Dev->PciIo, EfiPciIoAttributeOperationEnable, --=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 (#57369): https://edk2.groups.io/g/devel/message/57369 Mute This Topic: https://groups.io/mt/73015389/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- From nobody Mon Apr 29 10:19:57 2024 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+57370+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+57370+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885760; cv=none; d=zohomail.com; s=zohoarc; b=Y184TcqfkGU24gJuvgIlV5q/JT2iCwNtDS7v0ji9lllCBvhtJ6HoGD2oiw56Xh5jzD26wjMbb0N/mcbhcJ7DLeZntEwcPjUQw43m/8ASWFzPOhm5aObZCaeiWj2FHTPqTX/+6QCcZvxKvle1m9DqgpDFBxKXzyFjCYWJvZtQIXY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885760; 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=oPw0jpKOJZ5PwODyiIMUoilQIdyMQHKj3ZvAv9jzAvg=; b=heTcj09TIZnVDWV8j5/CLR73sWM5Iz3ZiaNuZmACnxxVwCWsRGo9gHKm5zZdYqi9tDfS47iQR3/zTufSHB/CrZ1kdT8Hc3g83JnGYM1jx+JjFhRGaLlNqeW7W8qgROabh1CxB9Zn+maoM18CdMkBPjgwbbIPomKIHgP7RLqq54Y= 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+57370+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 1586885760097353.6095249324046; Tue, 14 Apr 2020 10:36:00 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 6TTqYY1788612xBAgq1cyDkh; Tue, 14 Apr 2020 10:35:59 -0700 X-Received: from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78]) by mx.groups.io with SMTP id smtpd.web11.686.1586885759051407991 for ; Tue, 14 Apr 2020 10:35:59 -0700 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 03EHAFiU173396; Tue, 14 Apr 2020 17:35:55 GMT X-Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2120.oracle.com with ESMTP id 30b5um69up-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:55 +0000 X-Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH86JU106258; Tue, 14 Apr 2020 17:35:55 GMT X-Received: from userv0121.oracle.com (userv0121.oracle.com [156.151.31.72]) by aserp3020.oracle.com with ESMTP id 30bqph9gq8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:55 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by userv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 03EHZrxO030836; Tue, 14 Apr 2020 17:35:53 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:52 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 11/13] OvmfPkg/MptScsiDxe: Implement the PassThru method Date: Tue, 14 Apr 2020 20:38:11 +0300 Message-Id: <20200414173813.7715-12-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: MpRTpJnTQL7LGO0RUjKWCPaTx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885759; bh=GOOmDpFwF9m4+U6hnp8BsZ3emyvrrpNImTWsXZKMe64=; h=Cc:Date:From:Reply-To:Subject:To; b=XZ/2n9HJHs2E07QWYhdHzll7qfTDEhNm1GE71eVn+b6jB8GK5Bdri3O4xe+gICpUNYe usO435NZc8u0mKyMDcT3yqhb178ZgTfVvGSk01syH9yPmgXm8jhnpPBGVZ3ZDFjAYl1HQ aH7+W6y9y2ylEDqkgMMIQqkEAbIfAWKW/xU= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Machines should be able to boot after this commit. Tested with different Linux distributions (Ubuntu, CentOS) and different Windows versions (Windows 7, Windows 10, Server 2016). Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko --- .../Include/IndustryStandard/FusionMptScsi.h | 19 +- OvmfPkg/MptScsiDxe/MptScsi.c | 369 +++++++++++++++++- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 3 + OvmfPkg/OvmfPkg.dec | 3 + 4 files changed, 390 insertions(+), 4 deletions(-) diff --git a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h b/OvmfPkg/Inc= lude/IndustryStandard/FusionMptScsi.h index d00a9e6db0bf..4be36adedd8f 100644 --- a/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h +++ b/OvmfPkg/Include/IndustryStandard/FusionMptScsi.h @@ -44,6 +44,15 @@ =20 #define MPT_IOC_WHOINIT_ROM_BIOS 0x02 =20 +#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_NONE (0x00 << 24) +#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRITE (0x01 << 24) +#define MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ (0x02 << 24) + +#define MPT_SCSI_IOCSTATUS_SUCCESS 0x0000 +#define MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE 0x0043 +#define MPT_SCSI_IOCSTATUS_DATA_OVERRUN 0x0044 +#define MPT_SCSI_IOCSTATUS_DATA_UNDERRUN 0x0045 + // // Device structures // @@ -141,6 +150,14 @@ typedef union { } Data; #pragma pack () UINT64 Uint64; // 8 byte alignment required by HW -} MPT_SCSI_IO_ERROR_REPLY; +} MPT_SCSI_IO_REPLY; + +typedef union { + struct { + MPT_SCSI_IO_REQUEST Header; + MPT_SG_ENTRY_SIMPLE Sg; + } Data; + UINT64 Uint64; // 8 byte alignment required by HW +} MPT_SCSI_REQUEST_WITH_SG; =20 #endif // __FUSION_MPT_SCSI_H__ diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 9c3bdc430e1a..fcdaa4c338a4 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include =20 @@ -30,6 +31,13 @@ // Runtime Structures // =20 +typedef struct { + MPT_SCSI_REQUEST_WITH_SG IoRequest; + MPT_SCSI_IO_REPLY IoReply; + UINT8 Sense[MAX_UINT8]; + UINT8 Data[0x2000]; +} MPT_SCSI_DMA_BUFFER; + #define MPT_SCSI_DEV_SIGNATURE SIGNATURE_32 ('M','P','T','S') typedef struct { UINT32 Signature; @@ -37,11 +45,19 @@ typedef struct { EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; EFI_PCI_IO_PROTOCOL *PciIo; UINT64 OriginalPciAttributes; + UINT32 StallPerPollUsec; + MPT_SCSI_DMA_BUFFER *Dma; + EFI_PHYSICAL_ADDRESS DmaPhysical; + VOID *DmaMapping; + BOOLEAN IoReplyEnqueued; } MPT_SCSI_DEV; =20 #define MPT_SCSI_FROM_PASS_THRU(PassThruPtr) \ CR (PassThruPtr, MPT_SCSI_DEV, PassThru, MPT_SCSI_DEV_SIGNATURE) =20 +#define MPT_SCSI_DMA_ADDR(Dev, MemberName) \ + (Dev->DmaPhysical + OFFSET_OF(MPT_SCSI_DMA_BUFFER, MemberName)) + // // Hardware functions // @@ -142,6 +158,8 @@ MptScsiInit ( UINT8 *ReplyBytes; UINT32 ReplyWord; =20 + Dev->StallPerPollUsec =3D PcdGet32 (PcdMptScsiStallPerPollUsec); + Status =3D MptScsiReset (Dev); if (EFI_ERROR (Status)) { return Status; @@ -153,7 +171,7 @@ MptScsiInit ( Req.Data.Function =3D MPT_MESSAGE_HDR_FUNCTION_IOC_INIT; Req.Data.MaxDevices =3D 1; Req.Data.MaxBuses =3D 1; - Req.Data.ReplyFrameSize =3D sizeof (MPT_SCSI_IO_ERROR_REPLY); + Req.Data.ReplyFrameSize =3D sizeof (MPT_SCSI_IO_REPLY); =20 // // Send controller init through doorbell @@ -203,6 +221,257 @@ MptScsiInit ( return EFI_SUCCESS; } =20 +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 + ) +{ + MPT_SCSI_REQUEST_WITH_SG *Request; + + Request =3D &Dev->Dma->IoRequest; + + if (Packet->DataDirection =3D=3D EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTION= AL || + (Packet->InTransferLength > 0 && Packet->OutTransferLength > 0) || + Packet->CdbLength > sizeof (Request->Data.Header.CDB)) { + return EFI_UNSUPPORTED; + } + + if (Target > 0 || Lun > 0 || + Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || + // + // Trying to receive, but destination pointer is NULL, or contradict= ing + // transfer direction + // + (Packet->InTransferLength > 0 && + (Packet->InDataBuffer =3D=3D NULL || + Packet->DataDirection =3D=3D EFI_EXT_SCSI_DATA_DIRECTION_WRITE + ) + ) || + + // + // Trying to send, but source pointer is NULL, or contradicting tran= sfer + // direction + // + (Packet->OutTransferLength > 0 && + (Packet->OutDataBuffer =3D=3D NULL || + Packet->DataDirection =3D=3D EFI_EXT_SCSI_DATA_DIRECTION_READ + ) + ) + ) { + return EFI_INVALID_PARAMETER; + } + + if (Packet->InTransferLength > sizeof (Dev->Dma->Data)) { + Packet->InTransferLength =3D sizeof (Dev->Dma->Data); + return EFI_BAD_BUFFER_SIZE; + } + if (Packet->OutTransferLength > sizeof (Dev->Dma->Data)) { + Packet->OutTransferLength =3D sizeof (Dev->Dma->Data); + return EFI_BAD_BUFFER_SIZE; + } + + ZeroMem (Request, sizeof (*Request)); + Request->Data.Header.TargetID =3D Target; + // + // It's 1 and not 0, for some reason... + // + Request->Data.Header.LUN[1] =3D Lun; + Request->Data.Header.Function =3D MPT_MESSAGE_HDR_FUNCTION_SCSI_IO_REQUE= ST; + Request->Data.Header.MessageContext =3D 1; // We handle one request at a= time + + Request->Data.Header.CDBLength =3D Packet->CdbLength; + CopyMem (Request->Data.Header.CDB, Packet->Cdb, Packet->CdbLength); + + // + // SenseDataLength is UINT8, Sense[] is MAX_UINT8, so we can't overflow + // + ZeroMem (&Dev->Dma->Sense, Packet->SenseDataLength); + Request->Data.Header.SenseBufferLength =3D Packet->SenseDataLength; + Request->Data.Header.SenseBufferLowAddress =3D MPT_SCSI_DMA_ADDR (Dev, S= ense); + + Request->Data.Sg.EndOfList =3D 1; + Request->Data.Sg.EndOfBuffer =3D 1; + Request->Data.Sg.LastElement =3D 1; + Request->Data.Sg.ElementType =3D MPT_SG_ENTRY_TYPE_SIMPLE; + Request->Data.Sg.DataBufferAddress =3D MPT_SCSI_DMA_ADDR (Dev, Data); + + Request->Data.Header.Control =3D MPT_SCSIIO_REQUEST_CONTROL_TXDIR_NONE; + switch (Packet->DataDirection) + { + case EFI_EXT_SCSI_DATA_DIRECTION_READ: + if (Packet->InTransferLength =3D=3D 0) { + break; + } + Request->Data.Header.DataLength =3D Packet->InTransferLength; + Request->Data.Sg.Length =3D Packet->InTransferLength; + Request->Data.Header.Control =3D MPT_SCSIIO_REQUEST_CONTROL_TXDIR_READ; + break; + case EFI_EXT_SCSI_DATA_DIRECTION_WRITE: + if (Packet->OutTransferLength =3D=3D 0) { + break; + } + Request->Data.Header.DataLength =3D Packet->OutTransferLength; + Request->Data.Sg.Length =3D Packet->OutTransferLength; + Request->Data.Header.Control =3D MPT_SCSIIO_REQUEST_CONTROL_TXDIR_WRIT= E; + + CopyMem (Dev->Dma->Data, Packet->OutDataBuffer, Packet->OutTransferLen= gth); + Request->Data.Sg.BufferContainsData =3D 1; + break; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +MptScsiSendRequest ( + IN MPT_SCSI_DEV *Dev, + IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + ) +{ + EFI_STATUS Status; + + if (!Dev->IoReplyEnqueued) { + // + // Put one free reply frame on the reply queue, the hardware may use i= t to + // report an error to us. + // + Status =3D Out32 (Dev, MPT_REG_REP_Q, MPT_SCSI_DMA_ADDR (Dev, IoReply)= ); + if (EFI_ERROR (Status)) { + return EFI_DEVICE_ERROR; + } + Dev->IoReplyEnqueued =3D TRUE; + } + + Status =3D Out32 (Dev, MPT_REG_REQ_Q, MPT_SCSI_DMA_ADDR (Dev, IoRequest)= ); + if (EFI_ERROR (Status)) { + return EFI_DEVICE_ERROR; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +MptScsiGetReply ( + IN MPT_SCSI_DEV *Dev, + OUT UINT32 *Reply + ) +{ + EFI_STATUS Status; + UINT32 Istatus; + UINT32 EmptyReply; + + // + // Timeouts are not supported for + // EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() in this implementation. + // + for (;;) { + Status =3D In32 (Dev, MPT_REG_ISTATUS, &Istatus); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // Interrupt raised + // + if (Istatus & MPT_IMASK_REPLY) { + break; + } + + gBS->Stall (Dev->StallPerPollUsec); + } + + Status =3D In32 (Dev, MPT_REG_REP_Q, Reply); + if (EFI_ERROR (Status)) { + return Status; + } + + // + // The driver is supposed to fetch replies until 0xffffffff is returned,= which + // will reset the interrupt status. We put only one request, so we expec= t the + // next read reply to be the last. + // + Status =3D In32 (Dev, MPT_REG_REP_Q, &EmptyReply); + if (EFI_ERROR (Status) || EmptyReply !=3D MAX_UINT32) { + return EFI_DEVICE_ERROR; + } + + return EFI_SUCCESS; +} + +STATIC +EFI_STATUS +MptScsiHandleReply ( + IN MPT_SCSI_DEV *Dev, + IN UINT32 Reply, + OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet + ) +{ + CopyMem (Packet->SenseData, Dev->Dma->Sense, Packet->SenseDataLength); + if (Packet->DataDirection =3D=3D EFI_EXT_SCSI_DATA_DIRECTION_READ) { + CopyMem (Packet->InDataBuffer, Dev->Dma->Data, Packet->InTransferLengt= h); + } + + if (Reply =3D=3D Dev->Dma->IoRequest.Data.Header.MessageContext) { + // + // This is a turbo reply, everything is good + // + Packet->HostAdapterStatus =3D EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; + Packet->TargetStatus =3D EFI_EXT_SCSI_STATUS_TARGET_GOOD; + + } else if (Reply & (1 << 31)) { + DEBUG ((DEBUG_ERROR, "%a: request failed\n", __FUNCTION__)); + // + // When reply MSB is set, we got a full reply. Since we submitted only= one + // reply frame, we know it's IoReply. + // + Dev->IoReplyEnqueued =3D FALSE; + + Packet->TargetStatus =3D Dev->Dma->IoReply.Data.SCSIStatus; + Packet->SenseDataLength =3D Dev->Dma->IoReply.Data.SenseCount; + + switch (Dev->Dma->IoReply.Data.IOCStatus) { + case MPT_SCSI_IOCSTATUS_SUCCESS: + Packet->HostAdapterStatus =3D EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OK; + break; + case MPT_SCSI_IOCSTATUS_DEVICE_NOT_THERE: + Packet->HostAdapterStatus =3D + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT; + return EFI_TIMEOUT; + case MPT_SCSI_IOCSTATUS_DATA_UNDERRUN: + if (Packet->TargetStatus =3D=3D EFI_EXT_SCSI_STATUS_TARGET_GOOD) { + if (Packet->DataDirection =3D=3D EFI_EXT_SCSI_DATA_DIRECTION_READ)= { + Packet->InTransferLength =3D Dev->Dma->IoReply.Data.TransferCoun= t; + } else { + Packet->OutTransferLength =3D Dev->Dma->IoReply.Data.TransferCou= nt; + } + } + Packet->HostAdapterStatus =3D + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + return EFI_SUCCESS; + case MPT_SCSI_IOCSTATUS_DATA_OVERRUN: + Packet->HostAdapterStatus =3D + EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN; + return EFI_SUCCESS; + default: + Packet->HostAdapterStatus =3D EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; + return EFI_DEVICE_ERROR; + } + + } else { + DEBUG ((DEBUG_ERROR, "%a: unexpected reply\n", __FUNCTION__)); + Packet->HostAdapterStatus =3D EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; + return EFI_DEVICE_ERROR; + } + + return EFI_SUCCESS; +} + // // Ext SCSI Pass Thru // @@ -218,7 +487,44 @@ MptScsiPassThru ( IN EFI_EVENT Event OPTIONAL ) { - return EFI_UNSUPPORTED; + EFI_STATUS Status; + MPT_SCSI_DEV *Dev; + UINT32 Reply; + + Dev =3D MPT_SCSI_FROM_PASS_THRU (This); + Status =3D MptScsiPopulateRequest (Dev, *Target, Lun, Packet); + if (EFI_ERROR (Status)) { + // + // MptScsiPopulateRequest modified packet according to the error + // + return Status; + } + + Status =3D MptScsiSendRequest (Dev, Packet); + if (EFI_ERROR (Status)) { + goto Fatal; + } + + Status =3D MptScsiGetReply (Dev, &Reply); + if (EFI_ERROR (Status)) { + goto Fatal; + } + + return MptScsiHandleReply (Dev, Reply, Packet); + +Fatal: + // + // We erred in the middle of a transaction, a very serious problem has o= ccured + // and it's not clear if it's possible to recover without leaving the ha= rdware + // in an inconsistent state. Perhaps we would want to reset the device... + // + DEBUG ((DEBUG_ERROR, "%a: fatal error in scsi request\n", __FUNCTION__)); + Packet->InTransferLength =3D 0; + Packet->OutTransferLength =3D 0; + Packet->HostAdapterStatus =3D EFI_EXT_SCSI_STATUS_HOST_ADAPTER_OTHER; + Packet->TargetStatus =3D EFI_EXT_SCSI_STATUS_TARGET_TASK_ABORTED; + Packet->SenseDataLength =3D 0; + return EFI_DEVICE_ERROR; } =20 STATIC @@ -450,6 +756,7 @@ MptScsiControllerStart ( { EFI_STATUS Status; MPT_SCSI_DEV *Dev; + UINTN BytesMapped; =20 Dev =3D AllocateZeroPool (sizeof (*Dev)); if (Dev =3D=3D NULL) { @@ -494,9 +801,42 @@ MptScsiControllerStart ( goto CloseProtocol; } =20 + // + // Create buffers for data transfer + // + Status =3D Dev->PciIo->AllocateBuffer ( + Dev->PciIo, + AllocateAnyPages, + EfiBootServicesData, + EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)), + (VOID **)&Dev->Dma, + EFI_PCI_ATTRIBUTE_MEMORY_CACHED + ); + if (EFI_ERROR (Status)) { + goto RestoreAttributes; + } + + BytesMapped =3D sizeof (*Dev->Dma); + Status =3D Dev->PciIo->Map ( + Dev->PciIo, + EfiPciIoOperationBusMasterCommonBuffer, + Dev->Dma, + &BytesMapped, + &Dev->DmaPhysical, + &Dev->DmaMapping + ); + if (EFI_ERROR (Status)) { + goto FreeBuffer; + } + + if (BytesMapped !=3D sizeof (*Dev->Dma)) { + Status =3D EFI_OUT_OF_RESOURCES; + goto Unmap; + } + Status =3D MptScsiInit (Dev); if (EFI_ERROR (Status)) { - goto RestorePciAttributes; + goto Unmap; } =20 // @@ -531,6 +871,18 @@ MptScsiControllerStart ( UninitDev: MptScsiReset (Dev); =20 +Unmap: + Dev->PciIo->Unmap ( + Dev->PciIo, + Dev->DmaMapping + ); + +FreeBuffer: + Dev->PciIo->FreeBuffer ( + Dev->PciIo, + EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)), + Dev->Dma + ); RestoreAttributes: Dev->PciIo->Attributes ( Dev->PciIo, @@ -592,6 +944,17 @@ MptScsiControllerStop ( =20 MptScsiReset (Dev); =20 + Dev->PciIo->Unmap ( + Dev->PciIo, + Dev->DmaMapping + ); + + Dev->PciIo->FreeBuffer ( + Dev->PciIo, + EFI_SIZE_TO_PAGES (sizeof (*Dev->Dma)), + Dev->Dma + ); + Dev->PciIo->Attributes ( Dev->PciIo, EfiPciIoAttributeOperationEnable, diff --git a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf b/OvmfPkg/MptScsiDxe/MptScsi= Dxe.inf index 809f12173bb8..ef1f6a5ebb3a 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -34,3 +34,6 @@ [LibraryClasses] [Protocols] gEfiPciIoProtocolGuid ## TO_START gEfiExtScsiPassThruProtocolGuid ## BY_START + +[Pcd] + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec ## CONSUMES diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 28030391cff2..7fa1581f2101 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -270,6 +270,9 @@ [PcdsFixedAtBuild] ## Number of page frames to use for storing grant table entries. gUefiOvmfPkgTokenSpaceGuid.PcdXenGrantFrames|4|UINT32|0x33 =20 + ## Microseconds to stall between polling for MptScsi request result + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec|5|UINT32|0x39 + [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 (#57370): https://edk2.groups.io/g/devel/message/57370 Mute This Topic: https://groups.io/mt/73015391/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- From nobody Mon Apr 29 10:19:57 2024 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+57371+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+57371+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885761; cv=none; d=zohomail.com; s=zohoarc; b=JVLaD5Gj3BojMX1ZntRqxaDbyPc9YkjzidRl70xberC4B9nxCbOfhgiCQNfA/s9FFPdd7GgFPDSszdmLwSs1oChcj5QH12b65h53q8YFJfFutzRbQXuyPgzSP3W4SuDtcJd1rqToXcNjT+6zLoxEB63rUPa2kko1qObOSkdtkVI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885761; 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=NxQvlcHCpAwCFIODBKljz9S4OmM4jC7QKhnQ8a6ZcmE=; b=EaDrlLqg9TMXM0NvzuKzB5eE/TlUIvSkGSL6Z6t7kJu9o6IX5XhnFmQW4FHtC1K77qiziO+XTcvhK/h1qXruhdbQTpW4qre5KbxKh3FmEUZEwWbtLZQ0fCiHOkNgV2SlFS+BU+jBMZ6aZliKa0BJtks+I+T1nzbv9cS/TtcmGOY= 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+57371+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 1586885761265518.1227127532597; Tue, 14 Apr 2020 10:36:01 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id nkwpYY1788612xfJpi8Mn4iz; Tue, 14 Apr 2020 10:36:00 -0700 X-Received: from aserp2120.oracle.com (aserp2120.oracle.com [141.146.126.78]) by mx.groups.io with SMTP id smtpd.web12.667.1586885760480893088 for ; Tue, 14 Apr 2020 10:36:00 -0700 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 03EHAAxj173249; Tue, 14 Apr 2020 17:35:57 GMT X-Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by aserp2120.oracle.com with ESMTP id 30b5um69ut-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:56 +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 03EH7Eou116420; Tue, 14 Apr 2020 17:35:56 GMT X-Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserp3030.oracle.com with ESMTP id 30ctaarrfe-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:56 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id 03EHZtrs022333; Tue, 14 Apr 2020 17:35:55 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:55 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 12/13] OvmfPkg/MptScsiDxe: Report multiple targets Date: Tue, 14 Apr 2020 20:38:12 +0300 Message-Id: <20200414173813.7715-13-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: ffn4SLB0s85KkHlB0zZ3A9Gdx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885760; bh=8qCZU25ujGweDmhRuFrNl6+OuGmHEbszi0IBRmxB9KE=; h=Cc:Date:From:Reply-To:Subject:To; b=w8chJENcq5UCLKyRkYYzye8/vLdBNRC0LodCDq7+qbmJTfD/McwGDsBRYaiWh+YBHyW FJcDQZwgQUrVPqerItlpW4h14mA/qQ1uELwvvnAs/6l6Ok38Cco7rhdbN83ZB7Fg4b5mG dwAydyK/w75cwPUpYkxdAVQb6lqGCogix9w= 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 | 38 ++++++++++++++++++++++++------- OvmfPkg/MptScsiDxe/MptScsiDxe.inf | 1 + OvmfPkg/OvmfPkg.dec | 4 ++++ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index fcdaa4c338a4..3ea08857df5d 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -46,6 +46,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; @@ -159,6 +160,7 @@ MptScsiInit ( UINT32 ReplyWord; =20 Dev->StallPerPollUsec =3D PcdGet32 (PcdMptScsiStallPerPollUsec); + Dev->MaxTarget =3D PcdGet8 (PcdMptScsiMaxTargetLimit); =20 Status =3D MptScsiReset (Dev); if (EFI_ERROR (Status)) { @@ -169,7 +171,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_REPLY); =20 @@ -240,7 +242,7 @@ MptScsiPopulateRequest ( return EFI_UNSUPPORTED; } =20 - if (Target > 0 || Lun > 0 || + if (Target > Dev->MaxTarget || Lun > 0 || Packet->DataDirection > EFI_EXT_SCSI_DATA_DIRECTION_BIDIRECTIONAL || // // Trying to receive, but destination pointer is NULL, or contradict= ing @@ -552,12 +554,22 @@ 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; + } 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; } @@ -573,11 +585,17 @@ 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); + } 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; } @@ -595,6 +613,7 @@ MptScsiBuildDevicePath ( IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath ) { + MPT_SCSI_DEV *Dev; SCSI_DEVICE_PATH *ScsiDevicePath; =20 if (DevicePath =3D=3D NULL) { @@ -605,7 +624,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 @@ -635,6 +655,7 @@ MptScsiGetTargetLun ( OUT UINT64 *Lun ) { + MPT_SCSI_DEV *Dev; SCSI_DEVICE_PATH *ScsiDevicePath; =20 if (DevicePath =3D=3D NULL || @@ -647,8 +668,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 ef1f6a5ebb3a..26aca7f95315 100644 --- a/OvmfPkg/MptScsiDxe/MptScsiDxe.inf +++ b/OvmfPkg/MptScsiDxe/MptScsiDxe.inf @@ -37,3 +37,4 @@ [Protocols] =20 [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec ## CONSUMES + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiMaxTargetLimit ## CONSUMES diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 7fa1581f2101..7b56998abc9b 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -273,6 +273,10 @@ [PcdsFixedAtBuild] ## Microseconds to stall between polling for MptScsi request result gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiStallPerPollUsec|5|UINT32|0x39 =20 + ## Set the *inclusive* number of targets that MptScsi exposes for scan + # by ScsiBusDxe. + gUefiOvmfPkgTokenSpaceGuid.PcdMptScsiMaxTargetLimit|7|UINT8|0x40 + [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 (#57371): https://edk2.groups.io/g/devel/message/57371 Mute This Topic: https://groups.io/mt/73015393/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- From nobody Mon Apr 29 10:19:57 2024 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+57372+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+57372+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1586885764; cv=none; d=zohomail.com; s=zohoarc; b=UqbOjHRsypzoOOPRDMCvhQLWoCxC2LidB3MBS7kxV77fX8DYI8Erz6on7cLSsmjiMVniT2Jf8xHHOYqfV8ATlD+1l25n/2quNSNTEsv1DLQ1sHzfNHonQJks4lj2PW+wXh/0A0/JXdizvUWOyefp2TfW71YgBJzL1lCJKml+aEE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1586885764; 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=PgOs7dxYcz83BoLPw+7fy81cjvYW0F9tksApmEvPP0E=; b=LB0k4a2r2KgO8hmp4YPTgr6WPRVbXOIMWnAjU2MnXFI/g82FeRUmRXVerhTH6MHkP1zT/jp4N1hlWNrdEdPbo3m7flscBuYg397P48DUAjNAGB6g9meIfhTLmFDomY65ZXQA2UEomKuKQ5lAdsfV/o1kXaookdlJmaa1RvQVzwQ= 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+57372+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 1586885764392839.7526929358312; Tue, 14 Apr 2020 10:36:04 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id mutEYY1788612xKyyZiTlVZ7; Tue, 14 Apr 2020 10:36:04 -0700 X-Received: from userp2130.oracle.com (userp2130.oracle.com [156.151.31.86]) by mx.groups.io with SMTP id smtpd.web10.728.1586885763465725986 for ; Tue, 14 Apr 2020 10:36:03 -0700 X-Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EHAoGd141445; Tue, 14 Apr 2020 17:36:00 GMT X-Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 30b5ar68s7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:36:00 +0000 X-Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 03EH7RE1130567; Tue, 14 Apr 2020 17:35:59 GMT X-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 30bqm2e2pm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 14 Apr 2020 17:35:59 +0000 X-Received: from abhmp0018.oracle.com (abhmp0018.oracle.com [141.146.116.24]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 03EHZwr5026975; Tue, 14 Apr 2020 17:35:58 GMT X-Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 14 Apr 2020 10:35:58 -0700 From: "Nikita Leshenko" To: devel@edk2.groups.io Cc: Nikita Leshenko , liran.alon@oracle.com, aaron.young@oracle.com, Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 13/13] OvmfPkg/MptScsiDxe: Reset device on ExitBootServices() Date: Tue, 14 Apr 2020 20:38:13 +0300 Message-Id: <20200414173813.7715-14-nikita.leshchenko@oracle.com> In-Reply-To: <20200414173813.7715-1-nikita.leshchenko@oracle.com> References: <20200414173813.7715-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: 00koytN4utsnuSjiiihTJA0jx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1586885764; bh=uAhAPCTDYLnH+awdhriEM+NNbNyqONk5Zfq3wyH5VKE=; h=Cc:Date:From:Reply-To:Subject:To; b=SDZs0mqvLYXtLmjcK627DDYVqihWzNUKJ/ojVhsO5Qlp8liPiHYeB+JPl/qG0QfmH31 7gNk1QcnXcHS3V2FbJHlm3wO32E67grJqmddkPP1Dg0EkN1hFTip2ghEcyFk2A44LG4ml VEtCLWHJ2o/Tl0RzPlKXG3/i3OAv4IeNzAU= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" This causes the device to forget about the reply frame. We allocated the reply frame in EfiBootServicesData type memory, and code executing after ExitBootServices() is permitted to overwrite it. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3D2390 Signed-off-by: Nikita Leshenko Reviewed-by: Laszlo Ersek --- OvmfPkg/MptScsiDxe/MptScsi.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/MptScsiDxe/MptScsi.c b/OvmfPkg/MptScsiDxe/MptScsi.c index 3ea08857df5d..e632b076fc4a 100644 --- a/OvmfPkg/MptScsiDxe/MptScsi.c +++ b/OvmfPkg/MptScsiDxe/MptScsi.c @@ -45,6 +45,7 @@ typedef struct { EFI_EXT_SCSI_PASS_THRU_MODE PassThruMode; EFI_PCI_IO_PROTOCOL *PciIo; UINT64 OriginalPciAttributes; + EFI_EVENT ExitBoot; UINT32 StallPerPollUsec; UINT8 MaxTarget; MPT_SCSI_DMA_BUFFER *Dma; @@ -696,6 +697,19 @@ MptScsiResetChannel ( return EFI_UNSUPPORTED; } =20 +STATIC +VOID +EFIAPI +MptScsiExitBoot ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + MPT_SCSI_DEV *Dev; + + Dev =3D Context; + MptScsiReset (Dev); +} STATIC EFI_STATUS EFIAPI @@ -861,6 +875,17 @@ MptScsiControllerStart ( goto Unmap; } =20 + Status =3D gBS->CreateEvent ( + EVT_SIGNAL_EXIT_BOOT_SERVICES, + TPL_CALLBACK, + &MptScsiExitBoot, + Dev, + &Dev->ExitBoot + ); + if (EFI_ERROR (Status)) { + goto UninitDev; + } + // // Host adapter channel, doesn't exist // @@ -885,11 +910,14 @@ MptScsiControllerStart ( &Dev->PassThru ); if (EFI_ERROR (Status)) { - goto UninitDev; + goto CloseExitBoot; } =20 return EFI_SUCCESS; =20 +CloseExitBoot: + gBS->CloseEvent (Dev->ExitBoot); + UninitDev: MptScsiReset (Dev); =20 @@ -964,6 +992,8 @@ MptScsiControllerStop ( return Status; } =20 + gBS->CloseEvent (Dev->ExitBoot); + MptScsiReset (Dev); =20 Dev->PciIo->Unmap ( --=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 (#57372): https://edk2.groups.io/g/devel/message/57372 Mute This Topic: https://groups.io/mt/73015395/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-